Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Comentário: Alteração dos atributos para seguir o padrão "UpperCamelCase".

...

A mensagem padronizada, utilizando JSON como formato, será composta dos seguintes elementos:

headerHeader: contem informações equivalentes a tag MessageInformation, do formato XML. Os atributos JSON correspondentes seguem as mesmas convenções de obrigatoriedade do padrão original. As tags que não estão descritas aqui, a principio, não serão utilizadas.

  • UUID: mesma definição da tag UUID;
  • typeType: mesma definição da tag Type, exceto que não haverá mensagens do tipo Receipt no formato JSON;
  • subTypeSubType: tem objetivo similar às tags BusinessEvent e BusinessRequest. Os valores esperados para o atributo subType são event e request;
  • transactionTransaction: mesma definição da tag Transaction;
  • versionVersion: corresponde ao atributo version da tag MessageInformation, ou seja, indica a versão da transação;
  • sourceApplicationSourceApplication: mesma definição da tag SourceApplication;
  • productNameProductName: corresponde ao atributo name da tag Product: indica o nome do produto origem da mensagem (PROTHEUS, DATASUL, RM, LOGIX, etc.);
  • productVersionProductVersion: corresponde ao atributo version da tag Product: indica a versão do produto origem;
  • generatedOnGeneratedOn: mesma definição da tag GeneratedOn;
  • deliveryTypeDeliveryType: mesma definição da tag DeliveryType.

contentContent: contem informações equivalentes a tag BusinessContent, para mensagens de negócio, ou a tag ReturnContent, para mensagens de resposta. Devido a isso, os atributos podem variar de acordo com a definição da transação. Quando a mensagem for de resposta, o atributo content terá ainda os seguintes atributos:

  • receivedMessageReceivedMessage: equivalente à tag ReceivedMessage, da mensagem de resposta no padrão SOAP, exceto pela tag filha MessageContent, que não será mais utilizada;
  • processingInformationProcessingInformation: equivalente à tag ProcessingInformation, do padrão SOAP, exceto pela tag filha ListOfMessages, que foi substituída pelo atributo detailsDetails, que por sua vez, conterá 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.
  • returnContentReturnContent: conterá o resultado do processamento da mensagem original, conforme definido para a transação. Além disso, pode conter também o atributo listOfInternalIdListOfInternalId, onde constará todos os internal IDs relacionados a mensagem. A estrutura correspondente ao internal ID terá os seguintes atributos:
    • nameName: mesma definição da tag do padrão SOAP Name;
    • originOrigin: mesma definição da tag Origin;
    • destinationDestination: mesma definição da tag Destination.

...

Bloco de código
languagejs
{
    "headerHeader" : {
        "UUID" : "d6bbfa63-ca27-e2ac-0b14-101970f59a5b",
        "typeType" : "BusinessMessage",
        "subTypeSubType" : "event",
        "transactionTransaction" : "CostCenter",
        "versionVersion" : "2.000",
        "sourceApplicationSourceApplication": "P1299",
        "productNameProductName" : "PROTHEUS",
        "productVersionProductVersion" : "12.1.17",
        "companyIdCompanyId" : "99",
        "branchIdBranchId" : "01",
        "generatedOnGeneratedOn" : "2017-11-14T11:47:00-03:00",
        "deliveryTypeDeliveryType" : "async",
    },
    "contentContent" : {
        "CompanyId" : "99",
        "BranchId" : "01",
		"CompanyInternalId" : "99",
		"Code" : "ABC001",
		"InternalId" : "99|ABC001",
		"RegisterSituation" : "Active",
        "Name" : "Centro de Custo ABC001",
		"ShortCode" : "ABC001",
		"SPED" : true,
		"Class" : 2
    }
}

...

