Versões comparadas

Chave

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

Definições gerais

Endpoint padrão: /totvseai/standardmessage/v1.

...

  • /transactions: para receber mensagens através do engine de EAI. Ex: POST /totvseai/standardmessage/v1/transactions/customervendor_1_000.
  • /contents: para receber e recuperar mensagens de forma direta, sem passar pelo engine do EAI. O que interessa é apenas o conteúdo trafegado. Ex: GET /totvseai/standardmessage/v1/contents/customervendor_1_000. Para dar suporte ao /contents, os frames de EAI devem prover um mecanismo semelhante ao dos adapters, mas sem controle de fila. Alguns ERPs já dispõem de mecanismos para chamar programas de negócio.

Endpoint /transactions

Submeter mensagens em lote

...

POST /totvseai/standardmessage/v1/transactions?batchType={batchType}

Onde Query parameter batchType indica o tipo de lote sendo enviado

  • 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. Se houver transações distintas num simpleBatch, deve ser gerado erro;
  • 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.

  • O lote pode conter mensagens de uma mesma transação e versão.

Requisições em lote serão apenas assíncronas. 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
languagejs
titleLote de mensagens - batchType = simpleBatch
POST /totvseai/standardmessage/v1/transactions	// batchType = simpleBatch é implícito

{
    "items" : [
		{
            "header" : {
                "UUID" : "",
                "type" : "BusinessMessage",
                "subType" : "event",
                "transaction" : "customerVendor",
                "version" : "2.001",
                "sourceApplication": "",
                "productName" : "",
                "productVersion" : "",
                "generatedOn" : "",
                "deliveryType" : "async",
            },
            "content" : {
                "atributo1" : "",
                "atributo2" : "",
                ...
                "atributoN" : ""
            }
        },{
            "header" : {
                "UUID" : "",
                ...
                "transaction" : "customerVendor",
                "version" : "2.001",
                ...
                "deliveryType" : "async" 
            },
            "content" : {
                "atributo1" : "",
                "atributo2" : "",
                ...
                "atributoN" : ""
            }
        }
    ]
}



Bloco de código
languagejs
titleLote de mensagens - batchType = businessTransaction
Bloco de código
languagejs
POST /totvseai/standardmessage/v1/transactions?batchType=businessTransaction

{
    "items" : [
		{
            "header" : {
                "UUID" : "",
                "type" : "BusinessMessage",
                "subType" : "event|request",
                "transaction" : "customerVendor",
                "version" : "2.001",
                "sourceApplication": "",
                "productName" : "",
                "productVersion" : "",
                "generatedOn" : "",
                "deliveryType" : "async",
            },
            "content" : {
                "atributo1" : "",
                "atributo2" : "",
                ...
                "atributoN" : ""
            }
        },{
            "header" : {
                "UUID" : "",
                ...
                "transaction" : "item",
                "version" : "3.001",
                ...
                "deliveryType" : "sync" // Rejeitar toda a requisição e informar que só aceita assíncrono
            },
            "content" : {
                "atributo1" : "",
                "atributo2" : "",
                ...
                "atributoN" : ""
            }
        }
    ]
}

Submeter mensagens em lote - mesma transação

...


Submeter mensagens em lote - mesma transação e versão

Será usado o endpoint anterior. Caso não se queira o header, utilizar o endpoint /contents.

Submeter uma mensagem, sem header

Não será possível pelo endpoint /transactions. O endpoint /contents existe para esta finalidade.

Submeter uma mensagem, com header

Se for informado o batchType, ignorar.

Bloco de código
languagejs
POST /totvseai/standardmessage/v1/transactions/

{
    "header" : {
        "UUID" : "",
        "type" : "BusinessMessage",
        "subType" : "event|request",
        "transaction" : "customerVendor",
        "version" : "2.001",
        "sourceApplication": "",
        "productName" : "",
        "productVersion" : "",
        "companyId" : "",
        "branchId" : "",
        "generatedOn" : "",
        "deliveryType" : "async",
    },
    "content" : {
        "atributo1" : "",
        "atributo2" : "",
        ...
        "atributoN" : ""
    }
}

Eliminar uma mensagem, com header

Justificando a presença de corpo na requisição de DELETE, é necessário identificar se a transação é síncrona ou não. Sem o corpo, todas as informações teriam que ser colocadas na URL da requisição.

Bloco de código
languagejs
DELETE /totvseai/standardmessage/v1/transactions/
{
	"header" : {
    	"UUID" : "",
        "type" : "BusinessMessage",
        "subType" : "event|request",
        "transaction" : "customerVendor",
        "version" : "2.001",
        "sourceApplication": "",
        "productName" : "",
        "productVersion" : "",
        "companyId" : "",
        "branchId" : "",
        "generatedOn" : "",
        "deliveryType" : "async",
    },
    "content" : {
        "atributo1" : "",
        "atributo2" : "",
        ...
        "atributoN" : ""
    }
}

