Com o objetivo de auxiliar na migração do formato SOAP/XML para o formato REST/JSON, elaboramos este documento, no qual demonstramos a equivalência de conceitos entre os formatos. Entretanto, algumas tags presentes no formato SOAP/XML não foram migradas para o novo formato, por estarem em desuso ou terem uma aplicação muito específica.

Formato SOAP/XMLFormato REST/JSON
Endpoints

http://<servidor>:<porta>/eai2-ws/EAIService?wsdl (DATASUL)

http://<servidor>:<porta>/public/ws/EAIService.wsdl (DATASUL Novo Frame)

http://<servidor>:<porta>/EAISERVICE.apw?wsdl (LOGIX/PROTHEUS)

http://<servidor>:<porta>/EAIService/MEX?wsdl (RM)

  • Operação SOAP padrão para recebimento: receiveMessage

http://<servidor>:<porta>/totvseai/standardmessage/v1/transactions

  • Endpoints implementados por todos os ERPs.

Estrutura da mensagem

TOTVSMessage, composta de:

  • MessageInformation e
  • BusinessMessage ou
  • ResponseMessage ou
  • ReceiptMessage

Dois atributos principais:

  • Header
  • Content


Tags de MessageInformation X atributos de header
<MessageInformation version="2.000">"Version" : "2.000"
<UUID>d6bbfa63-ca27-e2ac-0b14-101970f59a5b</UUID>"UUID" : "d6bbfa63-ca27-e2ac-0b14-101970f59a5b"
<Type>BusinessMessage</Type>"Type" : "BusinessMessage"
<Transaction>CostCenter</Transaction>"Transaction" : "CostCenter"
<StandardVersion>1.000</StandardVersion>Sem equivalente na mensagem. A versão do padrão será designada na URL do endpoint /totvseai/standardmessage/v1.
<SourceApplication>P1299</SourceApplication>"SourceApplication" : "P1299"
<CompanyId>99</CompanyId>"CompanyId" : "99"
<BranchId>01</BranchId>"BranchId" : "01"
<UserId>admin<UserId>"UserId" : "admin"
<Enterprise></Enterprise>Não será utilizado no formato REST/JSON
<BusinessUnit></BusinessUnit>Não será utilizado no formato REST/JSON.
<CompanySharingMode>C</CompanySharingMode>"CompanySharingMode" : "C"
<BusinessUnitSharingMode>C</BusinessUnitSharingMode>"BusinessUnitSharingMode" : "C"
<BranchSharingMode>E</BranchSharingMode>"BranchSharingMode" : "E"
<Product name="PROTHEUS" version="12.1.17" />

"ProductName" : "PROTHEUS"

"ProductVersion" : "12.1.17"

<GeneratedOn>2017-11-15T12:00:30-02:00</GeneratedOn>"GeneratedOn" : "2017-11-15T12:00:30-02:00"
<DeliveryType>async</DeliveryType>"DeliveryType" : "async"
Outras tags e suas equivalências no modelo REST/JSON
BusinessMessage/BusinessEvent

Atributo "SubType" do Header, com valor igual a "event".

Ex: "SubType" : "event".

BusinessMessage/BusinessEvent/EntityUtilizar o atributo "Transaction" do Header.
BusinessMessage/BusinessEvent/EventUtilizar o atributo "Event" do Header.
BusinessMessage/BusinessEvent/IdentificationNão será utilizado no formato REST/JSON. Foi substituído pelos internal Ids informados no conteúdo da mensagem.
BusinessMessage/BusinessRequest

Atributo "SubType" do Header com valor igual a "request".

Ex: "subType" : "request".

BusinessMessage/BusinessRequest/OperationUsar o atributo "Transaction" do Header.
BusinessMessage/BusinessContentAtributo "Content". Todas as tags do XML correspondentes a BusinessContent devem ser convertidas em atributos JSON, sem qualquer modificação.
ResponseMessage/ReceivedMessage e tags filhas.

Atributo "ReceivedMessage"´de Content. Os atributos filhos são equivalências diretas das tags filhas de <ReceivedMessage>.

"ReceivedMessage" : {
   "UUID" : "d6bbfa63-ca27-e2ac-0b14-101970f59a5b",
   "SentBy" : "P1299",
   "Event" : "upsert"
}

ResponseMessage/ProcessingInformation

Atributo "ProcessingInformation" do Content, quando a mensagem for do tipo "Response". As tags <ProcessedOn> e <Status> tem os atributos equivalentes "ProcessedOn" e "Status".

"ProcessingInformation" : {
   "ProcessedOn" : "2017-11-14T11:47:15-03:00",
   "Status" : "ERROR",
   "Details" : [{
      "Code" : "FE001",
      "Message" : "Mensagem padrão no formato incorreto.",
      "DetailedMessage" : ""
   },{
      "Code" : "AE004",
      "Message" : "Empresa não configurada para integração.",
      "DetailedMessage" : ""
   }]
}

ResponseMessage/ProcessingInformation/ListOfMessagesAtributo "Details" do ProcessingInformation.
ResponseMessage/ReturnContentAtributo "ReturnContent". Todas as tags XML devem ser convertidas em atributos JSON.
ReceiptMessage

A ReceiptMessage seguirá a mesma estrutura do XML, convertendo assim para JSON e atribuindo à propriedade "Content"

EX:

ReceiptMessage
{
  "Header": {
    ...
  },
  "Content": {
    "ReceiptData": {
      "ReceivedOn": "2019-02-11T17:59:10Z"
    },
    "ReceivedMessage": {
      "UUID": "2ea5381f-e317-6d6f-ba3b-9445b4763798",
      "SentBy": "Test"
    }
  }
}

Obs.: A propriedade "MessageContent" não deve ser serializada para Json, visando economia no tráfego de rede.


Padrão de arrays "ListOf___"

Listas de objetos no padrão "ListOf" como o exemplo abaixo:

ListOfItems
<BusinessContent>
	<ListOfItems>
		<Item>
			<InternalId>01|010101|11</InternalId>
			<Code>11</Code>
			<Name>Sinal</Name>
			<Value>11836.05</Value>
		</Item>
		<Item>
			<InternalId>01|010101|24</InternalId>
			<Code>24</Code>
			<Name>Encargo Financiamento</Name>
			<Value>12.00</Value>
		</Item>
		<Item>
			<InternalId>01|010101|23</InternalId>
			<Code>23</Code>
			<Name>Desconto de Parcela</Name>
			<Value>12.22</Value>
		</Item>
	</ListOfItems>
</BusinessContent>

O padrão "ListOf" considera que a tag "ListOf___" é o array e, seguindo o padrão da notação JSon, terá internamente aos colchetes a lista de objetos separados por virgula, conforme exemplo abaixo.

ListOfItems
{
   "ListOfItems": [
      {
         "InternalId": "01|010101|11",
         "Code": "11",
         "Name": "Sinal",
         "Value": 11836.05
      },
      {
         "InternalId": "01|010101|24",
         "Code": "24",
         "Name": "Encargo Financiamento",
         "Value": 12.00
      },
      {
         "InternalId": "01|010101|23",
         "Code": "23",
         "Name": "Desconto de Parcela",
         "Value": 12.22
      }
   ]
}



  • Sem rótulos