예제 #1
0
            public void Executar(Model.Integracao integracao)
            {
                var configuracao = integracao.IntegracaoParaRest();

                configuracao.Mapeamentos            = MapearParaAdapter(integracao.Mapeamento);
                configuracao.MapeamentosQueryString = MapearParaAdapter(integracao.MapeamentoQueryString);
                configuracao.MapeamentoRetorno      = MapearParaAdapter(integracao.MapeamentoRetorno);

                try
                {
                    if (integracao.Consumidor)
                    {
                        Consumidor(integracao, configuracao);
                    }
                    else
                    {
                        Executor(integracao, configuracao);
                    }
                }
                catch (Exception ex)
                {
                    Model.LogIntegracao entLogIntegracao = new Model.LogIntegracao();
                    entLogIntegracao.Conteudo   = ex.Message;
                    entLogIntegracao.Integracao = integracao;
                    entLogIntegracao.Status     = 2; //1 Sucesso 2 Erro
                    new BS.LogIntegracao().Inserir(entLogIntegracao);
                    //ServiceLog.LogError(String.Format("Erro: {0} - Message: {1} - StackTrace: {2}", integracao.Nome, ex.Message, ex.ToString()));
                }

                if (integracao.DestinoID > 0)
                {
                    new Integracao().Executar(integracao.DestinoID, true);
                }
            }
        public int AtualizarHorarioDeExecucao(Model.Integracao entIntegracao)
        {
            List <IDbDataParameter> lst = new List <IDbDataParameter>();

            lst.Add((IDbDataParameter)database.CreateParameter("p_integracaoID", entIntegracao.ID));
            lst.Add((IDbDataParameter)database.CreateParameter("p_hora", entIntegracao.DataHoraUltimaExecucao));
            return(new SQLHelper(false, "SP_INT_UP_HORABYINTEGRACAOID", lst).NonQuery());
        }
예제 #3
0
            private void ExecutaItemFila(Model.Integracao ent, Model.Fila fila, Selia.Integrador.Adapter.WebService.Config objConfig, List <Selia.Integrador.Adapter.Util.Mapeamento.Entidade> MapeamentoEntrada)
            {
                try
                {
                    Selia.Integrador.Adapter.Resultado objResult = new Selia.Integrador.Adapter.WebService().Executar(objConfig, fila.Conteudo);

                    Model.LogFila entLogFila = new Model.LogFila();

                    if (!string.IsNullOrEmpty(objResult.ParametrosEnvio))
                    {
                        entLogFila.Conteudo = objResult.ParametrosEnvio;
                    }

                    entLogFila.Conteudo         = objResult.ParametrosEnvio;
                    entLogFila.ConteudoFila     = fila.Conteudo;
                    entLogFila.ChavePrimaria    = fila.ChavePrimaria;
                    entLogFila.ChaveSecundaria  = fila.ChaveSecundaria;
                    entLogFila.LogIntegracao.ID = fila.LogIntegracaoID;
                    entLogFila.FilaID           = fila.ID;
                    entLogFila.IntegracaoID     = ent.ID;

                    if (!string.IsNullOrEmpty(objResult.Mensagem))
                    {
                        entLogFila.ConteudoRetorno = objResult.Mensagem;
                    }

                    if (objResult.TipoMensagem == Selia.Integrador.Adapter.Resultado.Tipo.Sucesso)
                    {
                        new BS.Fila().Excluir(fila.ID);
                        if (ent.Destino != null)
                        {
                            new BS.Fila().ProcessarFila(objResult, ent, MapeamentoEntrada);
                        }
                    }
                    else
                    {
                        new BS.Fila().AtualizarStatus(Model.Fila.TipoStatus.Erro, fila.ID);

                        if (!string.IsNullOrEmpty(ent.AcaoReturnoErro))
                        {
                        }
                    }

                    new BS.LogFila().Inserir(entLogFila);
                }
                catch (Exception ex)
                {
                    Model.LogIntegracao entLogIntegracao = new Model.LogIntegracao();
                    entLogIntegracao.Conteudo   = ex.Message;
                    entLogIntegracao.Integracao = ent;
                    entLogIntegracao.Status     = 1;
                    new BS.LogIntegracao().Inserir(entLogIntegracao);
                    //ServiceLog.LogError(String.Format("Erro: {0} - Message: {1} - StackTrace: {2}", ent.Nome, ex.Message, ex.StackTrace));
                }
            }
예제 #4
0
            private void Consumidor(Model.Integracao integracao, Selia.Integrador.Adapter.Rest.Config configuracao)
            {
                int maxDegreeOfParallelism = integracao.NivelParalelismo;

                Parallel.ForEach(integracao.Fila, new ParallelOptions()
                {
                    MaxDegreeOfParallelism = maxDegreeOfParallelism
                }, (fila) =>
                {
                    ExecutaItemFila(integracao, fila, configuracao);
                });
            }
        public bool ExecucaoNoHorario(Model.Integracao integracao)
        {
            bool Retorno = false;

            if (integracao.ExecucaoMinutos > 0)
            {
                //ServiceLog.LogWarning(String.Format("{0} - Execução minutos:{1}. {2}", integracao.Nome, integracao.ExecucaoMinutos, DateTime.Now.ToString()));

                if (integracao.DataHoraUltimaExecucao == null || integracao.DataHoraUltimaExecucao.AddMinutes(Convert.ToDouble(integracao.ExecucaoMinutos)) < DateTime.Now)
                {
                    Retorno = true;
                }
            }
            else if (integracao.ExecucaoHorarios != null)
            {
                string[] horarios = integracao.ExecucaoHorarios.Split(Char.Parse(";"));

                //ServiceLog.LogWarning(String.Format("{0} - Execução horários:{1}. {2}", integracao.Nome, integracao.ExecucaoHorarios, DateTime.Now.ToString()));

                foreach (string item in horarios)
                {
                    if (!string.IsNullOrEmpty(item.Trim()))
                    {
                        string[] horario = item.Split(char.Parse(":"));
                        int      hora    = int.Parse(horario[0]);
                        int      minutos = 00;

                        if (horario.Length > 1)
                        {
                            minutos = int.Parse(horario[1]);
                        }

                        DateTime dtaExecucao = Convert.ToDateTime(DateTime.Now.ToShortDateString() + " " + hora + ":" + minutos);

                        //ServiceLog.LogWarning(String.Format("{0} - Data Execução:{1}. {2}. Data última execução:{3}", integracao.Nome, dtaExecucao, DateTime.Now.ToString(), integracao.DataHoraUltimaExecucao.ToString()));

                        if ((integracao.DataHoraUltimaExecucao <= dtaExecucao) && (DateTime.Now >= dtaExecucao))
                        {
                            //ServiceLog.LogWarning(String.Format("{0} - Dentro do IF - Data Execução:{1}. {2}. Data última execução:{3}", integracao.Nome, dtaExecucao, DateTime.Now.ToString(), integracao.DataHoraUltimaExecucao.ToString()));

                            Retorno = true;
                        }

                        if (Retorno)
                        {
                            break;
                        }
                    }
                }
            }
            return(Retorno);
        }
