private Dictionary <Int32, CaseBusiness.ISO.MISO8583.Parsing.FieldParseInfo> MontaListaVar(DataTable dt, String track)
        {
            Dictionary <Int32, CaseBusiness.ISO.MISO8583.Parsing.FieldParseInfo> lista = new Dictionary <Int32, CaseBusiness.ISO.MISO8583.Parsing.FieldParseInfo>();

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                Int32   existe     = 0;
                String  trackBusca = dt.Rows[i]["Track"].ToString().Trim();
                Boolean inicio     = trackBusca.StartsWith(track + ',');

                if (inicio)
                {
                    existe = trackBusca.IndexOf(trackBusca, 0);
                }

                if (inicio)
                {
                    CaseBusiness.ISO.MISO8583.Parsing.FieldParseInfo fpi = null;

                    fpi = new CaseBusiness.ISO.MISO8583.Parsing.FieldParseInfo(
                        (CaseBusiness.ISO.MISO8583.IsoType)Enum.Parse(typeof(CaseBusiness.ISO.MISO8583.IsoType), dt.Rows[i]["TipoDados"].ToString()),
                        dt.Rows[i]["Tamanho"] == DBNull.Value ? 0 : Convert.ToInt32(dt.Rows[i]["Tamanho"]),
                        Convert.ToBoolean(dt.Rows[i]["Obrigatorio"]),
                        (CaseBusiness.ISO.MISO8583.TypeElement)Enum.Parse(typeof(CaseBusiness.ISO.MISO8583.TypeElement), dt.Rows[i]["TipoCampo"].ToString().ToUpper().Equals("FIELD") ? "1" : "3"),
                        MontaListaVar(dt, trackBusca),
                        dt.Rows[i]["TamanhoId"] == DBNull.Value ? 0 : Convert.ToInt32(dt.Rows[i]["TamanhoId"]),
                        dt.Rows[i]["TamanhoTamanho"] == DBNull.Value ? 0 : Convert.ToInt32(dt.Rows[i]["TamanhoTamanho"])
                        );

                    //lista.
                    lista.Add(Convert.ToInt32(dt.Rows[i]["NumeroCampo"]), fpi);

                    if (fpi.SubDataElements_Fields.Count > 0)
                    {
                        i = i + QuantidadeItens(fpi.SubDataElements_Fields);
                    }
                }
            }

            return(lista);
        }
        public ConcurrentDictionary <Int32, CaseBusiness.ISO.MISO8583.Parsing.FieldParseInfo> ListarMapaVar(String interfaceHeader, String tipoFormato)
        {
            DataTable dtInterfaceDetalhe = null;
            ConcurrentDictionary <Int32, CaseBusiness.ISO.MISO8583.Parsing.FieldParseInfo> retorno = new ConcurrentDictionary <Int32, CaseBusiness.ISO.MISO8583.Parsing.FieldParseInfo>();

            try
            {
                if (ModoEntidadeOnly)
                {
                    throw new ApplicationException("Esta Instância da classe MensagemInterfaceDetalhe está operando em Modo Entidade Only");
                }

                acessoDadosBase.AddParameter("@MSGITFHEAD_ID", interfaceHeader.Trim());

                dtInterfaceDetalhe = acessoDadosBase.ExecuteDataSet(CommandType.StoredProcedure,
                                                                    "prMSGITFDET_SEL_LISTAR_MAPA").Tables[0];
                // Renomear Colunas
                RenomearColunas(ref dtInterfaceDetalhe);

                //Montar retono
                for (int i = 0; i < dtInterfaceDetalhe.Rows.Count; i++)
                {
                    if (dtInterfaceDetalhe.Rows[i]["Track"].ToString().Split(',').Length == 1) //Se campo não tiver campos com separação com virgula (,) no track significa que ele é um campo no 1º nível
                    {
                        CaseBusiness.ISO.MISO8583.Parsing.FieldParseInfo    fpi             = null;
                        CaseBusiness.ISO.MISO8583.Parsing.ConfigParser.Base baseCodificacao = ISO.MISO8583.Parsing.ConfigParser.Base.Decimal;

                        switch (dtInterfaceDetalhe.Rows[i]["TipoBase"].ToString())
                        {
                        case "BIN":
                            baseCodificacao = ISO.MISO8583.Parsing.ConfigParser.Base.Binary;
                            break;

                        case "OCT":
                            baseCodificacao = ISO.MISO8583.Parsing.ConfigParser.Base.Octal;
                            break;

                        case "DEC":
                            baseCodificacao = ISO.MISO8583.Parsing.ConfigParser.Base.Decimal;
                            break;

                        case "HEX":
                            baseCodificacao = ISO.MISO8583.Parsing.ConfigParser.Base.Hexadecimal;
                            break;

                        case "B64":
                            baseCodificacao = ISO.MISO8583.Parsing.ConfigParser.Base.B64;
                            break;
                        }

                        fpi = new CaseBusiness.ISO.MISO8583.Parsing.FieldParseInfo(
                            (CaseBusiness.ISO.MISO8583.IsoType)Enum.Parse(typeof(CaseBusiness.ISO.MISO8583.IsoType), dtInterfaceDetalhe.Rows[i]["TipoDados"].ToString()),
                            dtInterfaceDetalhe.Rows[i]["Tamanho"] == DBNull.Value ? 0 : Convert.ToInt32(dtInterfaceDetalhe.Rows[i]["Tamanho"]),
                            Convert.ToBoolean(dtInterfaceDetalhe.Rows[i]["Obrigatorio"]),
                            (CaseBusiness.ISO.MISO8583.TypeElement)Enum.Parse(typeof(CaseBusiness.ISO.MISO8583.TypeElement), dtInterfaceDetalhe.Rows[i]["TipoCampo"].ToString().ToUpper().Equals("FIELD") ? "1" : "3"),
                            MontaListaVar(dtInterfaceDetalhe, dtInterfaceDetalhe.Rows[i]["Track"].ToString().Trim()),
                            baseCodificacao
                            );

                        retorno.TryAdd(Convert.ToInt32(dtInterfaceDetalhe.Rows[i]["NumeroCampo"]), fpi);
                    }
                }
            }
            catch (Exception ex)
            {
                CaseBusiness.Framework.Log.Log.Logar(CaseBusiness.Framework.TipoLog.Erro, ex.Message, ex.StackTrace, "", "", DateTime.Now, CaseBusiness.Framework.Configuracao.Configuracao.Aplicacao, CaseBusiness.Framework.Tela.Nenhum, 0);
                throw;
            }

            return(retorno);
        }