Neste documento são demonstradas as formas de utilização dos endpoints de mensagem padronizada do padrão REST/JSON.
Endpoint /transactionsSubmeter mensagens de inclusão/alteração em lote
POST
Definições gerais
Endpoint padrão: /totvseai/standardmessage/v1.
Predicados:
...
/totvseai/standardmessage/v1/transactions
...
?batchType={batchType}&batchUUID={batchUUID}
Onde:
- batchType indica o tipo de lote sendo enviado. Os valores possíveis são:
- simpleBatch: Este é o tipo default, quando o parâmetro não for informado, e indica que as transações podem ser processadas individualmente. Eventuais erros não comprometem as demais;
- businessTransaction: indica que as transações dentro do lote devem ser processadas de forma atômica: ou processa tudo ou não aceita nenhuma. O lote pode conter mensagens de uma mesma transação e versão.
- batchUUID: UUID gerado pela origem que será a referencia do lote. Esta informação é obrigatória quando for lote, mesmo o batchType sendo implícito.
Requisições em lote serão apenas assíncronas
Endpoint /transactions
Submeter mensagens em lote - transações diversas
Query parameter batchType indica o tipo de lote sendo enviado.
- businessTransaction: indica que as transações dentro do lote devem ser processadas de forma atômica: ou processa tudo ou não aceita nenhuma.
- simpleBatch: indica que as transações podem ser processadas individualmente. Eventuais erros não comprometem as demais. Este é o tipo default, quando o parâmetro não for informado. Se houver transações distintas num simpleBatch, deve ser gerado erro.
Requisições em lote serão apenas assíncronas, quando passarem pela Engine do EAI. Do contrário, pode acontecer timeout, prejudicando a integração. Por este motivo, se houver uma mensagem como modo de envio (deliveryType) igual a "sync", todo o lote deve ser rejeitado.
Bloco de código |
---|
language | js |
---|
title | Lote de mensagens - simpleBatch |
---|
|
Bloco de código |
---|
|
POST /totvseai/standardmessage/v1/transactions?batchUUID=f0b3695c-1efc-49f2-84a7-1eeb59c5a962 // batchType=businessTransaction = simpleBatch é implícito
{
"itemsItems" : [
{
"headerHeader" : {
"UUID" : "",
"typeType" : "BusinessMessage",
"subTypeSubType" : "event|request",
"transactionTransaction" : "customerVendor",
"versionVersion" : "2.001",
"sourceApplicationSourceApplication": "",
"productNameProductName" : "",
"productVersionProductVersion" : "",
"generatedOnGeneratedOn" : "",
"deliveryTypeDeliveryType" : "async",
},
"contentContent" : {
"atributo1Atributo1" : "",
"atributo2Atributo2" : "",
...
"atributoNAtributoN" : ""
}
},{
"headerHeader" : {
"UUID" : "",
...
"transactionTransaction" : "itemcustomerVendor",
"versionVersion" : "32.001",
...
"deliveryTypeDeliveryType" : "syncasync" // Rejeitar toda a requisição e informar que só aceita assíncrono
},
"contentContent" : {
"atributo1Atributo1" : "",
"atributo2Atributo2" : "",
...
"atributoNAtributoN" : ""
}
}
]
} |
Submeter mensagens em lote - mesma transação
Esta proposta apresenta uma situação relevante: Um único UUID de mensagem será usado para cada uma das mensagens presentes em "content"???
Neste modelo, seria aceito o batchType businessTransaction ou seria somente simpleBatch???
Bloco de código |
---|
language | js |
---|
title | Lote de mensagens - businessTransaction |
---|
|
Bloco de código |
---|
|
POST /totvseai/standardmessage/v1/transactions?batchType=simpleBatch
{
businessTransaction&batchUUID=f0b3695c-1efc-49f2-84a7-1eeb59c5a962
{
"headerItems" : [
{
"UUIDHeader" : "",{
"type "UUID" : "BusinessMessage",
"subType "Type" : "event|requestBusinessMessage",
"transaction" : "customerVendor",
"versionSubType" : "2.001event",
"sourceApplication": "",
"productNameTransaction" : "customerVendor",
"productVersion" : "",
"generatedOnVersion" : "2.001",
"deliveryType" : "async",
},
"contentSourceApplication" : {
"",
"items" : [
"ProductName" : {"",
"atributo1ProductVersion" : "valorA1",
"atributo2GeneratedOn" : "valorA2",
...
"atributoN"DeliveryType" : "valorANasync",
},
"Content" : {
"atributo1Atributo1" : "valorB1",
"atributo2Atributo2" : "valorB2",
...
"atributoNAtributoN" : "valorBN"
}
]
},{
}
} |
Submeter mensagens em lote - mesma transação e versão
Neste modelo, que preve a passagem pelo engine do EAI, não temos os UUIDs das mensagens. Como rastreá-las???
O batchType poderia ser businessTransaction ou simpleBatch, a principio.
Bloco de código |
---|
|
POST /totvseai/standardmessage/v1/transactions/customervendor_1_000?batchType=simpleBatch|businessTransaction
{
"items" : [
"Header" : {
"UUID" : "",
...
"Transaction" : {"item",
"atributo1 "Version" : "valorA13.001",
"atributo2" : "valorA2", ...
...
"DeliveryType" : "sync" // Rejeitar toda a requisição "atributoN"e : "valorAN"
informar que só aceita assíncrono
},
{},
"atributo1Content" : "valorB1",{
"atributo2 "Atributo1" : "",
"Atributo2" : "valorB2",
...
"atributoNAtributoN" : "valorBN""
}
}
]
} |
Submeter uma
...
única mensagem de inclusão/alteração
POST /totvseai/standardmessage/v1/transactions
Os parâmetros batchType e batchUUID não são relevantes para esta situação. Logo, se forem informados, devem ser ignorados
E o UUID? Onde estaria?
Tratar como síncrono ou assíncrono?
Tratar como event ou request.
Bloco de código |
---|
|
POST /totvseai/standardmessage/v1/transactions/customervendor_1_000/
{
"atributo1Header" : "",{
"atributo2UUID" : "",
...
"atributoNType" : "BusinessMessage"
} |
Se for informado o batchType, ignorar.
Bloco de código |
---|
|
POST /totvseai/standardmessage/v1/transactions/
{
,
"headerSubType" : {"event",
"UUIDTransaction" : "customerVendor",
"typeVersion" : "BusinessMessage2.001",
"subTypeSourceApplication" : "event|request",
"transactionProductName" : "customerVendor",
"versionProductVersion" : "2.001",
"sourceApplication": "",
"productName" CompanyId" : "",
"productVersionBranchId" : "",
"generatedOnGeneratedOn" : "",
"deliveryTypeDeliveryType" : "asyncsync",
},
"contentContent" : {
"atributo1Atributo1" : "",
"atributo2Atributo2" : "",
...
"atributoNAtributoN" : ""
}
} |
...
Submeter uma mensagem de eliminação
DELETE /totvseai/standardmessage/v1/transactions/
Bloco de código |
---|
|
DELETE /totvseai/standardmessage/v1/transactions
/
{
"Header" "header" : : {
"UUID" : "",
"typeType" : "BusinessMessage",
"subTypeSubType" : "event|request",
"transactionTransaction" : "customerVendor",
"versionVersion" : "2.001",
"sourceApplicationSourceApplication": "",
"productNameProductName" : "",
"productVersionProductVersion" : "",
"generatedOnCompanyId" : "",
"deliveryTypeBranchId" : "async",
},
"contentGeneratedOn" : {"",
"atributo1DeliveryType" : "sync",
},
"atributo2Content" : "",{
..."Atributo1" : "",
"atributoNAtributo2" : ""
}
} |
...
...
Bloco de código |
---|
|
DELETE /totvseai/standardmessage/v1/transactions
{
"items" : [
{...
"headerAtributoN" : {""
}
}
|
Submeter um lote de mensagens de eliminação
DELETE /totvseai/standardmessage/v1/transactions?batchType={batchType}?batchUUID={batchUUID}
A eliminação em lote utiliza o mesmo endpoint, variando apenas o corpo, onde as mensagens a eliminar estarão dentro de um array JSON. Somente mensagens assíncronas serão aceitas.
O endpoint aceita os parâmetros batchType e batchUUID, e o comportamento será o mesmo descrito para quando um lote de mensagens é submetido. Se o parâmetro batchType for omitido, deve-se assumir o valor "simpleBatch".
Bloco de código |
---|
|
DELETE /totvseai/standardmessage/v1/transactions?batchUUID=f0b3695c-1efc-49f2-84a7-1eeb59c5a962
{
"Items" : [
{
"UUID" : "",
"type" : "BusinessMessage",
"subType" : "event|request",
"transaction" : "customerVendor",
"versionHeader" : "2.001",{
"sourceApplicationUUID" : "",
"productNameType" : "BusinessMessage",
"productVersionSubType" : "event",
"generatedOnTransaction" : "customerVendor",
"deliveryTypeVersion" : "async2.001",
},
"content" : {"SourceApplication": "",
"atributo1ProductName" : "",
"atributo2ProductVersion" : "",
..."GeneratedOn" : "",
"atributoNDeliveryType" : "async",
},
},
"Content" : {
{
"headerAtributo1" : {"",
"UUIDAtributo2" : "",
"type" : "BusinessMessage",...
"subTypeAtributoN" : "event|request",
}
"transaction" : "customerVendor"},
{
"versionHeader" : "2.001",{
"sourceApplicationUUID" : "",
"productNameType" : "BusinessMessage",
"productVersionSubType" : "event",
"generatedOnTransaction" : "customerVendor",
"deliveryTypeVersion" : "async2.001",
},
"content" : {"SourceApplication": "",
"atributo1ProductName" : "",
"atributo2ProductVersion" : "",
"GeneratedOn" ...: "",
"atributoNDeliveryType" : "async",
},
}
"Content" : {
]
}
|
Endpoint /contents
Recuperar um lote de mensagens
O header não é necessário, só o conteúdo.
Bloco de código |
---|
|
GET /totvseai/standardmessage/v1/contents/customervendor_1_000/
{
"Atributo1" : "",
"hasNextAtributo2" : "true",
"items" : [
{...
"atributo1" : "",
"atributo2"AtributoN" : ""
},
{
}
"atributo1" : "",
}
"atributo2" : ""
}
]
} |
Recuperar uma entidade, informando o internalID
O termo entidade está sendo usado no lugar de mensagem, porque neste endpoint (e nos demais) não haverá os controles que são feitos no endpoint /transactions. Uma mensagem implica em um remetente, um destinatário e um conteúdo. Neste caso, temos explicito apenas o conteúdo, correspondente a uma entidade no destino, que é identificada pelo internalID.
Importante: ao utilizar InternalID (da maneira convencional) estamos assumindo a existência de um de-para.
Bloco de código |
---|
|
GET /totvseai/standardmessage/v1/contents/customervendor_1_000/{internalID}
{
"atributo1" : "valor1",
"atributo2" : "valor2"
} |
Submeter uma entidade
Bloco de código |
---|
|
POST /totvseai/standardmessage/v1/contents/customervendor_1_000/
{
"atributo1" : "valor1",
"atributo2" : "valor2"
}
|
Submeter um lote de entidades
Entender mensagem de Erro
Entende-se como ERRO quando transmissão e entendimento da mensagem foram realizados com sucesso, porém alguma regra de negócio no ERP receptor não foi cumprida.
O status HTTP retornado é 200, e a mensagem de resposta encontra-se no seguinte formato:
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" : "ERROR",
"Details" : [
{
"Code" : "FE001",
"Message" : "Mensagem padrão no formato incorreto.",
"DetailedMessage" : "",
"HelpUrl": "http://tdn.totvs.com"
},
{
"Code" : "AE004",
"Message" : "Empresa não configurada para integração.",
"DetailedMessage" : "",
"HelpUrl": "http://tdn.totvs.com"
}
]
},
"ReturnContent" : {
"ListOfInternalID" : [
{
"Name" : "CostCenter",
"Origin" : "99|ABC001",
"Destination" : "10|1000"
|
Bloco de código |
---|
|
POST /totvseai/standardmessage/v1/contents/customervendor_1_000/
{
"items" : [
{},
"atributo1" : "valorA1",
{
"atributo2" : "valorA2"
"Name" : }"Company",
{
"atributo1Origin" : "valorB199",
"atributo2Destination" : "valorB210"
}
]
}
|
Proposta para eliminar uma entidade
Bloco de código |
---|
|
DELETE /totvseai/standardmessage/v1/contents/customervendor_1_000/{internalID}
{
}
"atributo1" : "",
]
"atributo2" : ""
}
}
} |
Proposta para eliminar um lote de entidades
Os internalID devem estar nos elementos do array "items"???
Entender mensagem de Falha
Entende-se como FALHA quando transmissão e entendimento da mensagem não puderam ser realizados.
Isso pode ocorrer devido aos seguintes motivos:
- Configuração do EAI está incorreta ou incompleta
- Estrutura da mensagem recebida está incorreta ou incompleta
O status HTTP retornado é 500, e a mensagem de resposta encontra-se no seguinte formato:
Bloco de código |
---|
|
{
|
Bloco de código |
---|
|
DELETE /totvseai/standardmessage/v1/contents/customervendor_1_000
{
"items" : [
{
"atributo1Code" : "FE001",
"atributo2Message" : ""
},
{
"atributo1Mensagem padrão no formato incorreto.",
"DetailedMessage" : "",
"atributo2HelpUrl" : "http://tdn.totvs.com"
}
]
} |