Árvore de páginas

Objetivo


No Adapter é montada a mensagem de negócio (BusinessMessage) ou mensagem de retorno (ResponseMessage). O método prepareMessage() chamará a classe de InternalId vinculada ao Adapter.

A classe de InternalId adicionará os seus campos na BusinessMessage, na tag <InternalId > e retornará a mensagem tratada para o Engine. Ao chamar o método dispatchMessage() a mensagem será enviada com as informações customizadas.


Exemplo de utilização em Progress:

METHOD PUBLIC TOTVSMessage sendMessage():        
        DEFINE VARIABLE businessContent AS com.totvs.datasul.eai2.messages.CostCenter_2_000.BusinessContentType NO-UNDO.
        DEFINE VARIABLE response        AS TOTVSMessage NO-UNDO.
        
        /* Criar o business content */
        businessContent = CAST( helper:createBusinessContent(),
                                "com.totvs.datasul.eai2.messages.CostCenter_2_000.BusinessContentType" ).
        
        /* Registrar a estrutura dos "internal IDs" da mensagem */
        IF NOT mapper:existMapping("CompanyInternalId","empresa") THEN
            mapper:register( INPUT "CompanyInternalId", INPUT "empresa", INPUT "cod_empresa").
  
        IF NOT mapper:existMapping("CostCenterInternalId", "centro_custo") THEN
            mapper:register( INPUT "CompanyInternalId", "centro_custo", "cod_empresa|cod_estabel|cod_ccusto").
             
        /* Preencher o businessContent */
        businessContent:CLASS = 111.
        businessContent:CODE  = "111.000.000".
        businessContent:NAME  = "Centro de custo 111".
        businessContent:SPED  = TRUE.
        businessContent:ShortCode = "111".
        businessContent:CompanyId = "123".
        businessContent:BranchId  = "XYZ".           
        
        /* Preencher os dados dos "internal IDs" na mensagem */
        businessContent:CompanyInternalId = "123@empresa".
        businessContent:InternalId = "123|XYZ|111.000.000@centro_custo".
        
        /* Criar a business message */
        msg = BusinessMessage:createBusinessMessage( businessContent ).
        
        
        DO ON ERROR UNDO, LEAVE:
        /* Enviar a mensagem */
            response = EAIEngine:instance:dispatchMessage( msg ).
            
            /* Tratar a resposta */
            IF response:GetClass():IsA("com.totvs.datasul.eai.ResponseMessage") THEN
             THIS-OBJECT:processMessage( CAST(response,"com.totvs.datasul.eai.ResponseMessage")).
                
        CATCH e AS Progress.Lang.Error :
             EAILog:ERROR("Couldn’t send message!").
                
             RETURN ?.                       
        END CATCH.
     END.
        
     RETURN response.
        
END METHOD.
  
METHOD PUBLIC LOGICAL processMessage( INPUT resp AS com.totvs.datasul.eai.ResponseMessage ):
                
        DEFINE VARIABLE businessContent AS BusinessContentType NO-UNDO.
        DEFINE VARIABLE returnContent   AS ReturnContentType   NO-UNDO.
  
        businessContent = CAST(MessageContentHelper:createBusinessContent( msg, helper ),
                          "com.totvs.datasul.eai2.messages.CostCenter_2_000.BusinessContentType").    
        returnContent   = CAST(MessageContentHelper:createReturnContent( resp, helper ),
                          "com.totvs.datasul.eai2.messages.CostCenter_2_000.ReturnContentType").
        
        IF returnContent = ? THEN
            RETURN FALSE.
        
        /* Extração dos internal ids enviados pelo destino */
        
		DEFINE VARIABLE iCont AS INTEGER NO-UNDO.
		DEFINE VARIABLE internalId AS com.totvs.datasul.eai2.messages.CostCenter_2_000.InternalIdType NO-UNDO.
		DEFINE VARIABLE listOfinternalId AS com.totvs.datasul.eai2.messages.CostCenter_2_000.ListOfInternalIdType NO-UNDO.
        
        listOfinternalId = returnContent:ListOfInternalId.
        
        DO iCont = 1 TO listOfinternalId:NUM-InternalID:
        
            internalId = listOfInternalId:getInternalId(iCont).
            
            IF internalId:NAME = "CompanyInternalId" THEN DO:
		   /* Completa o mapeamento dos internal ids, gravando o codigo do aplicativo 
      		  de origem e o código do aplicativo de destino. */
   				mapper:setValue( internalId:NAME,
			    businessContent:CompanyInternalId,
   				resp:SourceApp,
   				internalId:Destination ).
   			END.
 		END.                            
	RETURN TRUE.
END METHOD.

Exemplo de utilização em Java:

public TOTVSMessage sendMessage(){
  
        // Criar o businessContent
        CostCenter          helper          = new CostCenter();
        BusinessContentType businessContent = (BusinessContentType) helper.createBusinessContent();
        TOTVSMessage        response        = null;
  
        // Registrar a estrutura dos "internal IDs" da mensagem
       if(!mapper.exists("CompanyInternalId", "empresa")) {
             mapper.register("CompanyInternalId", "empresa", "cod_empresa");
       }
  
       if(!mapper.exists("CostCenterInternalId", "centro_custo")){
                    mapper.register("CostCenterInternalId","centro_custo","cod_empresa|cod_estabel|cod_ccusto");
       }
  
        // Preencher o businessContent
        businessContent.setClass(111);
        businessContent.setCode("111.000.000");
        businessContent.setName("Centro de custo 111");
        businessContent.setSPED(true);
        businessContent.setShortCode("111");
        businessContent.setCompanyId("123");
        businessContent.setBranchId("XYZ");
  
        // Preencher os dados dos "internal IDs" na mensagem
       businessContent.setCompanyInternalId("123@empresa");
       businessContent.setInternalId("123|XYZ|111.000.000@centro_custo");
  
                // Criar a business message
        msg = BusinessMessage.createBusinessMessage( businessContent );
  
        try {
  
                // Enviar a mensagem
                response = EAIEngine.getInstance().dispatchMessage( msg );
  
                // Tratar a resposta
                if( response instanceof ResponseMessage ){
                        this.processMessage((ResponseMessage) response);
                }
        } catch (EAIException e) {
                EAILog.error(e, "Couldn’t send message!");
        }
        return response;
}
 
@Override
public boolean processMessage(ResponseMessage resp) {
	BusinessContentType businessContent = (BusinessContentType) MessageContentHelper.createBusinessContent(msg, new CostCenter());
	ReturnContentType   returnContent   = (ReturnContentType) MessageContentHelper.createReturnContent(resp, new CostCenter());

	if( returnContent == null ) return false;

	// Extração dos internal ids enviados pelo destino
	List<InternalIdType> internalIds = returnContent.getListOfInternalId().getInternalIdList();
}