Histórico da Página
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:
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
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:
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
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();
} |
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas