Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Estrutura

A comunicação através do protocolo transaction (EAI) possui uma estrutura composta dos seguintes elementos:

  • Emissor/Receptor: correspondem aos aplicativos (ERPs) dos quais se origina (emissor) e para os quais se destina (receptor) a mensagem.
  • Mensagem: corresponde ao conteúdo que trafega entre o emissor e o receptor. 
  • Interface: correspondem aos endpoints REST (/totvseai/standardmessage/v1/transactions), webservices SOAP, ou filas AMQP que permitem o envio e recebimento das mensagens.

...

Graficamente, a estrutura pode ser descrita conforme abaixo:

Funcionamento

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

Mensagem

A mensagem padronizada, utilizada através de transactions (EAI), é composta dos elementos Header e Content.

...

  • ReceivedMessage
  • ProcessingInformation: Contém atributo Details, que por sua vez, contém as mensagens referentes ao processamento da mensagem original. Elas estarão estruturadas conforme definido no Guia de Implementação de APIs TOTVS, item Mensagens de erro, com a ressalva de que os atributos utilizaram a forma capitalizada, em vez do formato "camelCase", ou seja, em vez de "code", é usado "Code", por exemplo.
  • ReturnContent: Contém o resultado do processamento da mensagem original, conforme definido para a transação. Além disso, pode conter também o atributo ListOfInternalId, onde constam todos os internalIDs relacionados a mensagem. A estrutura correspondente ao internal ID tém os seguintes atributos:
    • Name: nome da entidade correspondente ao valor sendo trafegado. Exemplo: "CustomerVendor", "Item", "SalesOrder";
    • Origin: mesma definição da tag Origin;
    • Destination: mesma definição da tag Destination.

Tipos de Mensagens

O padrão de mensagem TOTVS através do protocolo transactions (EAI) estabelece quatro três tipos de mensagens: BusinessMessageResponseMessage e ReceiptMessage.

BusinessMessage

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:




  Event  


  Request

Objetivo

Replicação de Dados

Compartilhar   Lógicas

Quem   Gera (normalmente)

Um   (cadastro Master)

Vários   (clientes que precisam da lógica)

Quem   Responde
  (normalmente)

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


BusinessMessage – Event

As mensagens de eventos de negócio basicamente descrevem o evento ocorrido, como no exemplo abaixo:

...

  • Event: Qual foi o evento associado à mensagem (pode ser upsert – inclusão/alteração – ou delete – eliminação).
  • Content: JSON com informações sobre o evento, normalmente contendo todas as informações pertinentes àquela entidade.

BusinessMessage – Request

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
languagejs
titleBusinessMessage - Request
{
	"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:

  • BusinessContentContent:  contem JSON com informações necessárias para o processamento, normalmente parâmetros de entrada.

...


Informações

...

titleQuais atributos devem ir no Content de uma BusinessMessage?

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).


ResponseMessage
Âncora
ResponseMessage
ResponseMessage

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
languagejs
titleMensagem do Tipo Response (EAI)
linenumberstrue
{
    "Header" : {
        "UUID" : "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6",
        "Type" : 
Bloco de código
languagejs
titleMensagem do Tipo Response (EAI)
linenumberstrue
{
    "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:

  • ReceivedMessage: Segmento com informações sobre a mensagem original (BusinessMessage) que deu origem a esta resposta.
    • SentBy: Indica qual foi a instancia que gerou a mensagem original
    • UUID: Identificador universal da mensagem de origem
    • Event: Qual foi o evento associado à mensagem (pode ser upsert – inclusão/alteração – ou delete – eliminação).
  • ProcessingInformationReceivedMessageSegmento com informações sobre a mensagem original (BusinessMessage) que deu origem a esta resposta.
    • SentBy: Indica qual foi a instancia que gerou a mensagem original
    • UUID: Identificador universal da mensagem de origem
    • Event: Qual foi o evento associado à mensagem (pode ser upsert – inclusão/alteração – ou delete – eliminação).
  • ProcessingInformation: Segmento com informações sobre o resultado do processamento
    • ProcessedOn: Timestamp de quando a mensagem foi processada pelo destino
    • Status: Situação final do processamento (ok ou error)
    • Details: Lista de mensagens (erro ou aviso) retornadas no processamento.
  • ReturnContent: JSON com as informações de negócio retornadas no processamento
  • o resultado do processamento
    • ProcessedOn: Timestamp de quando a mensagem foi processada pelo destino
    • Status: Situação final do processamento (ok ou error)
    • Details: Lista de mensagens (erro ou aviso) retornadas no processamento.
  • ReturnContent: JSON com as informações de negócio retornadas no processamento

Informações
titleComo se define o ReturnContent?

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 

ReceiptMessage
Âncora
ReceiptMessage
ReceiptMessage

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.