예제 #6
0
        public static Selia.Integrador.Adapter.Rest.Config IntegracaoParaRest(this Model.Integracao integracao)
        {
            var ret = new Selia.Integrador.Adapter.Rest.Config();

            var rest = ((Model.Interface.Rest)integracao.Interface.Item);

            ret.Rest               = rest;
            ret.AcaoFinal          = integracao.AcaoFinal;
            ret.AcaoInicial        = integracao.AcaoInicial;
            ret.ElementoSeparador  = integracao.ElementoRegistro;
            ret.AcaoCabecalho      = integracao.AcaoCabecalho;
            ret.NodesNaoUtilizados = integracao.NodesNaoUtilizados;

            return(ret);
        }
        public void Executar(int integracaoId, bool ignoreTime)
        {
            Model.Integracao ent = null;
            lock (lockObject)
            {
                ent = ConsultarUnicaIntegracaoParaExecucao(integracaoId);
                System.Threading.Thread.Sleep(50);
            }

            if (ent != null)
            {
                if (ignoreTime || ExecucaoNoHorario(ent))
                {
                    //ServiceLog.LogInfo(String.Format("Iniciando: {0}", ent.Nome));

                    try
                    {
                        if (ent.Interface.Item.GetType() == typeof(Model.Interface.ArquivoTexto))
                        {
                            new Interface.ArquivoText().Executar(ent);
                        }
                        else if (ent.Interface.Item.GetType() == typeof(Model.Interface.WebService))
                        {
                            new Interface.WebService().Executar(ent);
                        }
                        else if (ent.Interface.Item.GetType() == typeof(Model.Interface.DB))
                        {
                            new Interface.DB().Executar(ent);
                        }
                        else if (ent.Interface.Item.GetType() == typeof(Model.Interface.Rest))
                        {
                            new Interface.Rest().Executar(ent);
                        }
                    }
                    catch (Exception ex)
                    {
                        //ServiceLog.LogError(String.Format("Erro: {0} - Message: {1}", ent.Nome, ex.ToString()));
                    }

                    ent.DataHoraUltimaExecucao = DateTime.Now;
                    AtualizarHorarioDeExecucao(ent);
                    //ServiceLog.LogInfo(String.Format("Finalizando: {0}", ent.Nome));
                }
                this.EmUso(integracaoId, false);
            }
        }
예제 #8
0
            public void Executar(Model.Integracao ent, XmlDocument Fila = null)
            {
                Selia.Integrador.Adapter.WebService.Config objConfig = PreencherEntWebService(ent);

                if (ent.Consumidor)
                {
                    Consumidor(objConfig, ent);
                }
                else
                {
                    Executor(objConfig, ent, Fila);
                }

                if (ent.DestinoID > 0)
                {
                    new Integracao().Executar(ent.DestinoID, true);
                }
            }
예제 #9
0
            public Selia.Integrador.Adapter.WebService.Config PreencherEntWebService(Model.Integracao ent)
            {
                var item = ((Model.Interface.WebService)ent.Interface.Item);

                Selia.Integrador.Adapter.WebService.Config objConfig = new Selia.Integrador.Adapter.WebService.Config();
                objConfig.Url               = item.Url;
                objConfig.Metodo            = item.Metodo;
                objConfig.Login             = item.Login;
                objConfig.Senha             = item.Senha;
                objConfig.ElementoSeparador = ent.ElementoRegistro;
                objConfig.ExecucaoInicial   = ent.AcaoInicial;
                objConfig.ExecucaoFinal     = ent.AcaoFinal;
                objConfig.Action            = item.Action;
                objConfig.ConnectionString  = ent.ConnectionString;

                objConfig.Mapeamentos = MapearParaAdapter(ent.Mapeamento);
                return(objConfig);
            }
