Árvore de páginas

Versões comparadas

Chave

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

Índice

Índice
outline
maxLevel510true
indent8.1.1
absoluteUrltrue
exclude.*ndice
stylenone

Objetivo

...

01.CONCEITO

Deck of Cards
effectDuration0.5
historyfalse
idsamples
effectTypefade
Deck of Cards
idConfigurações Iniciais
Card
labelPré-requisitos
Âncora
conceito
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
titleObservação

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:

  1. Acesse o endereço configurado do REST. No exemplo, foi configurado como: http://localhost:8080/rest.
  2. Procure pelo serviço FWMODEL.
  3. 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
themeRDark
titleAPI'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:

Âncora
abastsi
abastsi

Bloco de código
themeRDark
titleJSON - 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
themeRDark
titleJSON - 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
themeRDark
titleJSON - 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
themeRDark
titleJSON - Exemplo de resposta do POST
true

A estrutura do JSON de resposta em caso de falha será da seguinte maneira:

Bloco de código
themeRDark
titleJSON - 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
abastsi

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.

Dica
title
abastsi
Card
labelConfigurações Iniciais Para Utilização
Card
labelJob de Execução Automática
Âncora
abastsiabastsi
Card
labelAnálise Técnica
Card
label

...

Card
accessKeyPainel
idPainel
label(NOVO) Painel Gerenciador TSI

Painel Gerenciador TSI

Acesse o seguinte caminho: SIGATAF \ Atualizações \ Eventos Reinf \ Painel Reinf \ Monitor TSI

Image Removed

Status

1 - Serviço configurado, constará como habilitado se aplicado o pacote, criado os campos stamps no ERP/TAF e cadastrado o job no configurador ( XX1 ).
2 - Serviço Ativo, constará como habilitado se o schedule estiver configurado e iniciado no mesmo servidor da aplicação.

Filtros

1 - Filial ( carrega a filial "logada", porém também possui a opção de carregar 'Todas' );
2 - Do período e Até período, inicialmente não vem preenchido, então considera todos os registros para carregar a tabela e exportar o relatório,
caso sejam preenchidos e aplicado o filtro, aí sim serão considerados o intervalo dos períodos.
3 - Tipo, inicialmente são considerados todos, porém existe a opção para Cadastros, Movimentos e Apurações.

Colunas

Filial, layout, data, hora Integração, código do registro ( carregado apenas nos cadastros e apurações ), chave ( apenas para a nota ) e mensagem de erro (texto com a quebra dos problemas encontrados na integração).

Botões

Aplicar ( efetiva o filtro de acordo com os filtros informados ).
Carregar mais resultados ( consome a api para exibir mais 10 registros na tabela ).
Documentação ( realizar abertura do navegador para o link da documentação oficial ).
Exportar relatório ( efetua download da planilha ".xlsx" com os erros da integração de acordo com o filtro informado )

Exportar Relatório

Image Removed

Documentos Divergentes

Image Removed

A tela de Documentos divergentes tem como objetivo apresentar os documentos que estão do lado do ERP, porém não foram encontrados no TAF ou vice-versa. Caso a integração ainda não tenha sido processada, apresente algum erro ou caso o documento necessite de uma reintegração pois houve uma atualização do campo S_T_A_M_P_ do lado do ERP (Tabelas SFT/SF3), será apresentado nessa tela.

Fitros:

...

Ultima integração:

A mensagem "O TSI irá integrar os documentos lançados a partir de AAAA-MM-DD HH:MM:SS para a filial XXXXX" serve para identificar quando foi feito a ultima integração e a partir de qual data do campo S_T_A_M_P_ será considerado na próxima execução. Ao clicar sobre a mensagem, é possível alterar a data da próxima integração. Somente é possível adiantar essa data, uma vez que o job está em execução e não é possível retroagir para buscar os movimentos anteriores durante a execução do mesmo.

Reintegração:

...

Dica

Ao realizar um POST, devem ser respeitados os campos de ID recebidos no método GET. Por exemplo, considere os seguintes campos:

C1H_UF: Enviar o código 000027 vinculado à tabela C09 (unidade federativa), e não SP.
C1H_CODMUN: Enviar o código 003293 vinculado à tabela C07 (Municípios do IBGE), e não AMERICO DE CAMPOS.
C1L_UM: Enviar o código presente na tabela de unidade de medida, e não UN.
Certifique-se de que os dados enviados no POST correspondam corretamente aos identificadores recebidos no GET, evitando o uso de valores literais inadequados.              

08. ASSUNTOS RELACIONADOS