Eliminar um lote de mensagens, com headers

Bloco de código
languagejs
DELETE /totvseai/standardmessage/v1/transactions

{
    "items" : [
        {
            "header" : {
                "UUID" : "",
                "type" : "BusinessMessage",
                "subType" : "event|request",
                "transaction" : "customerVendor",
                "version" : "2.001",
                "sourceApplication": "",
                "productName" : "",
                "productVersion" : "",
                "generatedOn" : "",
                "deliveryType" : "async",
            },
            "content" : {
                "atributo1" : "",
                "atributo2" : "",
                ...
                "atributoN" : ""
            }
        },
        {
            "header" : {
                "UUID" : "",
                "type" : "BusinessMessage",
                "subType" : "event|request",
                "transaction" : "customerVendor",
                "version" : "2.001",
                "sourceApplication": "",
                "productName" : "",
                "productVersion" : "",
                "generatedOn" : "",
                "deliveryType" : "async",
            },
            "content" : {
                "atributo1" : "",
                "atributo2" : "",
                ...
                "atributoN" : ""
            }
        }
    ]
}

Formato de mensagem de resposta

O JSON equivalente a Response Message será:

Bloco de código
languagejs
{
    "header" : {
        "UUID" : "",
        "type" : "Response",
        "subType" : "",
        "transaction" : "",
        "version" : "",
        "sourceApplication" : "",
        "productName" : "",
        "productVersion" : "",
        "generatedOn" : "",
        "deliveryType": ""
    },
    "content" : {
        "receivedMessage" : {
            "UUID" : "<originalMsgUUID>",
            "SentBy" : "<sourceApplication>",
            "event" : "upsert|delete"        
        },
        "processingInformation" : {
            "processedOn" : "",
            "status" : "OK|ERROR|WARNING",
            "details" : [
                {
                    "code" : "",
                    "message" : "",
                    "detailedMessage" : "",
                    "helpUrl" : "http://<serverName>"  // Opcional
                },
                {
                    "code" : "",
                    "message" : "",
                    "detailedMessage" : "",
                    "helpUrl" : "http://<serverName>"  // Opcional
				}
            ]
        },
        "returnContent" : {
            "atributo1" : "",
            "atributo2" : "",
            "listOfInternalID" : [   // Opcional em caso de resposta de requests
                {
                    "name" : "InternalIdName",
                    "origin" : "",
                    "destination" : ""
                },
                {
                    "name" : "InternalIdName",
                    "origin" : "",
                    "destination" : ""
                }
            ]
        }
    }
}

Endpoint /contents

As requisições deste endpoint são exclusivamente síncronas.

Recuperar um lote de mensagens

O header não é necessário, só o conteúdo.

Bloco de código
languagejs
// Permitir também os filtros por atributo
GET /totvseai/standardmessage/v1/contents/customervendor_1_000?page={page}&pageSize={pageSize}&order={campos}

{
    "hasNext" :  "true",
    "items" : [
        {
            "atributo1" : "",
            "atributo2" : ""
        },
        {
            "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.

...

Bloco de código
languagejs
// Todas as possibilidades de filtro e ordenação do Guia são aplicáveis.
GET /totvseai/standardmessage/v1/contents/customervendor_1_000/{internalID}

{
    "atributo1" : "valor1",
    "atributo2" : "valor2"
}

Submeter uma entidade

Para transações do tipo event, representa a criação de um registro.

...

Bloco de código
languagejs
POST /totvseai/standardmessage/v1/contents/updateContractParcel_2_001/

{
    "atributo1" : "valor1",
    "atributo2" : "valor2"
}

Submeter um lote de entidades

Bloco de código
languagejs
POST /totvseai/standardmessage/v1/contents/customervendor_1_000/

{
    "items" : [
        {
            "atributo1" : "valorA1",
            "atributo2" : "valorA2"
        },
        {
            "atributo1" : "valorB1",
            "atributo2" : "valorB2"
        }
    ]
}

Alterar uma entidade


Bloco de código
languagejs
PUT /totvseai/standardmessage/v1/contents/customervendor_1_000/{internalID}

{

	"atributo1" : "valorA1",
	"atributo2" : "valorA2"

}

Eliminar uma entidade

Bloco de código
languagejs
DELETE /totvseai/standardmessage/v1/contents/customervendor_1_000/{internalID}

//Não necessita de corpo

Eliminar um lote de entidades

Não é possível, pois necessita dos internalIds.

...