예제 #10
0
            private void Executor(Model.Integracao integracao, Selia.Integrador.Adapter.Rest.Config configuracao)
            {
                try
                {
                    Selia.Integrador.Adapter.Resultado objResult = new Selia.Integrador.Adapter.Rest().Executar(configuracao);


                    if (objResult.TipoMensagem == Selia.Integrador.Adapter.Resultado.Tipo.Sucesso)
                    {
                        new BS.Fila().ProcessarFila(objResult, integracao, configuracao.Mapeamentos);
                    }
                    else
                    {
                        Model.LogIntegracao entLogIntegracao = new Model.LogIntegracao();
                        entLogIntegracao.Conteudo   = objResult.Mensagem;
                        entLogIntegracao.Integracao = integracao;
                        entLogIntegracao.Status     = 1;
                        new BS.LogIntegracao().Inserir(entLogIntegracao);
                        //ServiceLog.LogError(String.Format("Erro: {0} - Message: {1}", integracao.Nome, objResult.Mensagem));
                    }
                }
                catch (Selia.Integrador.Utils.Exceptions.HttpRestRetornoException exIntegradoRetorno)
                {
                    Model.LogIntegracao entLogIntegracao = new Model.LogIntegracao();
                    entLogIntegracao.Conteudo   = string.Format("{0} - {1}", exIntegradoRetorno.Message, exIntegradoRetorno.InformacaoAdicional);
                    entLogIntegracao.Integracao = integracao;
                    entLogIntegracao.Status     = 2; //1 Sucesso 2 Erro
                    new BS.LogIntegracao().Inserir(entLogIntegracao);
                    //ServiceLog.LogError(String.Format("Erro: {0} - Message: {1} - StackTrace: {2}", integracao.Nome, exIntegradoRetorno.Message, exIntegradoRetorno.ToString()));
                }
                catch (Exception ex)
                {
                    Model.LogIntegracao entLogIntegracao = new Model.LogIntegracao();
                    entLogIntegracao.Conteudo   = ex.Message;
                    entLogIntegracao.Integracao = integracao;
                    entLogIntegracao.Status     = 1;
                    new BS.LogIntegracao().Inserir(entLogIntegracao);
                    //ServiceLog.LogError(String.Format("Erro: {0} - Message: {1} - StackTrace: {2}", integracao.Nome, ex.Message, ex.StackTrace));
                }
            }
예제 #11
0
 public int AtualizarHorarioDeExecucao(Model.Integracao entIntegracao)
 {
     return(new Selia.Integrador.DAL.Integracao().AtualizarHorarioDeExecucao(entIntegracao));
 }
예제 #12
0
        public List <Model.Integracao> PreencherSimples(DataTable dt)
        {
            List <Model.Integracao> lst = new List <Model.Integracao>();

            foreach (DataRow row in dt.Rows)
            {
                Model.Integracao ent = new Model.Integracao();

                if (row["ID"] != DBNull.Value)
                {
                    ent.ID = Convert.ToInt32(row["ID"].ToString());
                }
                if (row["AdapterID"] != DBNull.Value)
                {
                    ent.Adapter    = new Model.Adapter();
                    ent.Adapter.ID = Convert.ToInt32(row["AdapterID"].ToString());
                }
                if (row["DataHoraUltimaExecucao"] != DBNull.Value)
                {
                    ent.DataHoraUltimaExecucao = Convert.ToDateTime(row["DataHoraUltimaExecucao"].ToString());
                }
                if (row["EmUso"] != DBNull.Value)
                {
                    ent.EmUso = row["EmUso"].ToString() == "0" ? false : true;
                }
                if (row["ExecucaoHorarios"] != DBNull.Value)
                {
                    ent.ExecucaoHorarios = row["ExecucaoHorarios"].ToString();
                }
                if (row["ExecucaoMinutos"] != DBNull.Value)
                {
                    ent.ExecucaoMinutos = Convert.ToInt32(row["ExecucaoMinutos"]);
                }


                if (row["Nome"] != DBNull.Value)
                {
                    ent.Nome = row["Nome"].ToString();
                }

                if (row["ElementoRegistro"] != DBNull.Value)
                {
                    ent.ElementoRegistro = row["ElementoRegistro"].ToString();
                }

                if (row["PKPrimaria"] != DBNull.Value)
                {
                    ent.PKPrimaria = row["PKPrimaria"].ToString();
                }
                if (row["PKSecundaria"] != DBNull.Value)
                {
                    ent.PKSecundaria = row["PKSecundaria"].ToString();
                }
                if (row["Status"] != DBNull.Value)
                {
                    ent.Status = row["Status"].ToString() == "0" ? false : true;
                }
                if (row["AcaoInicial"] != DBNull.Value)
                {
                    ent.AcaoInicial = row["AcaoInicial"].ToString();
                }

                if (row["AcaoFinal"] != DBNull.Value)
                {
                    ent.AcaoFinal = row["AcaoFinal"].ToString();
                }

                if (row["AcaoEnfileiramento"] != DBNull.Value)
                {
                    ent.AcaoEnfileiramento = row["AcaoEnfileiramento"].ToString();
                }

                if (row["DestinoID"] != DBNull.Value)
                {
                    ent.DestinoID             = Convert.ToInt32(row["DestinoID"].ToString());
                    ent.Destino               = new Model.Integracao();
                    ent.Destino               = new Selia.Integrador.DAL.Integracao().ConsultarIntegracaoSimples(Convert.ToInt32(row["DestinoID"]));
                    ent.Destino.LogIntegracao = new Selia.Integrador.DAL.LogIntegracao().ConsultarSimples(ent.ID).Where(c => c.Status == 1).ToList();
                    ent.Destino.QtdErros      = new Selia.Integrador.DAL.LogFila().ConsultarQtdErros(ent.ID);
                    ent.Destino.PaiID         = ent.ID;
                }
                else
                {
                    ent.Destino = new Model.Integracao();
                    var LogIntegracoes = new Selia.Integrador.DAL.LogIntegracao().ConsultarSimples(ent.ID).Where(c => c.Status == 1);
                    if (LogIntegracoes.ToList().Count > 0)
                    {
                        ent.Destino.LogIntegracao = LogIntegracoes.ToList();
                    }
                    ent.Destino.QtdErros = new Selia.Integrador.DAL.LogFila().ConsultarQtdErros(ent.ID);
                    ent.Destino.PaiID    = ent.ID;
                }
                if (row["Consumidor"] != DBNull.Value)
                {
                    ent.Consumidor = row["Consumidor"].ToString() == "0" ? false : true;
                }


                if (ent.LogIntegracao == null)
                {
                    ent.LogIntegracao = new List <Model.LogIntegracao>();
                }
                if (ent.LogFila == null)
                {
                    ent.LogFila = new List <Model.LogFila>();
                }

                lst.Add(ent);
            }
            return(lst);
        }
