Descrição
Um adapter de negócio no EAI 2 tem por finalidade traduzir dados de negócio em informações que possam ser integradas para outros sistemas de forma síncrona ou assíncrona. Basicamente, será uma classe que deve preencher atributos das classes de mensagens de negócio e despachar para o EAI.
Para o desenvolvimento do adapter, recomenda-se o uso do programa Openedge Architect (Progress) devido à visualização de métodos e atributos de classes e objetos inline.
Classes de mensagens de negócio
Como mencionado anteriormente, ao desenvolver um adapter de negócio, o programador utilizará apenas classes de mensagens de negócio, popular seus atributos e entregar ao EAI. Essas classes de negócios são geradas a partir de arquivos XSD definidos junto ao comitê de integração.
O processo de geração de classes de mensagens de negócio é feito automaticamente através da integração contínua do produto Datasul.
O primeiro passo é importar a classe de negócio utilizando o comando USING
USING com.totvs.datasul.eai2.messages.Branch_1_000.*.
Depois de referenciar a classe da mensagem de negócio, o adapter está apto a utilização dos objetos e ser enviado ao EAI.
Estrutura geral de um adapter de negócio
Um adapter de negócio, seja de envio ou recebimento, deve implementar algumas interfaces dependendo da regra de negócio:
- IBusinessAdapter: Interface com definição de métodos de processamento de uma BusinessMessage. Essa interface é que define para o EAI que é um adapter de negócio, logo, deve ser obrigatoriamente implementada;
- ISenderAdapter: Interface com definição de método de recebimento de resposta assíncrona;
- IReceiverAdapter: Interface com definição de método de recebimento de mensagem de negócio para integração.
É possível perceber que não há uma regra de nome/parâmetro/retorno para o método de envio, pois, como é um método que deverá ser chamado pelo programa/tela de negócio, cabe ao programador definir isso.
USING com.totvs.datasul.eai.*. USING com.totvs.datasul.eai2.messages.whois_1_000.*. CLASS com.totvs.datasul.eai.adapters.WhoIsAdapter IMPLEMENTS IBusinessAdapter, ISenderAdapter, IReceiverAdapter: DEFINE PROPERTY TransactionName AS CHARACTER INITIAL "whois" GET . DEFINE PROPERTY TransactionVersion AS CHARACTER GET: RETURN whois:VERSION. END. METHOD PUBLIC ResponseMessage processMessage (oMsg AS BusinessMessage): RETURN oResponse. END METHOD. METHOD PUBLIC LOGICAL processMessage (oResponseMessage AS ResponseMessage): RETURN TRUE. END METHOD. METHOD PUBLIC LOGICAL sendMessage(cAnything as CHARACTER): DO ON ERROR UNDO: oResponse = EAIEngine:Instance:dispatchMessage(oBusinessMessage). /* Seta UUID para buscar nos testes unitarios */ THIS-OBJECT:UUID = oBusinessMessage:UUID. CATCH eaiError AS EAIException: /* MESSAGE "*******". MESSAGE "Adapter: Deu erro: " eaiError:getMessage(1). MESSAGE "*******". */ END. END. END. END.
Características:
- Cabeçalho importa duas bibliotecas:
- Engine do EAI;
- Classe de mensagem de negócio.
- Classe implementa as interfaces de envio e recebimento, além da interface de adapter de negócio;
- Propriedade da classe:
- TransactionName: Nome da transação. No exemplo a transação é a "whois";
- TransactionVersion: Versão da transação. É recomendável que esse campo utilize a mesma versão da classe da mensagem de negócio, como está no exemplo;
- Métodos da classe:
- processMessage(BusinessMessage): Este método é responsável por receber uma mensagem de integração de um sistema externo. O retorno desse método será um ResponseMessage com ou sem erros;
- processMessage(ResponseMessage): Em uma integração de envio assíncrono, a resposta do processamento do sistema externo será recebido neste método. Seu retorno será apenas lógico, informando erro ou não;
- sendMessage(CHARACTER): Na verdade, esse método pode ser definido com nome, parâmetro e retorno de acordo com o programador. Para enviar a mensagem para o sistema externo, deve-se invocar o método dispatchMessage do EAIEngine, passando a mensagem (BusinessMessage) por parâmetro. No caso de uma integração assíncrona, seu retorno será nulo (?), no caso de uma integração síncrona, o retorno será um ResponseMessage com ou sem erros.
Tipos de Entrega (Delivery Type)
Delivery Type é a denominação pela qual é referenciado o tipo de comunicação entre os aplicativos. Em determinados modelos de dados, o programa necessita de uma resposta imediata do aplicativo externo. Já em outras vezes, o modelo não necessita de uma resposta ou não naquele determinado momento, economizando o tempo que o programa aguarda durante troca de mensagens.
Com isso, foram criados dois tipos de entrega:
- Sync: O processamento da mensagem do tipo síncrono acontece no momento da execução, ou seja, o aplicativo interno aguarda a resposta do aplicativo externo para continuar a execução. Normalmente, mas não necessariamente, utiliza-se essa funcionalidade quando são necessárias mais informações no retorno, como dados complementares aos enviados;
- Async: Quando enviada uma mensagem do tipo assíncrono, o aplicativo interno não aguarda uma resposta do aplicativo externo para continuar a execução. O destino recebe a mensagem e coloca em uma fila junto com outras mensagens assíncronas. Posteriormente, o processamento delas é efetuado na ordem em que chegaram. Ou seja, caso a origem necessite de retorno, será feito em um momento futuro e não durante a execução do programa. É comum o uso dessas mensagens para replicação de cadastros simples, onde não envolve processamento complexo.