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:

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:

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(Helper: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”.

 

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

/* 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.

 

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.