예제 #13
0
            public void Executar(Model.Integracao ent)
            {
                Selia.Integrador.Adapter.ArquivoTexto.Config objConfig = new Selia.Integrador.Adapter.ArquivoTexto.Config();
                var item = ((Model.Interface.ArquivoTexto)ent.Interface.Item);

                objConfig.FTP                = item.FTP;
                objConfig.Login              = item.Login;
                objConfig.Senha              = item.Senha;
                objConfig.Url                = item.Url;
                objConfig.Delimitador        = item.Delimitador;
                objConfig.Diretorio          = item.Diretorio;
                objConfig.Encoding           = item.Encoding;
                objConfig.ElementoSeparador  = ent.ElementoRegistro;
                objConfig.AcaoInicial        = ent.AcaoInicial;
                objConfig.AcaoFinal          = ent.AcaoFinal;
                objConfig.AcaoEnfileiramento = ent.AcaoEnfileiramento;
                objConfig.Mapeamentos        = MapearParaAdapter(ent.Mapeamento);
                objConfig.ConnectionString   = ent.ConnectionString;

                if (ent.Consumidor)
                {
                    foreach (Model.Fila fila in ent.Fila)
                    {
                        try
                        {
                            Selia.Integrador.Adapter.Resultado objResult = new Selia.Integrador.Adapter.ArquivoTexto().Executar(objConfig, fila.Conteudo, ent.ID);

                            Model.LogFila entLogFila = new Model.LogFila();
                            entLogFila.ConteudoFila     = fila.Conteudo;
                            entLogFila.ChavePrimaria    = fila.ChavePrimaria;
                            entLogFila.ChaveSecundaria  = fila.ChaveSecundaria;
                            entLogFila.LogIntegracao.ID = fila.LogIntegracaoID;
                            entLogFila.IntegracaoID     = ent.ID;
                            entLogFila.FilaID           = fila.ID;

                            if (!string.IsNullOrEmpty(objResult.Mensagem))
                            {
                                entLogFila.ConteudoRetorno = objResult.Mensagem;
                            }

                            new BS.LogFila().Inserir(entLogFila);

                            if (objResult.TipoMensagem == Selia.Integrador.Adapter.Resultado.Tipo.Sucesso)
                            {
                                new BS.Fila().Excluir(fila.ID);

                                if (ent.Destino != null)
                                {
                                    ent.AcaoInicial             = ent.Destino.AcaoInicial;
                                    ent.AcaoFinal               = ent.Destino.AcaoFinal;
                                    ent.AcaoEnfileiramento      = ent.Destino.AcaoEnfileiramento;
                                    ent.ElementoRegistro        = ent.Destino.ElementoRegistro;
                                    ent.PKPrimaria              = ent.Destino.PKPrimaria;
                                    objResult.ElementoSeparador = ent.Destino.ElementoRegistro;
                                    objConfig.Mapeamentos       = MapearParaAdapter(ent.Mapeamento);

                                    new BS.Fila().ProcessarFila(objResult, ent, null);
                                }
                            }
                            else
                            {
                                new BS.Fila().AtualizarStatus(Model.Fila.TipoStatus.Erro, fila.ID);
                            }
                        }
                        catch (Exception ex)
                        {
                            Model.LogIntegracao entLogIntegracao = new Model.LogIntegracao();
                            entLogIntegracao.Conteudo   = ex.Message;
                            entLogIntegracao.Integracao = ent;
                            entLogIntegracao.Status     = 1;
                            new BS.LogIntegracao().Inserir(entLogIntegracao);
                            //ServiceLog.LogError(String.Format("Erro: {0} - Message: {1} - StackTrace: {2}", ent.Nome, ex.Message, ex.StackTrace));
                        }
                    }
                }
                else
                {
                    try
                    {
                        Selia.Integrador.Adapter.Resultado objResult = new Selia.Integrador.Adapter.ArquivoTexto().Executar(objConfig);
                        if (!string.IsNullOrEmpty(objResult.Mensagem))
                        {
                            if (objResult.TipoMensagem == Selia.Integrador.Adapter.Resultado.Tipo.Sucesso)
                            {
                                if (ent.Destino != null)
                                {
                                    ent.AcaoInicial             = ent.Destino.AcaoInicial;
                                    ent.AcaoFinal               = ent.Destino.AcaoFinal;
                                    ent.AcaoEnfileiramento      = ent.Destino.AcaoEnfileiramento;
                                    ent.ElementoRegistro        = ent.Destino.ElementoRegistro;
                                    ent.PKPrimaria              = ent.Destino.PKPrimaria;
                                    objResult.ElementoSeparador = ent.Destino.ElementoRegistro;
                                    objConfig.Mapeamentos       = MapearParaAdapter(ent.Mapeamento);

                                    new BS.Fila().ProcessarFila(objResult, ent, null);
                                }
                            }
                            else
                            {
                                Model.LogIntegracao entLogIntegracao = new Model.LogIntegracao();
                                entLogIntegracao.Conteudo   = objResult.Mensagem;
                                entLogIntegracao.Integracao = ent;
                                entLogIntegracao.Status     = 1;
                                new BS.LogIntegracao().Inserir(entLogIntegracao);
                                //ServiceLog.LogError(String.Format("Erro: {0} - Message: {1}", ent.Nome, objResult.Mensagem));
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Model.LogIntegracao entLogIntegracao = new Model.LogIntegracao();
                        entLogIntegracao.Conteudo   = ex.Message;
                        entLogIntegracao.Integracao = ent;
                        entLogIntegracao.Status     = 1;
                        new BS.LogIntegracao().Inserir(entLogIntegracao);
                        //ServiceLog.LogError(String.Format("Erro: {0} - Message: {1} - StackTrace: {2}", ent.Nome, ex.Message, ex.StackTrace));
                    }
                }
            }
예제 #14
0
        public List <Model.Integracao> Preencher(DataTable dt)
        {
            List <Model.Integracao> lst = new List <Model.Integracao>();

            foreach (DataRow row in dt.Rows)
            {
                Model.Integracao ent = new Model.Integracao();

                if (row["ID"] != DBNull.Value)
                {
                    ent.ID = Convert.ToInt32(row["ID"].ToString());
                }
                if (row["AdapterID"] != DBNull.Value)
                {
                    ent.Adapter    = new Model.Adapter();
                    ent.Adapter.ID = Convert.ToInt32(row["AdapterID"].ToString());
                }
                if (row["DataHoraUltimaExecucao"] != DBNull.Value)
                {
                    ent.DataHoraUltimaExecucao = Convert.ToDateTime(row["DataHoraUltimaExecucao"].ToString());
                }
                if (row["EmUso"] != DBNull.Value)
                {
                    ent.EmUso = row["EmUso"].ToString() == "0" ? false : true;
                }
                if (row["ExecucaoHorarios"] != DBNull.Value)
                {
                    ent.ExecucaoHorarios = row["ExecucaoHorarios"].ToString();
                }
                if (row["ExecucaoMinutos"] != DBNull.Value)
                {
                    ent.ExecucaoMinutos = Convert.ToInt32(row["ExecucaoMinutos"]);
                }

                //consultar no objeto para não alterar a procedure, menos impacto
                var mapeamento = new Selia.Integrador.DAL.Mapeamento().Consultar(ent.ID);

                ent.Mapeamento = mapeamento.Where(w => w.BitMapRetorno == false && w.BitQueryString == false).ToList();

                ent.MapeamentoQueryString = mapeamento.Where(w => w.BitMapRetorno == false && w.BitQueryString == true).ToList();

                ent.MapeamentoRetorno = mapeamento.Where(w => w.BitMapRetorno == true).ToList();

                if (row["InterfaceID"] != DBNull.Value)
                {
                    ent.Interface = new Model.Interface();
                    if (ent.Adapter.Tipo == Model.Adapter.TipoAdapter.DB)
                    {
                        ent.Interface.Item = new Selia.Integrador.DAL.Interface.DB().Consultar(Convert.ToInt32(row["InterfaceID"].ToString()));
                    }
                    else if (ent.Adapter.Tipo == Model.Adapter.TipoAdapter.ArquivoTexto)
                    {
                        ent.Interface.Item = new Selia.Integrador.DAL.Interface.ArquivoTexto().Consultar(Convert.ToInt32(row["InterfaceID"].ToString()));
                    }
                    else if (ent.Adapter.Tipo == Model.Adapter.TipoAdapter.WebService)
                    {
                        ent.Interface.Item = new Selia.Integrador.DAL.Interface.WebService().Consultar(Convert.ToInt32(row["InterfaceID"].ToString()));
                    }
                    else if (ent.Adapter.Tipo == Model.Adapter.TipoAdapter.Rest)
                    {
                        ent.Interface.Item = new Selia.Integrador.DAL.Interface.Rest().Consultar(Convert.ToInt32(row["InterfaceID"].ToString()));
                    }
                }


                if (row["Nome"] != DBNull.Value)
                {
                    ent.Nome = row["Nome"].ToString();
                }

                if (row["ElementoRegistro"] != DBNull.Value)
                {
                    ent.ElementoRegistro = row["ElementoRegistro"].ToString();
                }

                if (row["PKPrimaria"] != DBNull.Value)
                {
                    ent.PKPrimaria = row["PKPrimaria"].ToString();
                }
                if (row["PKSecundaria"] != DBNull.Value)
                {
                    ent.PKSecundaria = row["PKSecundaria"].ToString();
                }
                if (row["Status"] != DBNull.Value)
                {
                    ent.Status = row["Status"].ToString() == "0" ? false : true;
                }
                if (row["AcaoInicial"] != DBNull.Value)
                {
                    ent.AcaoInicial = row["AcaoInicial"].ToString();
                }

                if (row["AcaoFinal"] != DBNull.Value)
                {
                    ent.AcaoFinal = row["AcaoFinal"].ToString();
                }

                if (row["AcaoEnfileiramento"] != DBNull.Value)
                {
                    ent.AcaoEnfileiramento = row["AcaoEnfileiramento"].ToString();
                }

                if (row["ACAOCABECALHO"] != DBNull.Value)
                {
                    ent.AcaoCabecalho = row["ACAOCABECALHO"].ToString();
                }

                if (row["ACAORETURNOERRO"] != DBNull.Value)
                {
                    ent.AcaoReturnoErro = row["ACAORETURNOERRO"].ToString();
                }

                if (row["DestinoID"] != DBNull.Value)
                {
                    ent.DestinoID = Convert.ToInt32(row["DestinoID"].ToString());
                    ent.Destino   = new Model.Integracao();
                    ent.Destino   = new Selia.Integrador.DAL.Integracao().ConsultarIntegracaoID(Convert.ToInt32(row["DestinoID"]));
                    //ent.Destino.LogIntegracao = new Selia.Integrador.DAL.LogIntegracao().Consultar(ent.ID);
                }
                if (row["Consumidor"] != DBNull.Value)
                {
                    ent.Consumidor = row["Consumidor"].ToString() == "0" ? false : true;
                }

                if (row["NODESNAOUTILIZADOS"] != DBNull.Value)
                {
                    ent.NodesNaoUtilizados = row["NODESNAOUTILIZADOS"].ToString();
                }

                if (row["NivelParalelismo"] != DBNull.Value)
                {
                    ent.NivelParalelismo = Convert.ToInt32(row["NivelParalelismo"]);
                }
                else
                {
                    ent.NivelParalelismo = 1;
                }

                if (ent.Adapter.Tipo == Model.Adapter.TipoAdapter.DB)
                {
                    ent.ConnectionString = ((Model.Interface.DB)ent.Interface.Item).ConnectionString;
                }

                if (ent.LogIntegracao == null)
                {
                    ent.LogIntegracao = new List <Model.LogIntegracao>();
                }
                ent.Fila = new Selia.Integrador.DAL.Fila().ConsultarByStatus(ent.ID, 1);

                lst.Add(ent);
            }

            return(lst);
        }
예제 #15
0
        public void ProcessarFila(Selia.Integrador.Adapter.Resultado objResult, Model.Integracao ent, List <Selia.Integrador.Adapter.Util.Mapeamento.Entidade> Mapeamentos)
        {
            List <XmlElement> lste = new List <XmlElement>();

            foreach (XmlElement xmle in objResult.RespostaXmlSeparada)
            {
                Selia.Integrador.Adapter.Util.Mapeamento web = new Selia.Integrador.Adapter.Util.Mapeamento();
                XmlNode root = xmle;

                web.ExecutarMapeamentoDePara(Mapeamentos, root);
                XmlDocument doc = new XmlDocument();
                if (!string.IsNullOrEmpty(web.XmlDeEntrada.ToString()))
                {
                    doc.LoadXml(web.XmlDeEntrada.ToString());
                }
                lste.Add((XmlElement)doc.DocumentElement);
            }
            objResult.RespostaXmlSeparada = lste;

            Model.LogIntegracao entLogIntegracao = new Model.LogIntegracao();
            entLogIntegracao.Conteudo     = objResult.RespostaXmlCompleta.InnerXml;
            entLogIntegracao.QtdRegistros = objResult.RespostaXmlSeparada.Count;
            entLogIntegracao.Integracao   = ent;
            int LogIntegracaoID = new BS.LogIntegracao().Inserir(entLogIntegracao);

            if (objResult.TipoMensagem == Selia.Integrador.Adapter.Resultado.Tipo.Sucesso)
            {
                if (ent.Destino != null)
                {
                    BS.Fila filaBS = new BS.Fila();
                    foreach (XmlElement xmle in objResult.RespostaXmlSeparada)
                    {
                        string primaryKey   = filaBS.ConsultaPrimaryKey(ent, xmle);
                        string secondaryKey = filaBS.ConsultaSecondaryKey(ent, xmle);

                        if (!filaBS.VerificaDuplicidade(ent, primaryKey, secondaryKey))
                        {
                            Model.Fila entFila = new Model.Fila();
                            entFila.Conteudo             = (xmle).ParentNode.InnerXml;
                            entFila.Integracao.ID        = ent.ID;
                            entFila.DataCriacao          = DateTime.Now;
                            entFila.Status               = Model.Fila.TipoStatus.Sucesso;
                            entFila.LogIntegracaoID      = LogIntegracaoID;
                            entFila.IntegracaoDestino.ID = ent.Destino.ID;
                            entFila.ChavePrimaria        = primaryKey;
                            entFila.ChaveSecundaria      = secondaryKey;

                            if (!string.IsNullOrEmpty(ent.AcaoEnfileiramento))
                            {
                                List <object> lst = new List <object>();
                                lst.Add(entFila);
                                lst.Add(ent.Mapeamento);
                                lst.Add(xmle);
                                entFila = (Model.Fila) new Selia.Integrador.Utils.Generic.Invoke().Exec(ent.AcaoEnfileiramento.Split(';')[0], ent.AcaoEnfileiramento.Split(';')[1], lst, ent.ConnectionString);
                            }

                            if (entFila != null)
                            {
                                filaBS.Inserir(entFila);
                            }
                        }
                    }


                    //Pega o ultimo elemento da fila para o mapeamento de retorno
                    if (objResult.RespostaXmlSeparada != null && objResult.RespostaXmlSeparada.Count > 0)
                    {
                        if (ent.MapeamentoRetorno != null && ent.MapeamentoRetorno.Count > 0)
                        {
                            var ultimoElementoFila = objResult.RespostaXmlSeparada.Last();

                            foreach (var mapeamentoRetorno in ent.MapeamentoRetorno)
                            {
                                var mapeamento = new Util.Mapeamento.Entidade()
                                {
                                    De    = mapeamentoRetorno.De,
                                    Valor = mapeamentoRetorno.Valor,
                                    Acao  = mapeamentoRetorno.Acao,
                                    Para  = mapeamentoRetorno.Para
                                };
                                var valor = new Util.Mapeamento().ObterValorNodeXml(mapeamento, ultimoElementoFila);

                                //atualiza o valor do pai
                                new Selia.Integrador.DAL.Mapeamento().AtualizarValor(mapeamentoRetorno.PaiID, valor);
                            }
                        }
                    }
                }
            }
        }
예제 #16
0
 public bool VerificaDuplicidade(Model.Integracao ent, string primaryKey, string secondaryKey)
 {
     return(this.ConsultarByChavePrimaria(ent.Destino.ID, primaryKey, secondaryKey).Count() > 0);
 }
예제 #17
0
 public string ConsultaSecondaryKey(Model.Integracao ent, XmlElement xml)
 {
     return(ConsultaKey(xml, ent.PKSecundaria, true));
 }
예제 #18
0
 public string ConsultaPrimaryKey(Model.Integracao ent, XmlElement xml)
 {
     return(ConsultaKey(xml, ent.PKPrimaria, false));
 }
예제 #19
0
            private void ExecutaItemFila(Model.Integracao integracao, Model.Fila fila, Selia.Integrador.Adapter.Rest.Config configuracao)
            {
                var    integracaoID = integracao.ID;
                string conteudoFila = null;

                try
                {
                    var xmlFila = new XmlDocument();
                    xmlFila.LoadXml(fila.Conteudo);
                    conteudoFila = fila.Conteudo;

                    Selia.Integrador.Adapter.Resultado objResult = new Selia.Integrador.Adapter.Rest().Executar(configuracao, xmlFila);

                    Model.LogFila logFila = new Model.LogFila();
                    logFila.Conteudo              = objResult.ParametrosEnvio;
                    logFila.ConteudoFila          = fila.Conteudo;
                    logFila.ChavePrimaria         = fila.ChavePrimaria;
                    logFila.ChaveSecundaria       = fila.ChaveSecundaria;
                    logFila.LogIntegracao.ID      = fila.LogIntegracaoID;
                    logFila.RespostaSemTratamento = objResult.RespostaSemTratamento;
                    logFila.FilaID       = fila.ID;
                    logFila.IntegracaoID = integracao.ID;

                    if (objResult.RespostaXmlCompleta != null)
                    {
                        logFila.ConteudoRetorno = objResult.RespostaXmlCompleta.InnerXml;
                    }

                    if (objResult.TipoMensagem == Selia.Integrador.Adapter.Resultado.Tipo.Sucesso)
                    {
                        new BS.Fila().Excluir(fila.ID);
                        if (integracao.Destino != null)
                        {
                            new BS.Fila().ProcessarFila(objResult, integracao, configuracao.Mapeamentos);
                        }
                    }
                    else
                    {
                        new BS.Fila().AtualizarStatus(Model.Fila.TipoStatus.Erro, fila.ID);
                    }

                    new BS.LogFila().Inserir(logFila);
                }
                catch (Selia.Integrador.Utils.Exceptions.HttpRestRetornoException exIntegradoRetorno)
                {
                    Model.LogFila logFila = new Model.LogFila();
                    logFila.ChavePrimaria    = fila.ChavePrimaria;
                    logFila.ChaveSecundaria  = fila.ChaveSecundaria;
                    logFila.LogIntegracao.ID = fila.LogIntegracaoID;
                    logFila.FilaID           = fila.ID;

                    logFila.ConteudoFila          = fila.Conteudo;
                    logFila.Conteudo              = exIntegradoRetorno.ParamentroEnvio;
                    logFila.RespostaSemTratamento = "Connection: " + ConnectionMonitor.Monitor.Instance.GetStatus() + "  **  " + exIntegradoRetorno.RetornoNaoTratado;
                    logFila.ConteudoRetorno       = exIntegradoRetorno.RetornoTratado;
                    logFila.IntegracaoID          = integracao.ID;

                    new BS.LogFila().Inserir(logFila);
                    new BS.Fila().AtualizarStatus(Model.Fila.TipoStatus.Erro, fila.ID);

                    Model.LogIntegracao entLogIntegracao = new Model.LogIntegracao();
                    entLogIntegracao.Conteudo   = string.Format("{0} - Valor de entrada:{1}", exIntegradoRetorno.ToString(), exIntegradoRetorno.InformacaoAdicional);
                    entLogIntegracao.Integracao = integracao;
                    entLogIntegracao.Status     = 2; //1 Sucesso 2 Erro
                    new BS.LogIntegracao().Inserir(entLogIntegracao);
                    //ServiceLog.LogError(String.Format("Erro: {0} - Message: {1} - StackTrace: {2}", integracao.Nome, exIntegradoRetorno.Message, exIntegradoRetorno.ToString()));
                }
                catch (Selia.Integrador.Utils.Exceptions.HttpRestException exIntegrador)
                {
                    new BS.Fila().AtualizarStatus(Model.Fila.TipoStatus.Erro, fila.ID);

                    Model.LogFila logFila = new Model.LogFila();
                    logFila.ChavePrimaria    = fila.ChavePrimaria;
                    logFila.ChaveSecundaria  = fila.ChaveSecundaria;
                    logFila.LogIntegracao.ID = fila.LogIntegracaoID;
                    logFila.FilaID           = fila.ID;

                    logFila.ConteudoFila          = fila.Conteudo;
                    logFila.Conteudo              = exIntegrador.ParamentroEnvio;
                    logFila.RespostaSemTratamento = "Connection: " + ConnectionMonitor.Monitor.Instance.GetStatus() + "  **  " + exIntegrador.RetornoNaoTratado;
                    logFila.ConteudoRetorno       = exIntegrador.RetornoTratado;
                    logFila.IntegracaoID          = integracao.ID;

                    new BS.LogFila().Inserir(logFila);
                    new BS.Fila().AtualizarStatus(Model.Fila.TipoStatus.Erro, fila.ID);

                    if (!string.IsNullOrEmpty(integracao.AcaoReturnoErro))
                    {
                        List <object> parametros = new List <object>();
                        parametros.Add(fila.ID);
                        parametros.Add(fila);
                        parametros.Add(exIntegrador.InformacaoAdicional);

                        new Selia.Integrador.Utils.Generic.Invoke().Exec(integracao.AcaoReturnoErro.Split(';')[0], integracao.AcaoReturnoErro.Split(';')[1], parametros);
                    }
                    else
                    {
                        Model.LogIntegracao entLogIntegracao = new Model.LogIntegracao();
                        entLogIntegracao.Conteudo   = exIntegrador.Message;
                        entLogIntegracao.Integracao = integracao;
                        entLogIntegracao.Status     = 2; //1 Sucesso 2 Erro
                        new BS.LogIntegracao().Inserir(entLogIntegracao);
                        //ServiceLog.LogError(String.Format("Erro: {0} - Message: {1} - StackTrace: {2}", integracao.Nome, exIntegrador.Message, exIntegrador.ToString()));
                    }
                }
            }
예제 #20
0
            public void Executar(Model.Integracao ent)
            {
                Selia.Integrador.Adapter.DB.Config objConfig = new Selia.Integrador.Adapter.DB.Config();
                var item = ((Model.Interface.DB)ent.Interface.Item);

                objConfig.StoredProcedure        = item.StoredProcedure;
                objConfig.ConnectionString       = item.ConnectionString;
                objConfig.ElementoSeparador      = ent.ElementoRegistro;
                objConfig.ExecucaoFinal          = ent.AcaoFinal;
                objConfig.Mapeamentos            = MapearParaAdapter(ent.Mapeamento);
                objConfig.ExecucaoInicial        = ent.AcaoInicial;
                objConfig.ExecucaoEnfileiramento = ent.AcaoEnfileiramento;
                objConfig.DataBaseNameFactory    = item.DataBaseNameFactory;

                if (ent.Consumidor)
                {
                    foreach (Model.Fila fila in ent.Fila)
                    {
                        try
                        {
                            Selia.Integrador.Adapter.Resultado objResult = new Selia.Integrador.Adapter.DB().Executar(objConfig, fila.Conteudo, ent.Destino != null);

                            Model.LogFila entLogFila = new Model.LogFila();
                            entLogFila.ConteudoFila = fila.Conteudo;

                            entLogFila.Conteudo = fila.Conteudo;

                            entLogFila.ChavePrimaria    = fila.ChavePrimaria;
                            entLogFila.ChaveSecundaria  = fila.ChaveSecundaria;
                            entLogFila.LogIntegracao.ID = fila.LogIntegracaoID;
                            entLogFila.FilaID           = fila.ID;
                            entLogFila.IntegracaoID     = ent.ID;

                            if (!string.IsNullOrEmpty(objResult.Mensagem))
                            {
                                entLogFila.ConteudoRetorno = objResult.Mensagem;
                            }

                            new BS.LogFila().Inserir(entLogFila);

                            if (objResult.TipoMensagem == Selia.Integrador.Adapter.Resultado.Tipo.Sucesso)
                            {
                                if (objResult.RespostaXmlCompleta != null && objResult.RespostaXmlSeparada != null && objResult.RespostaXmlSeparada.Count > 0)
                                {
                                    new BS.Fila().ProcessarFila(objResult, ent, null);
                                }

                                new BS.Fila().Excluir(fila.ID);
                            }
                            else
                            {
                                new BS.Fila().AtualizarStatus(Model.Fila.TipoStatus.Erro, fila.ID);
                            }
                        }
                        catch (Exception ex)
                        {
                            //ServiceLog.LogError(String.Format("Erro: {0} - Message: {1} - StackTrace: {2}", ent.Nome, ex.Message, ex.StackTrace));
                        }
                    }

                    if (ent.Destino != null)
                    {
                        new BS.Integracao().Executar(ent.Destino.ID);
                    }
                }
                else
                {
                    try
                    {
                        List <Selia.Integrador.Adapter.Util.Mapeamento.Entidade> maps = MapearParaAdapter(ent.Mapeamento);

                        foreach (Model.Interface.DB.ParametroDB Param in item.Parametros)
                        {
                            objConfig.Mapeamentos.Add(new Selia.Integrador.Adapter.Util.Mapeamento.Entidade()
                            {
                                Para = Param.De, Valor = Param.Para
                            });
                        }

                        Selia.Integrador.Adapter.Resultado objResult = new Selia.Integrador.Adapter.DB().Executar(objConfig);
                        new BS.Fila().ProcessarFila(objResult, ent, maps);
                    }
                    catch (Exception ex)
                    {
                        Model.LogIntegracao entLogIntegracao = new Model.LogIntegracao();
                        entLogIntegracao.Conteudo   = ex.Message;
                        entLogIntegracao.Integracao = ent;
                        entLogIntegracao.Status     = 1;
                        new BS.LogIntegracao().Inserir(entLogIntegracao);
                        //ServiceLog.LogError(String.Format("Erro: {0} - Message: {1} - StackTrace: {2}", ent.Nome, ex.Message, ex.StackTrace));
                    }
                }

                //if (ent.DestinoID > 0)
                //{
                //    new IntegracaoNova().Executar(ent.DestinoID, true);
                //}
            }
예제 #21
0
 private void Executor(Selia.Integrador.Adapter.WebService.Config objConfig, Model.Integracao ent, XmlDocument Fila = null)
 {
     try
     {
         var item = ((Model.Interface.WebService)ent.Interface.Item);
         List <Selia.Integrador.Adapter.Util.Mapeamento.Entidade> maps = objConfig.Mapeamentos;
         objConfig.Mapeamentos = new List <Selia.Integrador.Adapter.Util.Mapeamento.Entidade>();
         foreach (Model.Interface.WebService.ParametroWS param in item.Parametros)
         {
             objConfig.Mapeamentos.Add(new Selia.Integrador.Adapter.Util.Mapeamento.Entidade()
             {
                 Para = param.De, Valor = param.Para
             });
         }
         objConfig.DataHoraUltimaExecucao = ent.DataHoraUltimaExecucao;
         Selia.Integrador.Adapter.Resultado objResult = new Selia.Integrador.Adapter.WebService().Executar(objConfig, Fila);
         new BS.Fila().ProcessarFila(objResult, ent, maps);
     }
     catch (Exception ex)
     {
         Model.LogIntegracao entLogIntegracao = new Model.LogIntegracao();
         entLogIntegracao.Conteudo   = ex.Message;
         entLogIntegracao.Integracao = ent;
         entLogIntegracao.Status     = 1;
         new BS.LogIntegracao().Inserir(entLogIntegracao);
         //ServiceLog.LogError(String.Format("Erro: {0} - Message: {1} - StackTrace: {2}", ent.Nome, ex.Message, ex.StackTrace));
     }
 }
예제 #22
0
            public void Consumidor(Selia.Integrador.Adapter.WebService.Config objConfig, Model.Integracao ent)
            {
                List <Selia.Integrador.Adapter.Util.Mapeamento.Entidade> MapeamentoEntrada = new List <Selia.Integrador.Adapter.Util.Mapeamento.Entidade>();

                if (ent.Destino != null)
                {
                    MapearParaAdapter(ent.Destino.Mapeamento);
                }

                int maxDegreeOfParallelism = ent.NivelParalelismo;

                Parallel.ForEach(ent.Fila, new ParallelOptions()
                {
                    MaxDegreeOfParallelism = maxDegreeOfParallelism
                }, (fila) =>
                {
                    ExecutaItemFila(ent, fila, objConfig, MapeamentoEntrada);
                });
            }