A comunicação através do protocolo transaction (EAI) possui uma estrutura composta dos seguintes elementos:
...
Graficamente, a estrutura pode ser descrita conforme abaixo:
Os modos de operação podem ser: síncrono e assíncrono, sendo que neste último temos a necessidade de uma fila e de um agente que se responsabilize por sua gestão (processador de fila).
...
O uso do InternalId é obrigatório nesse modelo.
<INSERIR AQUI MAIS INFORMAÇÕES SOBRE INTERNALID>Clique aqui para saber mais sobre internalId
A mensagem padronizada, utilizada através de transactions (EAI), é composta dos elementos Header e Content.
...
O padrão de mensagem TOTVS através do protocolo transactions (EAI) estabelece quatro três tipos de mensagens: BusinessMessage, ResponseMessage e ReceiptMessage.
Uma mensagem do tipo BusinessMessage são aquelas que iniciam qualquer processo de troca de mensagens entre os aplicativos. Sempre que um aplicativo A quiser enviar ou solicitar informações do aplicativo B, ele enviará uma BusinessMessage que será processada pelo aplicativo destinatário.
...
A tabela abaixo apresenta um comparativo entre mensagens de evento e de solicitação:
|
| |
---|---|---|
Objetivo | Replicação de Dados | Compartilhar Lógicas |
Quem Gera (normalmente) | Um (cadastro Master) | Vários (clientes que precisam da lógica) |
Quem Responde | Vários (cadastros replicados) | Um (detentor da lógica) |
Uso + comum | Síncrono (Envia e aguarda) | Assíncrono (envia e esquece) |
Exemplo | Upsert UnitOfMeasure | getCashAvailableOnDate |
As mensagens de eventos de negócio basicamente descrevem o evento ocorrido, como no exemplo abaixo:
...
As mensagens de request descrevem qual função se deseja executar e os parâmetros necessários, como no exemplo abaixo:
Bloco de código | ||||
---|---|---|---|---|
| ||||
{
"Header": {
"UUID": "c18535da-75b8-4925-9e32-b6445d4f2927",
"Type": "BusinessMessage",
"SubType": "request",
"Transaction": "AccountsReceivableOffsetting",
"StandardVersion": "1.000",
"SourceApplication": "RM",
"CompanyId": "2",
"BranchId": "2",
"GeneratedOn": "2016-06-21T19:41:21",
"DeliveryType": "Sync",
"Version": "2.000",
"ProductName": "RM",
"ProductVersion": "11.83.55"
},
"Content": {
"CompanyInternalId": "CompanyInternalId1",
"CompanyId": "CompanyId1",
"BranchId": "BranchId1",
"InternalId": "InternalId1",
"AccountReceivableDocumentInternalId": "AccountReceivableDocumentInternalId1",
"AdvanceInternalId": "AdvanceInternalId1",
"OffsettingDate": "1900-01-01T00:00:00",
"HistoryText": "HistoryText1",
"OffsettingValue": 1.0
}
}
|
Onde:
...
Informações |
---|
...
| ||
Uma BusinessMessage, seja do tipo Event quanto do tipo Request, tem seu atributo Content definido no schema da mensagem padronizada TOTVS. Conforme pode ser visto nesta página, deve-se indicar, através do atributo x-totvs na seção info do schema qual modelo será utilizado para definir o atributo Content (transactionDefinition/BusinessContentType). |
Âncora | ||||
---|---|---|---|---|
|
Uma ResponseMessage representa
...
Uma ResponseMessage representa o resultado do processamento de uma BusinessMessage pelo aplicativo que a recebeu e o seu conteúdo pode variar de acordo com o tipo de mensagem e com o resultado do processamento.
Todas as respostas geradas por uma BusinessMessage devem ser associadas à mensagem original e mantidas pelo aplicativo-origem, como forma de rastrear quem processou aquela mensagem e qual o resultado do processamento.
A mensagem de resposta contém informações sobre o resultado do processamento de uma BusinessMessage.
Exemplo de um JSON de resposta de processamento sem erros
pelo aplicativo que a recebeu e o seu conteúdo pode variar de acordo com o tipo de mensagem e com o resultado do processamento.
Todas as respostas geradas por uma BusinessMessage devem ser associadas à mensagem original e mantidas pelo aplicativo-origem, como forma de rastrear quem processou aquela mensagem e qual o resultado do processamento.
A mensagem de resposta contém informações sobre o resultado do processamento de uma BusinessMessage.
Exemplo de um JSON de resposta de processamento sem erros
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{
"Header" : {
"UUID" : "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6",
"Type" : | ||||||
Bloco de código | ||||||
| ||||||
{ "Header" : { "UUID" : "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6", "Type" : "Response", "SubType" : "event", "Transaction" : "CostCenter", "Version" : "2.000", "SourceApplication" : "LGX12", "ProductName" : "LOGIX", "ProductVersion" : "12.1.15", "GeneratedOn" : "2017-11-14T11:47:15-03:00", "DeliveryType": "async" }, "Content" : { "ReceivedMessage" : { "UUID" : "d6bbfa63-ca27-e2ac-0b14-101970f59a5b", "SentBy" : "P1299", "Event" : "upsert" }, "ProcessingInformation" : { "ProcessedOn" : "2017-11-14T11:47:15-03:00", "Status" : "Ok" }, "ReturnContent" : { "ListOfInternalID" : [ { "Name" : "BankInternalId", "Origin" : "01|99|123", "Destination" : "01|99|abc" } ] } } } |
Onde:
Onde:
Informações | ||
---|---|---|
| ||
Da mesma forma que o atributo Content de uma BusinessMessage, o atributo ReturnContent de uma ResponseMessage é definido no schema da mensagem padronizada. De acordo com a documentação sobre schemas, na atributo x-totvs da seção info deve ser referenciado o modelo que definirá o ReturnContent (transactionDefinition/ReturnContentType). |
Exemplo de um JSON de resposta de processamento com erros:
...
Obs: Consultar Catalogo de Erros
Âncora | ||||
---|---|---|---|---|
|
Uma ReceiptMessage representa a confirmação de recebimento de uma BusinessMessage pelo aplicativo destino.
...
Quando uma BusinessMessage é recebida é ela e for síncrona, ela deverá ser processada imediatamente e receberá gerará como resposta uma ResponseMessage,.
Quando uma BusinessMessage é recebida é ela e for assíncrona, ela receberá será gerada como resposta, no momento da recepção uma ReceiptMessage, e posteriormente quando for processada será enviada uma ResponseMessage para esta mensagem.