...
Deck of Cards |
---|
effectDuration | 0.5 |
---|
history | false |
---|
id | samples |
---|
effectType | fade |
---|
|
Deck of Cards |
---|
|
|
Card |
---|
|
01.CONCEITO
A integração via APIs REST permite a comunicação eficiente e escalável entre diferentes sistemas ou aplicativos, utilizando métodos HTTP padrão como GET, POST, PUT e DELETE. Essas APIs seguem o padrão REST, facilitando o compartilhamento de dados e funcionalidades entre os sistemas.
Cada método HTTP tem um propósito específico:
- GET: Utilizado para consultar dados no servidor sem modificar nada, como, por exemplo, uma consulta de cadastro.
- POST: Utilizado para enviar dados ao servidor para serem processados ou armazenados, como, por exemplo, a inclusão de um cadastro.
- PUT: Utilizado para atualizar dados no servidor, como, por exemplo, a alteração de um cadastro.
- DELETE: Utilizado para remover dados do servidor, como, por exemplo, a exclusão de um cadastro.
Informações |
---|
|
Por padrão, para consultar um determinado dado do servidor através do método GET, é necessário informar a chave primária (PK) do registro do modelo, codificada em base64. Caso contrário, se a chave primária não for informada, os registros serão retornados conforme a paginação padrão. Exemplo: "RCBNRyAwMSBEIE1HIDAxIDAwMDAwMDAwMDAwMDAwMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA==" - representa a chave primária do registro da tabela da rotina em base64 http://localhost:8085/rest/FwModel/TAFA053/RCBNRyAwMSBEIE1HIDAxIDAwMDAwMDAwMDAwMDAwMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== Para atualizar um determinado dado do servidor através do método PUT, é necessário informar a chave primária (PK) do registro do modelo, codificada em base64. Nesse caso, a chave primária é obrigatória para realizar a alteração; caso contrário, a operação será entendida como uma inclusão de novo registro. Para excluir um determinado dado do servidor através do método DELETE, também é necessário informar a chave primária (PK) do registro do modelo, codificada em base64. Para incluir dados no servidor através do método POST em outras filiais, é importante o uso do tenantId no header da requisição. |
02. API REST DISPONÍVEIS
Após configurar o REST do Protheus, é possível verificar todas as APIs REST disponíveis seguindo os passos abaixo:
- Acesse o endereço configurado do REST. No exemplo, foi configurado como:
http://localhost:8080/rest
. - Procure pelo serviço FWMODEL.
- Clique em /rest/fwmodel.catalog.
Image Modified
Image Modified
Para consumir uma API REST disponível no módulo TAF (TOTVS Automação Fiscal), siga o formato abaixo:
Bloco de código |
---|
theme | RDark |
---|
title | API's disponíveis no módulo SIGATAF |
---|
|
http://localhost:8080/rest/FwModel/TAFA053
http://localhost:8080/rest/FwModel/TAFA057
http://localhost:8080/rest/FwModel/TAFA448
http://localhost:8080/rest/FwModel/TAFA535 |
Onde:
- http://localhost:8080/rest é o endereço configurado do REST.
- /FwModel é um segmento fixo indicando o framework.
- /TAFA053 é o nome da API disponível.
03.ESTRUTURA DE ENVIO
A estrutura do JSON de envio (body) não precisa ser informada na requisição para os métodos GET e DELETE; basta consumir a API.
No entanto, para os métodos POST e PUT, o JSON deve ser enviado no seguinte formato básico:
Bloco de código |
---|
theme | RDark |
---|
title | JSON - Exemplo |
---|
|
{
"id": "TAFA057",
"operation": 1,
"models": [
{
"id": "MODEL_C1L",
"modeltype": "FIELDS",
"fields": [
{
"id": "C1L_FILIAL",
"order": 1,
"value": "D MG 01"
},
{
"id": "C1L_CODIGO",
"order": 3,
"value": "PRD12345"
},
{
"id": "C1L_DESCRI",
"order": 4,
"value": "PRD-VIA-POST"
},
{
"id": "C1L_UM",
"order": 6,
"value": "000084"
},
{
"id": "C1L_TIPITE",
"order": 8,
"value": "000010"
},
{
"id": "C1L_CODGEN",
"order": 12,
"value": "000102"
},
{
"id": "C1L_CODSER",
"order": 14,
"value": "000045"
},
{
"id": "C1L_ORIMER",
"order": 21,
"value": "000001"
},
{
"id": "C1L_ALQICM",
"order": 23,
"value": "18.00"
},
{
"id": "C1L_DTINCL",
"order": 26,
"value": "20221019"
},
{
"id": "C1L_SRVMUN",
"order": 29,
"value": "1402"
},
{
"id": "C1L_IDTSER",
"order": 48,
"value": "000016"
}
],
"models": [
{
"id": "MODEL_C1M",
"modeltype": "GRID",
"optional": 1,
"struct": [
{
"id": "C1M_FILIAL",
"order": 1
},
{
"id": "C1M_DTALT",
"order": 2
},
{
"id": "C1M_HRALT",
"order": 3
},
{
"id": "C1M_NRCAMP",
"order": 4
},
{
"id": "C1M_CTDANT",
"order": 6
}
],
"items": [
{
"id": 1,
"deleted": 0,
"fields": [
{
"id": "C1M_FILIAL",
"value": "D MG 01"
},
{
"id": "C1M_DTALT",
"value": "20240520"
},
{
"id": "C1M_HRALT",
"value": "1313"
},
{
"id": "C1M_NRCAMP",
"value": "000001"
},
{
"id": "C1M_CTDANT",
"value": "PRD12345"
}
]
}
]
}
]
}
]
} |
Estrutura Hierárquica
- id: é id da API
- models: são os modelos de negócios de cada API, que contém:
- id: é o modelo de dados definido no MVC
- modeltype: é tipo de modelo de dados, "FIELDS" ou "GRID"
- fields: é um vetor com os campos do modelo, que contém:
- id: é nome do campo
- order: é a ordem do campo
- value: é o valor do campo
- models: é um vetor com os submodelos do modelo de dados do MVC, que contém:
- id: é o submodelo de dados definido no MVC
- modeltype: é tipo de modelo de dados, "FIELDS" ou "GRID"
- struct: é um vetor definindo os campos do GRID, que contém:
- id: é nome do campo
- order: é a ordem do campo
- items: é um vetor definindo os itens do GRID, que contém:
- id: é um sequêncial do vetor dos itens
- fields: é um vetor com os campos e valores dos itens do GRID, que contém:
- id: é nome do campo
- value: é o valor do campo
A estrutura do JSON de resposta para os métodos GET (por chave primária - pk), POST e PUT é basicamente a seguinte:
Bloco de código |
---|
theme | RDark |
---|
title | JSON - Exemplo de resposta do GET[pk] |
---|
|
{
"id": "TAFA057",
"pk": "RCBNRyAwMSBEIE1HIDAxIDAwMDAwMDAwMDAwMDAwMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA==",
"models": []
} |
Onde a estrutua hierárquica é: :
- id: é id da API
- pk: chave primária de cada registro para realizar uma consulta específica GET[id], consumir o método put e delete
- models: são os modelos de negócios de cada API, ou seja, modelo de dados do MVC (FIELDS, GRID)
A estrutura do JSON de resposta para o método GET, sem especificar uma chave primária (pk), será conforme abaixo:
Bloco de código |
---|
theme | RDark |
---|
title | JSON - Exemplo de resposta do GET sem [pk] |
---|
|
{
"total": 142,
"count": 10,
"startindex": 1,
"resources": [{
"id": "TAFA057",
"pk": "RCBNRyAwMSBEIE1HIDAxIDAwMDAwMDAwMDAwMDAwMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA==",
"models": []
}, {
"id": "TAFA057",
"pk": "RCBNRyAwMSBEIE1HIDAxIDEyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA==",
"models": []
}
]
} |
Onde a estrutua hierárquica é:
- total: é o total de registros que existem no sistema
- count: é a quantidade de registros retornados na requisição
- startindex: é o contador inicial para realizar a paginação
- resources: são as informações dos modelos de dados da API, composto por:
- id: é id da API
- pk: chave primária de cada registro para realizar uma consulta específica, consumir o método PUT e DELETE
- models: são os modelos de negócios de cada API, ou seja, modelo de dados do MVC (FIELDS, GRID)
A estrutura do JSON de resposta para o método DELETE será da seguinte maneira:
Bloco de código |
---|
theme | RDark |
---|
title | JSON - Exemplo de resposta do POST |
---|
|
true |
A estrutura do JSON de resposta em caso de falha será da seguinte maneira:
Bloco de código |
---|
theme | RDark |
---|
title | JSON - Exemplo de resposta falha no POST |
---|
|
{
"errorCode": 400,
"errorMessage": "\r\n --- Erro no Modelo ---\r\nId submodelo origem:[MODEL_C1L]\r\nId campo origem:[C1L_CODIGO]\r\nId submodelo erro: [MODEL_C1L]\r\nId campo erro: [C1L_CODIGO]\r\nId erro:
[TAFJAGRAVADO]\r\nMensagem de erro: [ Esta chave de registro formada pelos campos obrigatórios já foi informada em outro momento neste mesmo cadastro.
Para manter a integridade da informação não poderá haver duplicidade no cadastro, portanto não será permitido salvar este registro.]
\r\nMensagem da solução: [Deverá ser alterada a chave de identificação única do registro composta pelos campos obrigatórios de forma a não coincidir com outros dados já gravados neste mesmo
cadastro.\r\n]\r\nValor atribuído: []\r\nValor anterior: [1234 ]\r\n"
}
{
"errorCode": 400,
"errorMessage": "\r\n --- Erro no Modelo ---\r\nId submodelo origem:[MODEL_C1L]\r\nId campo origem:[C1L_UM]\r\nId submodelo erro: [MODEL_C1L]\r\nId campo erro:
[C1L_UM]\r\nId erro: [C1L_UM ]\r\nMensagem de erro: [ Deve representar a Unidade de medida utilizada na quantificação de estoques, conforme determina o fisco no Convênio 31/99, no
Guia Prático EFD Fiscal e Contribuições.
\r\n\r\nA informação deste campo corresponde á um código de identificação conforme respectivo cadastro.]
\r\nMensagem da solução: [\r\n]\r\nValor atribuído: []\r\nValor anterior: [xxx ]\r\n"
} anchor |
Dica |
---|
abastsi | abastsi | Card |
---|
label | Configurações Iniciais Para Utilização |
---|
|
Card |
---|
label | Job de Execução Automática |
---|
|
Âncora |
---|
abastsi | abastsi | Card |
---|
|
Análise Técnica
Informações como a query que está sendo executada, ou até que ponto do algoritmo a integração está chegando, podem ser úteis no processo de implantação.
Como a execução do TSI é transparente, existe o uso da funcionalidade TAF Conout.
Se habilitada mensagens técnicas serão imprimidas no arquivo .../apppserver/CONSOLE.LOG
Para habilitar funcionalidade: TAFCONOUT=1 ( inserir na gereneral )
TSILOG00001 Inicio 13:34:25 Programa de execução de JOB invocado via Schedule com sucesso.
Indica sucesso no início do programa TSI() configurado no cadastro de Schedule
TSILOG00002 cSource: D MG 01
Indica sucesso na montagem da empresa e qual é a empresa a ser processada.
TSILOG00003 Função executada: HashUM()
Indica sucesso no carregamento das funções para execução de cada cadastros, podendo ser:
HashAddInf() //T001AK - Informações Complementares
HashPARTIC() //T003 - participante cliente ou fornecedor
HashUM() //T005 - unidade de medida
HashITEM() //T007 - produto
HashNature() //T009 - natureza da operação/TES
HashCNO() //T157 - Cadastro Nacional de Obras
HashNCM() //Auto-Contida
TSILOG00004 GetNames ok
Indica sucesso na execução de consulta e geração do objeto JSON. O próximo passo é a persistência da entidade ao TAF.
TSILOG00005 Query de busca do cadastro participantes (Cliente / Fornecedor) [ Início query TSILOG00001 09:06:2020 [ Sintaxe da query de busca de cliente e fornecedor ] [ Fim query TSILOG00001 09:07:2020 ]
TSILOG00006 Query de busca do cadastro de Unidade de Medida [ Início query TSILOG00002 09:08:2020 [ Sintaxe da query de busca de unidade de medida ] [ Fim query TSILOG00002 09:09:2020 ]
TSILOG00007 Update dos registros que sofrerão alteração fake [ Início update TSILOG00003 09:10:2020 ] [ Sintaxe da query de update dos cadastros que sofrerão a alteração fake ] [ Fim erro TSILOG00003 09:11:2020 ]
TSILOG00008 Erro de alteração fake [ Início erro TSILOG00004 09:12:2020 ] [ Detalhamento do erro de execução do update] [ Fim erro TSILOG00004 09:13:2020 ]
TSILOG00009 Query de busca do cadastro de Produto [ Início query TSILOG00005 09:14:2020 ] [ Sintaxe da query de busca dos cadastro de Produto ] [ Fim erro TSILOG00005 09:15:2020 ]
TSILOG000010 Query de busca do cadastro de Natureza da Operação [ Início query TSILOG00006 09:16:2020 ] [ Sintaxe da query de busca do cadastro de Natureza da Operação ] [ Fim query TSILOG00005 09:17:2020 ]
TSILOG000012 Query de busca do cadastro de NCM [ Início query TSILOG00012 09:16:2020 ] [ Sintaxe da query de busca do cadastro de NCM ] [ Fim query TSILOG00012 09:17:2020 ]
TSILOG000013 Função MVC executada: HashC2S()
Indica sucesso no carregamento das funções para execução de modelos com pai e filho (neto) ,podendo ser:
HashC2S() //Apuração icms
HashC3J() //Apuração icms-st
hashC5M() //CPRB
TSILOG000014 Query de busca do cadastro de apurações de ICMS [ Início query TSILOG00014 09:25:2020 ] [ Sintaxe da query de busca do cadastro de apurações de ICMS] [ Fim query TSILOG00014 09:30:2020 ]
TSILOG000015 Query de busca do cadastro de apurações de ICMS ST[ Início query TSILOG00015 10:15:2020 ] [ Sintaxe da query de busca do cadastro de apurações de ICMS ST] [ Fim query TSILOG00015 10:19:2020 ]
TSILOG000016 Erro no formato de campos tipos Data [ TSILOG00016 Erro tipo Data 10:15:2020 ] [ Erro na conversão da data recebida] [ Date: 10/08/21 10:19:2020 ]
TSILOG000017 Inicio da gravação do MVC [ TSILOG00017 Inicio 11:10:2020 ] [ Cadastro do model TAFA063] [ Date: 10/08/21 11:10:2020 ]
TSILOG000018 Fim da gravação do MVC [ TSILOG00018 Fim 11:19:2020 ] [ Cadastro do model TAFA063] [ Date: 10/08/21 11:19:2020 ]
TSILOG000019 Query de busca do cadastro de apurações de CPRB[ Início query TSILOG000019 17:21:2020 ] [ Sintaxe da query de busca do cadastro de apurações de CPRB] [ Fim query TSILOG000019 17:27:2020 ]
TSILOG000020 Query de busca do cadastro de CNO - Obras [ Início query TSILOG00020 09:16:2020 ] [ Sintaxe da query de busca do cadastro de CNO - Obras ] [ Fim query TSILOG00020 09:17:2020 ]
TSILOG000021 Query de busca do MAX ID da tabela C0A_ID
TSILOG000022 Conteúdo dos parâmetros do bloco K ->> MV_BLKTPXX
TSILOG000023 Update dos registros na SFT que sofrerão alteração fake com base no log V5R alias C20 ( campo V5R_ERPKEY ) - TAFA600.
TSILOG000024 Participantes (Cliente/Fornecedores) 2000 de 5600.
TSILOG000025 Item (Cadastro de Produtos) 1000 de 5000
TSILOG000026 Erro ao excluir os registros da V5R [ Início erro TSILOG000026 ] ERRO SQL [ Fim erro TSILOG000026 ]
TSILOG000027 A query de extração retornou 312 itens - T1|D MG 01 Date: 29/07/22 Time: 09:45:41
TSILOG000028 Processando lote de 78 NF(s) - T1|D MG 01 Date: 29/07/22 Time: 09:45:49
TSILOG000029 Foram adicionadas/alterados 78 notas ao TAF - T1|D MG 01 Date: 29/07/22 Time: 09:46:18
TSILOG000030 Fim - Taf Service Integration - T1|D MG 01 Date: 29/07/22 Time: 09:46:20
TSILOG000031 Não existe o alias V80 na sua base de dados. Favor atualize o TAF com o ultimo pacote disponível no portal do cliente.
TSILOG000032 Repositório desatualizado. Favor atualize o TAF com o ultimo pacote disponível no portal do cliente.
TSILOG000033 Update dos registros na SFT/SF3 que sofrerão alteração fake com base nos documentos divergentes da SFT(ERP)xC20(TAF) e limpeza da V5R correspondente[ Início update TSILOG000033 ]" ) - TAFA603.
TSILOG000034 Execução da query de extração das notas [ Início TSILOG000034 ]
TSILOG000035 Update dos registros na SF3 que sofrerão alteração fake com base no log V5R alias C20 ( campo V5R_ERPKEY ) - TAFA600.
Card |
---|
label |
...
...
...