Histórico da Página
Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico. |
---|
(Obrigatório)
Informações Gerais
Especificação | |||
Produto | RM | Módulo: EAI |
|
Segmento Executor |
| ||
Projeto1 | Framework BH - 004 | IRM1 |
|
Requisito1 | FRW_FRW002-160 | Subtarefa1 | FRW_FRW002-162 |
Chamado2 |
| ||
País | (X ) Brasil ( ) Argentina ( ) Mexico ( ) Chile ( ) Paraguai ( ) Equador ( ) USA ( ) Colombia ( ) Outro _____________. |
Objetivo
Efetuar a migração das informações dos dados cadastrados nas tabelas de integração cadastradas no do EAI 1.0 para as novas tabelas do EAI 2.0.
Definições importantes
- É importante que um backup da base seja
- feito antes da execução desse processo;
Esse processo poderá ser executado uma única vez em caso de sucesso na execução, ou seja, todas as integrações a serem convertidas deverão ser selecionadas nesse momento.
Não será possível converter outras integrações em outros momentos visto que, após a conversão o EAI 1.0 não poderá mais ser utilizado.
Modelo de solução
Abaixo será descrito as regras de negócio do conversor.
Localização
Modelo de solução
Abaixo será descrito as regras de negócio do conversor.
1) - Localização
O O assistente de conversor deve ser chamado do caminho abaixo:
Integração/Mensagem Única/Conversor EAI 2.0
Obs: Esse menu deve ser habilitado para o usuário no sistema de segurança do RM.
Mensagens de conversão
Algumas mensagens aparecerão para o usuário nessa página do assistente.
O usuário deverá selecionar a opção "Continuar Conversão" para prosseguir com o processo.
Integrações disponíveis
Todas as integrações, com exceção das integrações inativas, (cadastradas na tabela HCIntegracao) aparecerão na grid.
O usuário deverá selecionar uma ou várias integrações a serem convertidas para o novo modelo de EAI.
Informações |
---|
Opção "Atualiza informação de "Sourceapplication" dos aplicativos chamando a mensage Whois": Com essa opção marcada, o processo enviará uma mensagem de Whois para cada endereço de webServices cadastrado nas integrações selecionadas. O processo fará uma leitura na resposta dessa mensagem e buscará a informação de "SourceApplication". O valor desse atributo será usado para preencher o campo "SourceApplication" da tabela GEAIApp. Caso essa opção não seja marcada no processo de conversão, o valor para o campo "SOURCEAPPLICATION", disponível no cadastro de aplicativos, deve ser alterado manualmente após a conversão. |
Informações |
---|
Opção "Importa mensagens assíncronas": Com essa opção marcada, todas as mensagens assíncronas, que não foram processadas com sucesso, com menos de 5 (cinco) tentativas de processamento, serão migradas para a nova tabela de mensagens; |
Informações |
---|
Opção "Data Início das mensagens": Somente as mensagens assíncronas com data de inclusão maior que o informado serão migradas. |
Mapeamento de informações (EAI 1.0 / 2.0)
Aplicativos
2) - Opções do assistente de conversão
a) - Tipo de execução
Converter para o EAI 2.0:
Efetuará a migração dos dados do EAI 1.0 para as tabelas do EAI 2.0.
Porém, o EAI 2.0 ficará travado até a execução desse processo com a opção "Liberar utilização do EAI 2.0".
Durante esse período, tanto o EAI 1.0 quanto o EAI 2.0 ficarão fora de operação.
Voltar para o EAI 1.0
Exclui todas as linhas geradas nas tabelas do EAI 2.0 e volta para o EAI 1.0.
Liberar utilização do EAI 2.0
Libera a utilização do EAI 2.0. A partir desse momento todas as mensagens recebidas e enviadas serão processadas pelo EI 2.0.
b) - Mensagens de conversão
Algumas mensagens aparecerão para o usuário nessa página do assistente.
O usuário deverá selecionar a opção "Continuar Conversão" para prosseguir com o processo.
c) - Integrações disponíveis
Todas as integrações, com exceção das integrações inativas, (cadastradas na tabela HCIntegracao) aparecerão na grid.
O usuário deverá selecionar uma ou várias integrações a serem convertidas para o novo modelo de EAI.
Informações |
---|
Opção "Atualiza informação de "Sourceapplication" dos aplicativos chamando a mensage Whois": Com essa opção marcada, o processo enviará uma mensagem de Whois para cada endereço de webServices cadastrado nas integrações selecionadas. O processo fará uma leitura na resposta dessa mensagem e buscará a informação de "SourceApplication". O valor desse atributo será usado para preencher o campo "SourceApplication" da tabela GEAIApp. Caso essa opção não seja marcada no processo de conversão, o valor para o campo "SOURCEAPPLICATION", disponível no cadastro de aplicativos, deve ser alterado manualmente após a conversão. |
Informações |
---|
Opção "Importa mensagens assíncronas": Com essa opção marcada, todas as mensagens assíncronas, que não foram processadas com sucesso, com menos de 5 (cinco) tentativas de processamento, serão migradas para a nova tabela de mensagens; |
Informações |
---|
Opção "Data Início das mensagens": Somente as mensagens assíncronas com data de inclusão maior que o informado serão migradas. |
3) - Mapeamento de informações (EAI 1.0 / 2.0)
Aplicativos
Tabela/Coluna EAI 1.0 | Tabela/Coluna EAI 2.0 | Regras | ||||
GEAIAPP.ID | auto incremento | |||||
GEAIAPP.SOURCEAPPLICATION | O valor de | |||||
Tabela/Coluna EAI 1.0 | Tabela/Coluna EAI 2.0 | Regras | ||||
GEAIAPP.ID | auto incremento | |||||
GEAIAPP.SOURCEAPPLICATION | O valor de SourceApplication será recuperado pela busca do atributo "SourceApplication" da resposta da mensagem de Whois. A mensagem de whois será enviada para cada endereço de webServices cadastrado nas integrações a serem convertidas. | |||||
HCINTEGRACAO.SISTEMAINTEGRADO | GEAIAPP.CODDPRODUTO |
| ||||
GEAIAPP.NOME | Concatenação dos campos HCIntegracao.SISTEMAINTEGRADO + "-" + SOURCEAPPLICATION O valor de SourceApplication será recuperado pela busca do atributo "SourceApplication" da resposta da mensagem de Whois.
| |||||
GEAIAPP.DESCRICAO | Concatenação dos campos HCIntegracao.SISTEMAINTEGRADO + "-" + SOURCEAPPLICATION O valor de SourceApplication será recuperado pela busca do atributo "SourceApplication" da resposta da mensagem de Whois | HCINTEGRACAO. | WSURLGEAIAPP.URLWSDLEXTERNO
| A mensagem de whois será enviada para cada endereço de webServices cadastrado nas integrações a serem convertidas. | ||
HCINTEGRACAO. | WSUSUARIOSISTEMAINTEGRADO | GEAIAPP. | USRWSDLEXTERNOCODDPRODUTO |
| HCINTEGRACAO.WSSENHA||
GEAIAPP. | PASSWSDLEXTERNO||||||
HCINTEGRACAO.RMCOLIGADAONPROTHEUS | GEAIAPP.RMCOLIGADAONPROTHEUS |
Informações |
---|
Não poderá existir mais de um aplicativo com o mesmo "SourceApplication" / "CodProduto". A partir de agora o RM poderá integrar com mais de um aplicativo "Protheus" desde que os mesmos possuem SourceApplications diferentes. |
Transação
NOME | Concatenação dos campos HCIntegracao.SISTEMAINTEGRADO + "-" + SOURCEAPPLICATION O valor de SourceApplication será recuperado pela busca do atributo "SourceApplication" da resposta da mensagem de Whois.
| |
GEAIAPP.DESCRICAO | Concatenação dos campos HCIntegracao.SISTEMAINTEGRADO + "-" + SOURCEAPPLICATION O valor de SourceApplication será recuperado pela busca do atributo "SourceApplication" da resposta da mensagem de Whois | |
HCINTEGRACAO.WSURL | GEAIAPP.URLWSDLEXTERNO
|
|
HCINTEGRACAO.WSUSUARIO | GEAIAPP.USRWSDLEXTERNO |
|
HCINTEGRACAO.WSSENHA | GEAIAPP.PASSWSDLEXTERNO | |
HCINTEGRACAO.RMCOLIGADAONPROTHEUS | GEAIAPP.RMCOLIGADAONPROTHEUS |
Informações |
---|
Não poderá existir mais de um aplicativo com o mesmo "SourceApplication" / "CodProduto". A partir de agora o RM poderá integrar com mais de um aplicativo "Protheus" desde que os mesmos possuem SourceApplications diferentes. |
Transação
Tabela/Coluna EAI 1.0 | Tabela/Coluna EAI 2.0 | Regras |
GEAITRANSACAO.ID | Auto incremento | |
HCTRANSFORMACAO.TRANSACTIONID | GEAITRANSACAO.TRANSACAO
|
|
HCTRANSFORMACAO.DESCRICAO | GEAITRANSACAO.DESCRICAO |
|
| GEAITRANSACAO.MODOSUPORTADO | 1 |
Tabela/Coluna EAI 1.0 | Tabela/Coluna EAI 2.0 | Regras |
GEAITRANSACAO.ID | Auto incremento | |
HCTRANSFORMACAO.TRANSACTIONID | GEAITRANSACAO.TRANSACAO
|
|
HCTRANSFORMACAO.DESCRICAO | GEAITRANSACAO.DESCRICAO |
|
| GEAITRANSACAO.MODOSUPORTADO | 1 - Envio HCTRANSFORMACAO.XSLTSAIDA diferente de vazio HCTRANSFORMACAO.XSLTENTREDA vazio 2 - Recebimento HCTRANSFORMACAO.XSLTSAIDA vazio HCTRANSFORMACAO.XSLTENTREDA diferente de vazio 3 - Ambos HCTRANSFORMACAO.XSLTSAIDA diferente de vazio HCTRANSFORMACAO.XSLTENTREDA diferente de vazio |
GEAITRANSACAO.SYNCASYNCENVIO | Será gravado o valor "0 - Sincrono". No EAI 1.0 RM não deve existir mensagens assincronas, pois o mesmo não foi projetadopara enviar /receber esse tipo de mensagem. Somente mensagens com características de "falso assíncrono" que será detalhado nesse mesmo documento. | |
| GEAITRANSACAO.PERMITERECASYNC | Será gravado o valor "0 - Não permite" O EAI 1.0 não está preparado para envio/recebimento assíncrono |
GEAITRANSACAO.EXECVIAJOB | Esse campo definirá se as mensagens de envio (nas transações em questão) serão executadas via Job ou imediatamente na chamada do método. Esse campo foi criado para resolver a situação do "falso assíncrono". Algumas mensagens são enviadas para o EAI 1.0 com o tipo de entrega assíncrono. Porém, essas mensagens , no momento de execução pelo Job, são enviadas para outro aplicativo com o tipo entrega "sincrono". Abaixo serão listadas essas transações com esse comportamento: DEVICEEQUIPMENTAPPOINTMENT DEVICETASKSAPPOINTMENT DEVICETRANSPORTCYCLEAPPOINTMENT LABORDEVICETASKSAPPOINTMENT |
Transação / Versão
Tabela/Coluna EAI 1.0 | Tabela/Coluna EAI 2.0 | Regras |
HCMAPAINTEGRACAO.VERSAOMENSAGEM | GEAITRANSACAOVERSAO.VERSAO
|
|
HCMAPAINTEGRACAO.ENTIDADE | GEAITRANSACAOVERSAO.IDTRANSACAO | O campo identificação da transação será buscado da tabela GEAITransacao. |
|
|
Transação / Aplicativo (rotas)
Tabela/Coluna EAI 1.0 | Tabela/Coluna EAI 2.0 | Regras |
HCMAPAINTEGRACAO.IDINTEGRACAO HCINTEGRACAO.SISTEMAINTEGRADO | GEAITRANSACAOAPP.IDAPP
| O identificador do App será buscado da tabela GEAIApp. |
HCMAPAINTEGRACAO.ENTIDADE | GEAITRANSACAOAPP.IDTRANSACAO | O campo identificação da transação será buscado da tabela GEAITransacao. |
HCMAPAINTEGRACAO.VERSAOMENSAGEM | GEAITRANSACAOAPP.IDTRANSACAO | |
GEAITRANSACAOAPP.IDSOURCECODE | Identificador do código fonte (GSourceCode). | |
GEAITRANSACAOAPP.INCLUIMENSAGEMORIGINAL | Será gravado o valor 1. Por default, a mensagem original sempre será incluída na mensagem de resposta. | |
GEAITRANSACAOAPP.MODOHABILITADO | O valor será copiado da transação (GEAITRANSACAO.MODOSUPORTADO) | |
Informações |
---|
Não será permitido o mapeamento entre um aplicativo e uma transação em versões diferentes. Ex: A transação "COSTCENTER" poderá ser mapeada para o aplicativo "Protheus/Enviromment" somente na versão 1.000. |
Informações |
---|
Os códigos fontes cadastrados na tabela GSourceCode e mapeados na tabela "HCMapaTransacao.Extensions" não serão migrados para tabela GEAITransacaoApp.IdSourceCode. No EAI 2.0 esse campo será usado exclusivamente para armazenar códigos customizados feitos pelo cliente/customização. |
Informações |
---|
Ex: Transação mapeada para mais de um um aplicativo: O RM ao enviar uma mensagem dessa transação, a mesma poderá ser enviada somente em caso assíncrono. O RM ao receber uma mensagem, os atributos "SourceApplication" e "ProductCode" do xml TotvsMessage serão recuperados e usados para localizar o aplicativo correto. |
Pacote de instalação
Tabela/Coluna EAI 1.0 | Tabela/Coluna EAI 2.0 | Regras |
HCINTEGRACAO.NOMEINTEGRACAO | GEAIPACOTEINSTALADO.NOMEPACOTE
|
|
HCINTEGRACAO.NOMEREDUZIDO | GEAIPACOTEINSTALADO.NOMEREDUZIDO |
|
| GEAIPACOTEINSTALADO.ID | Novo Guid |
HCINTEGRACAO.SISTEMAINTEGRADO | GEAIPACOTEINSTALADO.APPID | O valor do campo "SistemaIntegrado" será usado para buscar o AppId da tabela GEAIApp. |
|
|
GEAIAPP (cadastro de aplicativos)
Coluna | Descrição | Regras |
Id (pk) | Identificador do aplicativo | autoinc |
Nome | Nome do aplicativo |
|
Descricao | Descrição longa do aplicativo |
|
AppHost | Define se o app em questão é o app host (app interno) | Só haverá um app interno por instalação 0 – interno 1 - externo |
SourceApplication | Informação enviada no protocolo “TotvsMessage” do atributo “MessageInformation/SourceApplication”. | No aplicativo interno, esse valor será o nome da instância do RM (Inicialmente será “RM”). Não será permitido o cadastro de mais de um aplicativo com o mesmo SourceApplication/CodProduto.
|
CodProduto | Nome do produto. Corresponde ao atributo “ProductName” enviado através do protocolo TotvsMessage. | Ex: Protheus, DataSul, Logix, RM. No aplicativo interno, esse valor terá o nome “RM”. Em se tratando de recebimento de mensagens, os valores “Sourceapplication” e “CodProduto“ enviados na mensagem definirão o aplicativo correto. Caso não seja encontrado o aplicativo, a mensagem não será executada, retornando erro.
|
UrlWSDLExterno | Endereço WSDL do aplicativo externo |
|
UsrWSDLExterno | Usuário para conectar na url WSDL do aplicativo externo |
|
PassWSDLExterno | senha para conectar nas url WSDL do aplicativo externo |
|
Ativo | Ativo: ativa / desativa um app | 0 ou null – inativo 1 - ativo |
RMColigadaNoProtheus | Mapeamento da coligada com o Protheus (em caso de aplicativo Protheus) | Grupo de empresa - 1 Unidade de negócio- 2 Empresa - 3 |
GEAITRANSACAO (cadastro de transação)
Coluna | Descrição | Regras |
Id (pk) | Identificador da transação | Ex: COSTCENTER, BANK, CUSTOMERVENDOR, ORDER, etc.
|
Descricao | Descrição da transação |
|
ModoSuportado | Modo suportado pela transação, ou seja, são as formas possíveis de uso da mesma | 1 [envio_habilitado]: A transação só pode ser usada no aplicativo para enviar mensagens; 2 [recebimento_habilitado]: A transação só pode ser usada no aplicativo para receber mensagens; 3 [ambos_habilitado]: A transação pode ser usada tanto para envio quanto para recebimento;
|
SyncAsyncEnvio | Informa se a transação é síncrona ou assíncrona (em caso de envio) | 0 – Sincrona 1 – Assincrona Default é 0 |
PermiteRecAsync | Permite recebimento assíncrono em caso de recebimento? | 0 – permite 1 – Não permite. Default é 0 |
GEAITRANSACAOVERSAO: Mapeamento transação / versão
Coluna | Descrição | Regras |
IdTransacao (pk) (fk) | Identificador da transação | chave estrangeira para tabela GEAITransacao |
Versao (pk) | Versão da transação |
|
NomeClasseAdapterCst | Nome da classe (fullName) do adapter de customização (se existir). Se estiver vazio (default) será usado o adapter nativo carregado automaticamente. |
GEAITRANSACAOAPP: Cadastro de rotas (mapeamento entre app/transação/versão)
Coluna
Descrição
Regras
IdApp (pk)(fk)
Identificador do app
Chave estrangeira para tabela GEAIApp
IdTransacao (pk)(fk)
Identificador da transação.
Chave estrangeira para tabela GEAITransacaoVersao
Versao (fk)
Versão da mensagem ativada para o aplicativo em questão
- Não será permitido cadastrar mais de um app/transação em versões diferentes.
- Chave estrangeira para tabela GEAITransacaoVersao;
- Não faz parte da chave primária;
- Preenchimento obrigatório.
IdSourceCode (fk)
Identificador do código fonte customizado
Chave estrangeira para tabela GSourceCode;
IncluiMensagemOriginal
Indica se na mensagem de resposta de uma transação/versão será adicionado a mensagem original no corpo da mensagem de resposta
0 OU NULL –INCLUI
1 – Não INCLUI
ModoHabilitado
Modo habilitado da transação, ou seja, o que de fato está habilitado no momento.
4) - Atualização das informações de DE/PARA
- A chave primária da tabela "HCINTEGRACAOID" foi removida;
- Foi criada nessa tabela a coluna "APPID" para armazenar o identificador do aplicativo responsável pela inclusão/atualização do De/Para;
- Ex: O centro de custo do RM 001, no protheus/Produção possuirá o externalId 1|001 e no Protheus/Homologação o externalId 0007.
- A coluna "SistemaIntegrado" dessa tabela não será mais usada. A mesma não será removida para questões de histórico.
- A coluna AppId será atualizada de acordo com o campo "SistemaIntegrado".
5) - Migração das mensagens assíncronas
- Todas as mensagens assíncronas, que não possuem execução com sucesso e com menso de 5 tentativas de execução serão migradas para a nova tabela de mensagens;
- Para cada uma dessas mensagens migradas, será criado um job responsável em executar essa mensagem em questão;
- Mensagens de envio "assíncronas" serão tratadas como "falso assíncrono"
Essas serão processas pelo Job (da mesma forma que uma mensagem assíncrona) porém serão enviadas para o aplicativo destino como uma mensagem síncrona; Sentença de seleção das mensagens:
Bloco de código select HCFILAMENSAGEM.UUID, HCFILAMENSAGEM.TIPOENTREGA, HCFILAMENSAGEM.NOMEPRODUTO, HCFILAMENSAGEM.ENTRADASAIDA, HCFILAMENSAGEM.EVENTOMENSAGEM, HCFILAMENSAGEM.TIPOMENSAGEM, HCFILAMENSAGEM.TRANSACTIONID, HCFILAMENSAGEM.STATUSPROCESSAMENTO,HCFILAMENSAGEM.VERSAOMENSAGEM, HCFILAMENSAGEM.DATAINCLUSAO, HCFILAMENSAGEM.MENSAGEMORIGINAL, HCFILAMENSAGEM.IDINTEGRACAO, HCFILAMENSAGEM.CODCOLIGADA, HCFILAMENSAGEM.CODFILIAL, HCFILAMENSAGEM.CODUSUARIO, HCINTEGRACAO.SISTEMAINTEGRADO from HCFILAMENSAGEM (nolock) INNER JOIN HCINTEGRACAO (NOLOCK) ON (HCFILAMENSAGEM.IDINTEGRACAO = HCINTEGRACAO.IDINTEGRACAO) where UUID not in (select HCFILAEXECUCAO.UUID from HCFILAEXECUCAO (nolock) where HCFILAMENSAGEM.UUID = HCFILAEXECUCAO.UUID and STATUSEXECUCAO = 1) and ((select count(HCFILAEXECUCAO.UUID) from HCFILAEXECUCAO (nolock) where HCFILAMENSAGEM.UUID = HCFILAEXECUCAO.UUID) <= 5) and TIPOENTREGA = 1 and HCINTEGRACAO.SISTEMAINTEGRADO = :sistemaintegrado and HCFILAMENSAGEM.DATAINCLUSAO >= :datainicio and HCFILAMENSAGEM.STATUSPROCESSAMENTO = 0 ORDER BY HCFILAMENSAGEM.DATAINCLUSAO
1 [envio_habilitado]: A transação só pode ser usada no aplicativo para enviar mensagens;
2 [recebimento_habilitado]: A transação só pode ser usada no aplicativo para receber mensagens;
3 [ambos_habilitados]: A transação pode ser usada tanto para envio quanto para recebimento ;
4 [Não_habilitado]: a transação não está habilitada para essa versão de mensagem no app em questão;
GEAIPACOTEINSTALADO: pacotes instalados
Coluna | Descrição | Regras |
IdPacote (pk) | identificador do pacote instalado | Número do Guid incluído nos arquivos de configuração de integração (json) |
NomePacote | nome do pacote instalado |
|
NomeReduzido | Nome reduzido do pacote instalado |
|
AppId (fk) | Identificador do aplicativo instalado | Chave estrangeira para tabela GEAIAPP |
GEAIGRUPOMENSAGEM: Agrupador de mensagens
Coluna | Descrição |
Id (pk) | identificador único do grupo autoinc |
Grupo | Identificador do grupo de mensagens. Deve ser enviado um guid que representará um grupo de mensagens |
NomeGrupo | Nome do grupo. Ex: Pedido de compra |
InfoGrupo | Informações complementares do grupo |
|
GEAIMENSAGEM: representará uma mensagem (business, response ou receipt). Cada mensagem recebida, enviada ou respondida será uma nova linha nessa tabela.
Coluna | Descrição |
Id (pk) | identificador da mensagem (gautoinc) |
UUID | Armazenará o UUID da mensagem. Exemplo: a) Ao receber uma mensagem do Protheus, será gravado nesse campo o UUID gerado lá no sistema do Protheus (TotvsMessage.MessageInformation.UUID) b) Ao enviar uma mensagem, será gravado nesse campo o UUID (GUID) gerado para a mensagem de envio. |
TipoEntrega | Tipo de entrega (Assíncrono e síncrono). 0 – Sync 1 - Async |
EntradaSaida | Tipo de entrada/saída (envio ou recebimento). |
Evento | Tipo do evento de mensagem. BusinessEvent Request |
Tipo | Tipo da mensagem 0 – BusinessMessage 1 – ResponseMessage 2 - ReceiptMessage |
TransactionId (fk) | Identificador da transação. Chave estrangeira para tabela GEAITRANSACAO |
Versao | Versão da mensagem |
XMLOriginal | XML contendo a mensagem original. Se for uma mensagem de recebimento, será o TotvsMessage enviado. Se for uma mensagem de envio, será o dataSet de origem serializados. |
IdGrupo | Identificador do grupo de mensagem mensagem (chave estrangeira para tabela GEAIGrupoMensagem). |
IdMensagemPai | Armazenará o identificador (Id) da mensagem pai. Ex: 1) Quando o RM enviar uma mensagem de forma assíncrona, imediatamente será retornada uma mensagem de recibo (receiptMessage). Essa será gravada em uma nova linha nessa tabela. Nessa nova linha, no campo “IdMensagemRelac” será gravado o Id da mensagem origem. 2) O destino ao enviar a resposta (responseMessage) da mensagem para o RM, essa será gravada em uma nova linha. Será gravado nessa linha o id da mensagem pai. |
RMSContexto | Armazena o objeto RMSContext |
GEAIROTAMENSAGEM: Rotas geradas para execução das mensagens
Coluna
Descrição
Id (pk)
Identificador da rota/mensagem (gautoinc)
IdMensagem (fk)
identificador da mensagem
Chave estrangeira para tabela GEAIMensagem
IdApp (fk)
Armazenará o aplicativo da mensagem.
Se o RM estiver recebendo uma mensagem, o IdApp será do aplicativo externo (quem enviou a mensagem);
Se o RM estiver enviando uma mensagem, o IdApp será do aplicativo de destino da mensagem
Chave estrangeira para tabela GEAIApp
Estado da mensagem:
0: Received (recebida)
1: Recognized (reconhecida)
2: Validated (validada)
3: Delivering (entregaando)
4: Processing (processando)
5: Delivered (entregue)
6: Processed (processada com sucesso)
7: Refused (negada)
8: Malformed (mal formatada)
9: NotDelivered (não entregue)
10: BusinessError (erro de negócio)
GEAIROTALOGMENSAGEM: Log gerado pela execução da rota da mensagem
Coluna | Descrição |
Id (pk) | Identificador do log (gautoinc) |
IdRotaMensagem (fk) | Identificador da rota/mensagem. Chave estranheira para GEAIRotaMensagem |
TipoLog | 0 - Info 1 - Warning 1 Error |
InfoLog | Texto contendo informações do log |
InfoDebugVar | Informações de debug de variaveis |
InfoDebugObj | Informações de debug de objetos.
|
GEAIEXECROTAMENS: Informações de execução da rota da mensagem.
Coluna | Descrição |
Id (pk) | Identificador da execução (gautoinc) |
IdRotaMensagem | Identificador da rota/mensagem. Chave estrangeira para tabela GEAIRotaMensagem |
XmlMensTransformada | XML contendo a mensagem transformada |
MensagemExecucao | Mensagem da execução |
CodigoExecucao | Código da execução |
EAIContext | Armazenará o objeto EAIContext serializado através do “DataContractSerialization”. Todas as informações de contexto de execução da mensagem naquele momento serão gravadas nesse campo. Essa gravação ocorrerá somente se o parâmetro GEAIParams.UsaContextoLog = true) estiver setado. |
DeParaInfo | Informações de de/para |
RMSContexto | Contexto RM usado para a execução da mensagem |
GEAIJOBMENSAGEM: Mapeamento entre job / mensagem (usada somente para mensagens assíncronas)
Coluna | Descrição |
IdMensagem (pk) | identificador da mensagem Chave estranheira para tabela GEAIMensagem |
IdJob (pk) | Identificador do Job gerado para processar a mensagem assíncrona. Não possui chave estranheira com a tabela GJob |
HCINTEGRACAOID (alterações na tabela de DE DE/PARA)
- Essa será a única tabela compartilhada entre os dois EAI’s, ou seja, não será criada uma nova tabela para armazenar valores de “de/para” do eai 2.0.
- Atualmente não é armazenado nessa tabela o “sourceApplication” correspondente ao mapeamento da chave. Sendo assim, caso RM integre com dois sistemas Protheus (dois sourceApplications diferentes para o mesmo sistema), o RM não saberá de qual sourceApplication aquele mapeamento corresponderá.
- Atualmente esse erro não ocorreu nos nossos clientes porque até o momento não existe nenhuma implantação na qual o RM integre com dois sourceAppliaction diferentes para o mesmo sistema.
- Para resolver a situação acima, será criada uma nova coluna nessa tabela chamada “AppID” (não será criada chave estrangeira para tabela GEAIApp).
- Será armazenado nessa coluna o identificador do aplicativo externo correspondente a integração.
- A coluna “SistemaIntegrado” não será usada pelo EAI 2.0 (ela não será removida da tabela para compatibilizar com o EAI 1.0).
- No processo de conversão para o novo EAI, será criado um script para preencher esse campo com o AppId correspondente ao “SistemaIntegrado”.
- Será removida dessa tabela sua chave primária (pkhcintegracaoid). Essa tabela não possuirá chave primária;
- A coluna "SISTEMAINTEGRADO" passa a aceitar valores nulos;
- Serão criados nessa tabela dois índices não únicos, entre eles:
- IX_HCINTE_APPID (TABELARM, IDNOMERM, IDVALORRM, APPID)
- IX_HCINTE_SISTINTEG (TABELARM, IDNOMERM, IDVALORRM, SISTEMAINTEGRADO)
2 - Detalhamento dos processos
RM RECEBE MENSAGENS SÍNCRONAS
1) Serviço de recebimento de mensagens do EAI RM é chamado
Grava mensagem nas tabelas GEAIMensagem e GEAIRotaMensagem
2) Serviço de execução de mensagens é chamado
Grava informações na tabela de execução GEAIExecMens;
- SUCESSO?
i. [ESTADO: Processed];
ii. COMMIT;
iii. Grava mensagem de resposta de sucesso (nova linha nas tabelas “GEAIMensagem” e “GEAIRotaMensagem”)
[ESTADO RESPOSTA: Delivered]
Caso o destino não receba a mensagem de resposta (timeout), ele não será capaz de atualizar os de/paras.
Sendo assim, um RollBabck será realizado no aplicativo externo e um commit será realizado no RM.
No RM a mensagem original foi marcada como “Processed”.
E no aplicativo externo a mensagem será marcada “BusinessError”.
Essa situação deve ser apontada na ferramenta de diagnóstico.
2. ERRO?
i. [ESTADO: BusinessError];
ii. ROLLBACK;
iii. Grava mensagem de resposta de erro;
[ESTADO RESPOSTA: Delivered];
Caso o aplicativo externo não receba a mensagem de resposta ou receba com erro, ele não será capaz de atualizar os De/Paras.
Nesse caso, um RollBabck será realizado em ambos os lados;
Nesse caso, não apresentará inconsistências;
BusinessMessage
Post da mensagem
Inclusão da mensagem
Received
EAI da RM recebe a mensagem.
Validação
Validated/Refused
EAI do RM valida mensagem.
Verifica correto preenchimento das tabelas de integração.
Execução da mensagem
Validação
Validated/Refused
Envio da mensagem ao adapter para processamento
Processing
Nesse momento os adapters serão chamados para gravação dos dados no RM.
Execução da mensagem nos adapters
Processed/BusinessError
Os dados da mensagem serão processados pelos objetos de negócio do RM
ResponseMessage
Retorna mensagem de resposta
Delivered
RM ENVIA MENSAGENS SÍNCRONAS
1) Serviço de recebimento de mensagens do EAI RM é chamado
VALIDAÇÃO: Verifica se existe mais de uma rota para envio da mensagem. Caso positivo, o EAI apresentará uma mensagem de erro não aceitando a mensagem.
2) Serviço de execução de mensagens é disparado;
- Serviço de envio de mensagens é executado;
i. Sucesso no envio da mensagem?
Sucesso no retorno da mensagem?
a) [ESTADO: Delivered];
b) Grava De/Para;
c) COMMIT;
d) Grava mensagem de resposta contendo sucesso;
[ESTADO reposta: processed]
Erro no retorno da mensagem?
a) [ESTADO: Delivered]
b) Não grava informações de De/Para;
c) Grava mensagem de resposta contendo erro;
d) [ESTADO: BusinessError];
f) ROLLBACK;
ii. Erro no envio da mensagem (ex: timeout)?
a) [ESTADO: NotDelivered];
b) Não Grava informações de De/ParaGrava mensagem de resposta;
c) Não existe resposta;
d) ROLLBACK;
Se por algum motivo (timeout no lado Rm) o aplicativo destino recebeu a mensagem,
nesse caso, a informação poderá ter sido gravada em seus de/paras;
Na origem o processo efetuou rollback.
Essa situação será apontada na ferramenta de diagnóstico.
BusinessMessage
Post da mensagem
Inclusão da mensagem
Received
EAI da RM recebe a mensagem de envio.
Validação
Validated/Refused
Verifica correto preenchimento das tabelas de integração.
Execução da mensagem
Validação
Validated/Refused
Envio da mensagem para o aplicativo externo
Processing
Nesse momento a mensagem é enviada para o aplicativo externo
Sucesso/Erro no envio da mensagem para o aplicativo externo
Delivered/NotDelivered
A mensagem foi enviada com sucesso para o aplicativo externo.
Erro no envio da mensagem.
ResponseMessage
Mensagem de resposta foi retornada com sucesso
Processed
Mensagem de resposta foi retornada com erro
BusinessError
3 - Interfaces de customização
ICUSTOMADAPTERDATASERVER - Interface de adapter de dataServer
Fase EAI 1.0
Interface EAI 1.0
Método EAI 1.0
Fase EAI 2.0
Interface EAI 2.0
Método EAI 2.0
Antes de transformar o xml recebido para o xml gerado
IExtensionTransformReceive
BeforeTransformReceive
Usada para transformar o businessContent Original antes de solicitar a transformação pelos adapters
ICustomAdapterDataServer
AntesTransformarDataServer
Depois de transformar o xml recebido para o xml gerado após xslt
IExtensionTransformReceive
AfterTransformReceive
Usada para realizar alguma alteração no xml transformado após a transformação pelos adapters.
ICustomAdapterDataServer
DepoisTransformarDataServer
Antes de executar os manipuladores de recebimento e envio
IExtensionMessage
BeforeExecuteHandle
Usada para alterar o dataSet transformado antes de enviar o dataSet para o DataServer.
obs: Esse método é chamado uma única vez independente da quantidade de dataServers a serem executados pelo adapter para a transação em questão.
ICustomAdapterDataServer
AntesExecutarDataServer
Depois de executar os manipuladores de recebimento e envio
IExtensionMessage
AfterExecuteHandle
Usado para efetuar a leitura nos dataSets enviados aos dataServers executados pelos adapters.
Esse método é chamado uma única vez independente da quantidade de dataServers a serem executados pelo adapter para a transação em questão.
ICustomAdapterDataServer
DepoisExecutarDataServer
Depois de criar a resposta para as mensagens recebidas
IExtensionResponse
CreateResponse
Depois de ciar a tag de returnContent para as respostas de dataServer.
ICustomAdapterDataServer
DepoisGerarReturnContentRespostaDataServer
ICUSTOMADAPTERPROCESS- Interface de adapter de process
Fase EAI 1.0 | Interface EAI 1.0 | Método EAI 1.0 | Fase EAI 2.0 | Interface EAI 2.0 | Método EAI 2.0 |
Antes de transformar receive | IExtensionTransformReceive | BeforeTransformReceive | Antes de gerar a classe paramsProc | ICustomAdapterProcess | AntesTransformarProcesso |
| Nova |
| Deposi de gerar o paramsProc | ICustomAdapterProcess | DepoisTransformarProcesso |
Antes de executar um processo RMSProcess | IExtenisonProcess | BeforeExecute | Antes de enviar para o método execute do process | ICustomAdapterProcess | BeforeExecuteProcess |
Depois de executar um processo RMSprocess | IExtenisonProcess | AfterExecute | Depois da execução | ICustomAdapterProcess | AfterExecuteProcess |
Depois de criar a resposta para as mensagens recebidas | IExtensionResponse | CreateResponse | Depois de ciar a tag de returnContent para as respostas de process. | ICustomAdapterProcess | DepoisGerarReturnContentRespostaProcess |
ICUSTOMADAPTERWEBSERVICES- Interface de Webservices
Fase EAI 1.0 | Interface EAI 1.0 | Método EAI 1.0 | Fase EAI 2.0 | Interface EAI 2.0 | Método EAI 2.0 |
Antes de transformar | IExtensionWebService | BeforeTransformSend | Antes de transformar | ICustomAdapterWebServices | AntesTransformarWebServices |
Depois de transformar | IExtensionWebService | AfterTransformSend | Depois de transformar | ICustomAdapterWebServices | DepoisTransformarWebServices |
Antes de executar o handle | IExtensionMessage | BeforeExecuteHandle | Antes de enviar o totvsMessage para o ws | ICustomAdapterWebServices | AntesExecutarWebServices |
Depois de enviar o totvsmessage para o webServices | IExtensionWebService | AfterSendWebServices | Depois de enviar o totvsMessage para o ws | ICustomAdapterWebServices | DepoisExecutarWebServices |
Interfaces descontinuadas
Interface | Método | Comentários |
IExtensionDataServer | AfterTransformDataSet
| Deve-se utilizar a interface ICustomAdapterDataServer BeforeExecuteDataServer. |
IExtensionDataServer | BeforeSave | A manipulação dos dataServers a partir de agora ficará sob responsabilidade dos adapters dos produtos. Sendo assim, caso exista necessidade, essa interface de customização deverá ser criada dentro do adapter do produto e chamado dentro do próprio método do adapter do produto.. Na interface antiga, esse método é executado dentro de um foreach para cada nome de Dataserver. |
IExtensionDataServer | AfterSave | A manipulação dos dataServers a partir de agora ficará sob responsabilidade dos adapters dos produtos. Sendo assim, caso exista necessidade, essa interface de customização deverá ser criada dentro do adapter do produto e chamado dentro do próprio método do adapter do produto.. Na interface antiga, esse método é executado dentro de um foreach para cada nome de Dataserver. |
IExtensionModule | BeforeExecuteMethodParams | Será removida pois não é utilizada |
IExtensionModule | AfterExecuteMethod | Será removida pois não éutilizada |
4 - Adapters
Classe | Descrição |
AdapterBase | Classe ancestral usada para definir regras comuns para todos os adapters. |
AdapterReceiveBase | Classe ancestral usada para definir regras comuns para todos os adapters de recebimento de mensagens |
AdapterSendBase | Classe ancestral usada para definir regras comnus para todos os adpaters de envio de mensagens |
Classe | Descrição |
AdapterDataServerBase | Classe ancestral usada para definir comportamentos de manipulação de mensagens usando estruturas de dataServers |
AdapterProcessBase | Classe ancestral usada para definir comportamentos de manipulação de mensagens usando estruturas de RMProcess |
Classe | Descrição |
AdapterWebServiceBase | Classe ancestral usada para definir comportamentos de manipulação de mensagens a serem enviadas por webServices |
Exemplo: Regra de recebimento da mensagem de recebimento CostCenter | ||
1) -Adicionar referencia para as dlls abaixo: 2) - Criar a classe com a seguinte característica: a) Nome da classe: CostCenter_Receive_2000 b) Herdar da classe "AdapterDataServerBase" Ex: public class CostCenter_Receive_2000: AdapterDataServerBase c) Usar o atributo de classe "AdapterAttr": esse atributo irá "carimbar" a classe com informações do adapter. Ex: [AdapterAttr("COSTCENTER", "1.000")]
|
5 - API
API de manipulação por dataServer
Nome Serviço | Descrição |
CreateDataServer | Criar um instancia do DataServer |
Readrecord | Executa o método ReadRecord do Dataserver |
SaveRecord | Salva um dataSet no dataServer; |
GetDeParaItem | Retorna um objeto "EAIMsgDeParaItem" referente a um item de depara |
GetPKValues | Recupera valores de chave primária data row passada como parametro |
GetPKValuesByDePara | Recupera valores de chave primária baseado na tela de de/para |
CopyDataRow | Copia valores da linha de origem para tabela de destino |
UpdateRowValue | Atualiza valores da linha corrente |
GetReplaceCompanyIdBranchId | Troca a coligada e filial de todo o xml |
API de manipulação da tabela de DE/PARA
Nome Serviço | Descrição |
GetChaveRM | Retorna um valor da chave primária |
ExistsDePara | Verifica a existencia de um de/para |
SaveDePara | Salva valores na tabela de de/para |
API de manipulação de processos
Nome Serviço | Descrição |
Execute | Executa um rmsprocess |
ExecuteWithParams | Executa um rmsProcess com parametros. Passan do um xmlDeParametros |
ExecuteWithParams | Executa um rmsProcess com parametros passando umparamsProc. |
API de manipulação de webServices
Nome Serviço | Descrição |
SendWebServices | Envia o xml TotvsMessage para o destino via webServices |
GetDeParaByListOfInternalId | Retrona uma lista de informações de de/para localizadas no xml de responseMessage |
RemoveRMEntityName | Remove a coluna "'EntityName" criada no dataSet |
PrepareInternalFields | Adiciona campos de InternalId nas tabelas do dataSet |