Bloco de código
languagejs
{
    "headerHeader" : {
        "UUID" : "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6",
        "typeType" : "Response",
        "subTypeSubType" : "event",
        "transactionTransaction" : "CostCenter",
        "versionVersion" : "2.000",
        "sourceApplicationSourceApplication" : "LGX12",
        "productNameProductName" : "LOGIX",
        "productVersionProductVersion" : "12.1.15",
        "generatedOnGeneratedOn" : "2017-11-14T11:47:15-03:00",
        "deliveryTypeDeliveryType": "async"
    },
    "contentContent" : {
        "receivedMessageReceivedMessage" : {
            "UUID" : "d6bbfa63-ca27-e2ac-0b14-101970f59a5b",
            "sentBySentBy" : "P1299",
            "eventEvent" : "upsert"        
        },
        "processingInformationProcessingInformation" : {
            "processedOnProcessedOn" : "2017-11-14T11:47:15-03:00",
            "statusStatus" : "ERROR",
            "detailsDetails" : [
                {
                    "codeCode" : "FE001",
                    "messageMessage" : "Mensagem padrão no formato incorreto.",
                    "detailedMessageDetailedMessage" : ""
                },
                {
                    "codeCode" : "AE004",
                    "messageMessage" : "Empresa não configurada para integração.",
                    "detailedMessageDetailedMessage" : ""
                }
            ]
        },
        "returnContentReturnContent" : {            
            "listOfInternalIDListOfInternalID" : [
                {
                    "nameName" : "CostCenter",
                    "originOrigin" : "99|ABC001",
                    "destinationDestination" : "10|1000"
                },
                {
                    "nameName" : "Company",
                    "originOrigin" : "99",
                    "destinationDestination" : "10"
                }
            ]
        }
    }
}


O padrão REST/JSON fornece também um modelo para lote de mensagens, onde as mensagens são agrupadas em um array JSON, de nome items.

Bloco de código
languagejs
{
    "itemsItems" : [
        {
            "headerHeader" : {
                "UUID" : "",
                "typeType" : "",
                "subTypeSubType" : "",
                "transactionTransaction" : "customerVendor",
                "versionVersion" : "2.001",
                "sourceApplicationSourceApplication": "",
                "productNameProductName" : "",
                "productVersionProductVersion" : "",
                "generatedOnGeneratedOn" : "",
                "deliveryTypeDeliveryType" : "async",
            },
            "contentContent" : {
                "atributo1Atributo1" : "",
                "atributo2Atributo2" : "",
                ...
                "atributoNAtributoN" : ""
            }
        },{
            "headerHeader" : {
                "UUID" : "",
                ...
                "transactionTransaction" : "item",
                "versionVersion" : "3.001",
                ...
                "deliveryTypeDeliveryType" : "async" 
            },
            "contentContent" : {
                "atributo1Atributo1" : "",
                "atributo2Atributo2" : "",
                ...
                "atributoNAtributoN" : ""
            }
        }
    ]
}

O uso do formato de lote de mensagens tem algumas considerações importantes:

  • É válido somente para mensagens assíncronas. Caso uma das mensagens presentes no lote tenha o atributo DeliveryType igual a "sync", todo o lote deve ser rejeitado.
  • Pode conter mensagens de uma mesma transação e versão, ou mensagens de transações/versões distintas.
  • Um lote pode ser tratado como um simples agrupador de mensagens sem relação entre si, ou um lote transacional, onde as mensagens são interdependentes, representando uma única transação de negócio. Veja a descrição do parâmetro batchType, do predicado /transactions na seção a seguir, para mais informações.
  • Geração e envio do UUID pela origem é obrigatorioobrigatória. Veja a descrição do parâmetro batchUUID, do predicado /transactions na seção a seguir, para mais informações.

...

O desenho de uma transação, no formato REST/JSON, deve utilizar o formato Swagger/OpenAPI, em substituição ao formato XML Schema, utilizado na implementação originalSOAP/XML. Para mais informações sobre como implementar um documento Swagger, consulte a especificação própria do padrão.