Árvore de páginas


Tipo da Integração


Antes de desenvolver o adapter de negócios, deve-se atentar ao tipo de integração que será desenvolvida: síncrona e/ou assíncrona. Essa informação determina a dinâmica da integração, por exemplo, em uma integração assíncrona, a resposta não será imediata e o retorno do envio será nulo, logo, cabe ao adapter de negócio ou a própria tela tratar esse tipo de integração.

Características de uma classe de envio:

  • Importar classes do EAI;
  • Importar classes da mensagem de negócio;
  • Implementar IBusinessAdapter;
  • Implementar ISenderAdapter;
  • No método criado para envio, invocar método dispatchMessage do EAIEngine.



Mensagem de Negócio


Para criação do objeto BusinessMessage para envio ao EAI através do método dispatchMessage, deve ser utilizada a classe da mensagem de negócio.


Exemplo Progress:

DEFINE VARIABLE oBusinessMessage AS BusinessMessage 	NO-UNDO.
DEFINE VARIABLE oBusinessContent AS BusinessContentType NO-UNDO.
DEFINE VARIABLE oHelper 		 AS UnitOfMeasure 		NO-UNDO.

/* Cria o conteúdo da mensagem */
oHelper = NEW UnitOfMeasure().
oBusinessContent = CAST(oHelper:createBusinessContent(), "com.totvs.datasul.eai2.unitofmeasure_11_1_0.BusinessContentType").

oBusinessContent:CODE = "DZ".
oBusinessContent:DESCRIPTION = "Duzia".

/* Cria a mensagem de negócio */
oBusinessMessage = BusinessMessage:createBusinessMessage(oBusinessContent).

/* Insere informações sobre key-fields */
oBusinessMessage:Keys:addProperty("code", "DZ").

/* Define qual foi o evento que ocorreu */
oBusinessMessage:EVENT = "upsert".

/* Define o modelo de mensagem: Síncrono (sync) ou Assíncrono (async) */
oBusinessMessage:DeliveryType = “sync”.

Exemplo Java:

BusinessMessage oBusinessMessage;
BusinessContentType oBusinessContent;
UnitOfMeasuer oHelper = new UnitOfMeasure();
 
/* Cria o conteudo da mensagem */
oBusinessContent = (BusinessContentType) oHelper.createBusinessContent();
oBusinessContent.setCode("UN");
oBusinessContent.setDescription("Unidade"); 
 
/* Cria a mensagem TOTVS */
oBusinessMessage = BusinessMessage.createBusinessMessage(oBusinessContent); 
 
/* Insere informacoes sobre key-fields */
oBusinessMessage.getKeys().put("code", "UN"); 
 
/* Define qual foi o evento que ocorreu: upsert, delete ou branco (request).*/
oBusinessMessage.setEvent("upsert"); 
 
/* Define o modelo de mensagem (Sincrono ou Assincrono) */
oBusinessMessage.setDeliveryType(mode);



Envio do objeto para o EAI


Depois de preenchido os atributos de negócio da mensagem, o objeto deve ser enviado ao EAI para integração:

Exemplo Progress:

/* Envia a mensagem para o Engine do EAI */
DO ON ERROR UNDO:
	DEFINE VARIABLE oResponse AS ResponseMessage NO-UNDO.

	oResponse = EAIEngine:Instance:dispatchMessage(oBusinessMessage).

	CATCH eaiError AS EAIException:
		MESSAGE "Erro ao realizar integração: " eaiError:getMessage(1).
		RETURN.
	END.
END.

Exemplo Java:

/* Envia a mensagem para o Engine do EAI */
try {
        oResponse = EAIEngine.getInstance().dispatchMessage(oBusinessMessage);
        uuid = oBusinessMessage.getUUID();
} catch (EAIException e) {
        EAILog.error("UnitOfMeasureAdapter: erro: " + e.getMessage());
}
return oResponse;


Nesse momento, deve se atentar ao tipo de integração definido no atributo DeliveryType da mensagem de negócio: síncrono (sync) ou assíncrono (async).

No caso de uma integração síncrona, a resposta (oResponse - RespondeMessage) virá preenchida com ou sem erro na integração e deve ser tratada pelo adapter logo após a chamada do método dispatchMessage.

Em uma integração assíncrona, a resposta (oResponse – ResponseMessage) virá com o valor nulo (?). O tratamento do retorno dessa integração, deverá ser tratada no método processMessage(ResponseMessage), que será invocado automaticamente pelo EAI posteriormente.