Árvore de páginas


Recebimento


  O processo de desenvolvimento do método de recebimento de mensagem de integração é mais simples que o processo de envio. Basicamente, consiste em desenvolver um método que receba um BusinessMessage com a mesma estrutura definida na classe de mensagem de negócio e utilizar seus atributos. O retorno desse método é uma mensagem de resposta (ResponseMessage) com ou sem erro de negócio.

Características de uma classe de recebimento de mensagem:

  • Importar classes do EAI;
  • Importar classes da mensagem de negócio;
  • Implementar IBusinessAdapter (apenas em Progress);
  • Implementar IReceiverAdapter.



  Exemplo Progress:

USING com.totvs.datasul.eai.*.
USING com.totvs.datasul.eai2.unitofmeasure_11_1_0.*.
CLASS com.totvs.datasul.eai.test.UnitOfMeasureAdapter IMPLEMENTS IBusinessAdapter, IReceiverAdapter:
DEFINE PROPERTY TransactionName AS CHARACTER INITIAL "UnitOfMeasure" GET .
DEFINE PROPERTY TransactionVersion AS CHARACTER GET:
RETURN unitofmeasure:VERSION.
END.
 
METHOD PUBLIC ResponseMessage processMessage (oMsg AS BusinessMessage):
DEFINE VARIABLE oHelper AS UnitOfMeasure NO-UNDO.
DEFINE VARIABLE oBusinessContent AS BusinessContentType NO-UNDO.
DEFINE VARIABLE oResponseMessage AS ResponseMessage NO-UNDO.
oHelper = NEW UnitOfMeasure().
        /* Processa os dados de entrada */
oBusinessContent = CAST( MessageContentHelper:createBusinessContent( oMsg, oHelper ), "com.totvs.datasul.eai2.unitofmeasure_11_1_0.BusinessContentType" ).
oResponseMessage = ResponseMessage:createResponse(oMsg, ?). oResponseMessage:AddMessage("WARNING", "10", "Param X nao esta configurado").
        RETURN oResponseMessage.
 
END METHOD.
 
END. /* CLASS */

Exemplo Java:

public class CompanyAdapter extends EpmAdapter implements IReceiverAdapter {
 
        private ResponseMessage responseMessage;
        private BusinessContentType businessContentType;
       
        @Override
        public ResponseMessage processMessage(BusinessMessage businessMessage) {
                try {
                        businessContentType = (BusinessContentType) MessageContentHelper.createBusinessContent(businessMessage, new Company());
                        responseMessage = ResponseMessage.createResponse(businessMessage, null);
                        if (businessMessage.getEvent() != null) {
                               if (businessMessage.getEvent().equals("upsert"))
                                       upsert(businessMessage);
                               else
                                       delete(businessMessage);
                        }
                } catch (EAIException e) {
                        e.printStackTrace();
                        responseMessage.addMessage(ProcessingMessagesTypesEnum.ERROR, null, e.getMessage());
                } catch (Exception e) {
                        e.printStackTrace();
                }
                return responseMessage;
        }
       
        private void delete(BusinessMessage businessMessage) throws EAIException, Exception {
                if (businessContentType.getCode() == null)
                        throw new EAIException("Codigo da Unidade nao informado");
                Unidade unidade = ((UnidadeFacade) getBean("unidadeFacade")).getByCdExterno("C"+businessContentType.getCode());
                if (unidade == null)
                        throw new EAIException("Unidade com o codigo "+businessContentType.getCode()+" nao encontrada");
                if (!((UsuarioFacade) getBean("usuarioFacade")).getUsuariosByUnidade((Long) unidade.getCodigo()).isEmpty())
                        throw new EAIException("Existem usuarios relacionados a Unidade.");
                if (!((TreinamentoFacade) getBean("treinamentoFacade")).getTreinamentosByUnidade((Long) unidade.getCodigo()).isEmpty())
                        throw new EAIException("Existem Treinamentos relacionados a Unidade.");
                ((UnidadeFacade) getBean("unidadeFacade")).delete(unidade);
                responseMessage = ResponseMessage.createResponse(businessMessage, null);
        }
       
        private void upsert(BusinessMessage businessMessage) throws EAIException, Exception {
                if (businessContentType.getCode() == null)
                        throw new EAIException("Codigo da Unidade nao informado");
                if (businessContentType.getFancyName() == null)
                        throw new EAIException("Descricao da Unidade nao informada");
                if (businessContentType.getShortName() == null)
                        throw new EAIException("Titulo da Unidade nao informada");
                IntegracaoUnidadeHolder unidadeHolder = new IntegracaoUnidadeHolder();
                unidadeHolder.setDescricao(businessContentType.getFancyName());
                unidadeHolder.setTitulo(businessContentType.getShortName());
                unidadeHolder.setTipoUnidade(0);
                unidadeHolder.setCdFilhoExterno("C"+businessContentType.getCode());
                Object object = ((IntegracaoUnidade) getBean("integracaoUnidade")).gerarIntegracaoUnidade(unidadeHolder);
                if (object != null && object instanceof String)
                        throw new EAIException(object.toString());
                responseMessage = ResponseMessage.createResponse(businessMessage, null);
        }
       
        @Override
        public String getTransactionName() {
                return "Company";
        }
 
        @Override
        public String getTransactionVersion() {
                return Company.getVersion();
        }
 
}