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.