Árvore de páginas

Versões comparadas

Chave

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

RESTWeb Service REST

Produto:

TOTVS Automação Fiscal

Versões:

12.1.

16+

17+

Este documento tem o objetivo de fornecer informações para utilização do Web Service REST de integração com o TOTVS Automação Fiscal.

Para mais detalhes sobre o conceito de um serviços REST clique aqui.

Para mais detalhes sobre serviços REST na arquitetura Protheus clique aqui.


Índice

Índice
indent30px
absoluteUrltrue

 

Definição do Serviço

 

 

 

 

 

 

Definição dos métodos

 

 

POST

Descrição do Método: O método POST segue o padrão do método devendo seu conteúdo ser enviado no corpo da mensagem (body).

 

Request

 

 

Atributo

Pai

Nivel

TAFST2

Ocorrência

Formato

ticketCode

-

1

 

1

String(36)

lote

-

1

 

1:N

-

sourceBranch

lote

2

TAFFIL

1

String(40)

messageType

lote

2

TAFCODMSG

1

String(01)

messageSequential

lote

2

TAFSEQ

1

String(03)

registryType

lote

2

TAFTPREG

1

String(10)

registryKey

lote

2

TAFKEY

1

String(100)

integrationMessage

lote

2

TAFMSG

1

Memo - Base64

integrationDate

lote

2

TAFDATA

0:1

String - AAAAMM01

integrationTime

lote

2

TAFHORA

0:1

String - HH:MM:SS

 

 

Sem Formato
{"ticketCode":
"WIO9753123654789789363655241452363",


  "lote": [


    {"sourceBranch":
"0100",


      "messageType": "2",


      "messageSequential":
"001",


      "registryType":
"S-1010",


      "registryKey":
"KEYIO7878874854545454998598525",


      "integrationMessage": "PGVTb2NpYWw+PGV2dFRhYlJ1YnJpY2EgaWQ9J1MtMTAxMDEzMDUyMDE2MTU0MDE2JyB2ZXJzYW89JzEuMSc+PGlkZUV2ZW50bz48dHBBbWI+MzwvdHBBbWI+PHByb2NFbWk+MTwvcHJvY0VtaT48dmVyUHJvYz48L3ZlclByb2M+PC9pZGVFdmVudG8+PGlkZUVtcHJlZ2Fkb3I+PHRwSW5zYz4xPC90cEluc2M+PG5ySW5zYz41MzExMzc5MTAwMDEyMjwvbnJJbnNjPjwvaWRlRW1wcmVnYWRvcj48aW5mb1J1YnJpY2E+PGFsdGVyYWNhbz48aWRlUnVicmljYT48Y29kUnVicj45OTg8L2NvZFJ1YnI+PGluaVZhbGlkPjIwMTYtMDM8L2luaVZhbGlkPjwvaWRlUnVicmljYT48ZGFkb3NSdWJyaWNhPjxkc2NSdWJyPkJBU0UgUEVOU0FPIFBHVE88L2RzY1J1YnI+PG5hdFJ1YnI+OTk4OTwvbmF0UnVicj48dHBSdWJyPjM8L3RwUnVicj48Y29kSW5jQ1A+MDA8L2NvZEluY0NQPjxjb2RJbmNJUlJGPjAwPC9jb2RJbmNJUlJGPjxjb2RJbmNGR1RTPjAwPC9jb2RJbmNGR1RTPjxjb2RJbmNTSU5EPjAwPC9jb2RJbmNTSU5EPjxyZXBEU1I+TjwvcmVwRFNSPjxyZXAxMz5OPC9yZXAxMz48cmVwRmVyaWFzPk48L3JlcEZlcmlhcz48cmVwUmVzYz5OPC9yZXBSZXNjPjwvZGFkb3NSdWJyaWNhPjwvYWx0ZXJhY2FvPjwvaW5mb1J1YnJpY2E+PC9ldnRUYWJSdWJyaWNhPjwvZVNvY2lhbD4=",


      "integrationDate":
"",


      "integrationTime": ""


    },


    {"sourceBranch":
"0100",


      "messageType": "2",


      "messageSequential":
"001",


      "registryType":
"S-2100",


      "registryKey":
"KEYYZE7878RE4854545454998598576",


      "integrationMessage":
"PGVTb2NpYWw+PGV2dENhZEluaWNpYWwgSWQ9J0lEMTUzMTEzNzkxMDAwMDAwMjAxNjEyMDkxNDU5NTQwMDAwMSc+PGlkZUV2ZW50bz48aW5kUmV0aWY+MTwvaW5kUmV0aWY+PG5yUmVjaWJvPjwvbnJSZWNpYm8+PHRwQW1iPjM8L3RwQW1iPjxwcm9jRW1pPjE8L3Byb2NFbWk+PHZlclByb2M+MS4wPC92ZXJQcm9jPjwvaWRlRXZlbnRvPjxpZGVFbXByZWdhZG9yPjx0cEluc2M+MTwvdHBJbnNjPjxuckluc2M+NTMxMTM3OTE8L25ySW5zYz48L2lkZUVtcHJlZ2Fkb3I+PHRyYWJhbGhhZG9yPjxjcGZUcmFiPjMyMDA5MDM3ODQ2PC9jcGZUcmFiPjxuaXNUcmFiPjEyMjAzNjcxODQ0PC9uaXNUcmFiPjxubVRyYWI+IEdUIFhNQlBFUkhVSlpOQ1FGU0lWTEFPRDwvbm1UcmFiPjxzZXhvPk08L3NleG8+PHJhY2FDb3I+MTwvcmFjYUNvcj48ZXN0Q2l2PjI8L2VzdENpdj48Z3JhdUluc3RyPjwvZ3JhdUluc3RyPjxuYXNjaW1lbnRvPjxkdE5hc2N0bz4xOTc2LTA0LTEzPC9kdE5hc2N0bz48Y29kTXVuaWM+MTIwMDEwNTwvY29kTXVuaWM+PHVmPlNQPC91Zj48cGFpc05hc2N0bz4wMTM8L3BhaXNOYXNjdG8+PHBhaXNOYWM+MDEzPC9wYWlzTmFjPjxubU1hZT5ORVVTQSBDQVJWQUxITyBORVZFUzwvbm1NYWU+PG5tUGFpPkpPU0UgUkVZTkFMRE8gQ1JFU1BPIE5FVkVTPC9ubVBhaT48L25hc2NpbWVudG8+PGRvY3VtZW50b3M+PENUUFM+PG5yQ3Rwcz4wMDAzNTgwMDwvbnJDdHBzPjxzZXJpZUN0cHM+MDAwNzM8L3NlcmllQ3Rwcz48dWZDdHBzPlNQPC91ZkN0cHM+PC9DVFBTPjxSRz48bnJSZz4xNi43MjEuMDMwPC9uclJnPjxvcmdhb0VtaXNzb3I+U1NQPC9vcmdhb0VtaXNzb3I+PGR0RXhwZWQ+MTk4Mi0wMy0wMjwvZHRFeHBlZD48L1JHPjxDTkg+PG5yUmVnQ25oPjAwMDAwMDAwMDA8L25yUmVnQ25oPjx1ZkNuaD48L3VmQ25oPjxkdFZhbGlkPjwvZHRWYWxpZD48Y2F0ZWdvcmlhQ25oPjwvY2F0ZWdvcmlhQ25oPjwvQ05IPjwvZG9jdW1lbnRvcz48ZW5kZXJlY28+PGV4dGVyaW9yPjxwYWlzUmVzaWQ+MDEzPC9wYWlzUmVzaWQ+PGRzY0xvZ3JhZD5BTEJBPC9kc2NMb2dyYWQ+PG5yTG9ncmFkPjE0NDQ8L25yTG9ncmFkPjxiYWlycm8+UFEuIEpBQkFRVUFSQTwvYmFpcnJvPjxubUNpZD5TQU4gTFVJWjwvbm1DaWQ+PGNvZFBvc3RhbD4wNDM0NjAwMDwvY29kUG9zdGFsPjwvZXh0ZXJpb3I+PC9lbmRlcmVjbz48aW5mb0RlZmljaWVuY2lhPjxkZWZGaXNpY2E+TjwvZGVmRmlzaWNhPjxkZWZWaXN1YWw+TjwvZGVmVmlzdWFsPjxkZWZBdWRpdGl2YT5OPC9kZWZBdWRpdGl2YT48ZGVmTWVudGFsPk48L2RlZk1lbnRhbD48ZGVmSW50ZWxlY3R1YWw+TjwvZGVmSW50ZWxlY3R1YWw+PHJlYWJSZWFkYXA+TjwvcmVhYlJlYWRhcD48L2luZm9EZWZpY2llbmNpYT48YXBvc2VudGFkb3JpYT48dHJhYkFwb3NlbnQ+TjwvdHJhYkFwb3NlbnQ+PC9hcG9zZW50YWRvcmlhPjxjb250YXRvPjxmb25lUHJpbmM+MDAxMzQ3MzU1NTUgLzwvZm9uZVByaW5jPjxmb25lQWx0ZXJuYXQ+MDExNzg5Nzk4Nzk4PC9mb25lQWx0ZXJuYXQ+PGVtYWlsQWx0ZXJuYXQ+UkVZTkFMRE9ASE9UTUFJTC5DT008L2VtYWlsQWx0ZXJuYXQ+PC9jb250YXRvPjwvdHJhYmFsaGFkb3I+PHZpbmN1bG8+PG1hdHJpY3VsYT4wMDAwMDAwMDAwMDAwMDAwMDAwNzwvbWF0cmljdWxhPjx0cFJlZ1RyYWI+MTwvdHBSZWdUcmFiPjx0cFJlZ1ByZXY+MTwvdHBSZWdQcmV2PjxpbmZvUmVnaW1lVHJhYj48L2luZm9SZWdpbWVUcmFiPjxpbmZvQ29udHJhdG8+PGNvZENhdGVnPjMwMjwvY29kQ2F0ZWc+PHJlbXVuZXJhY2FvPjx2clNhbEZ4PjEwMDAuMDA8L3ZyU2FsRng+PHVuZFNhbEZpeG8+NTwvdW5kU2FsRml4bz48L3JlbXVuZXJhY2FvPjxkdXJhY2FvPjx0cENvbnRyPjE8L3RwQ29udHI+PC9kdXJhY2FvPjxsb2NhbFRyYWJhbGhvPjwvbG9jYWxUcmFiYWxobz48L2luZm9Db250cmF0bz48L3ZpbmN1bG8+PC9ldnRDYWRJbmljaWFsPjwvZVNvY2lhbD4=",


      "integrationDate":
"",


      "integrationTime": ""


   }


  ]


}

 

 

 

GET

 

 

 

 

DELETE

 

 

Exemplo de Consumo do Serviço

 

 

 

 

 

 

 

Códigos de Erro ( RESTFault )

 

 

 

 

{"ticketCode": "WIO9753123654789789363655241452363",

  "lote": [

    {"sourceBranch": "0100",

      "messageType": "2",

      "messageSequential": "001",

      "registryType": "S-1010",

      "registryKey": "KEYIO7878874854545454998598525",

      "integrationMessage": "PGVTb2NpYWw+PGV2dFRhYlJ1YnJpY2EgaWQ9J1MtMTAxMDEzMDUyMDE2MTU0MDE2JyB2ZXJzYW89JzEuMSc+PGlkZUV2ZW50bz48dHBBbWI+MzwvdHBBbWI+PHByb2NFbWk+MTwvcHJvY0VtaT48dmVyUHJvYz48L3ZlclByb2M+PC9pZGVFdmVudG8+PGlkZUVtcHJlZ2Fkb3I+PHRwSW5zYz4xPC90cEluc2M+PG5ySW5zYz41MzExMzc5MTAwMDEyMjwvbnJJbnNjPjwvaWRlRW1wcmVnYWRvcj48aW5mb1J1YnJpY2E+PGFsdGVyYWNhbz48aWRlUnVicmljYT48Y29kUnVicj45OTg8L2NvZFJ1YnI+PGluaVZhbGlkPjIwMTYtMDM8L2luaVZhbGlkPjwvaWRlUnVicmljYT48ZGFkb3NSdWJyaWNhPjxkc2NSdWJyPkJBU0UgUEVOU0FPIFBHVE88L2RzY1J1YnI+PG5hdFJ1YnI+OTk4OTwvbmF0UnVicj48dHBSdWJyPjM8L3RwUnVicj48Y29kSW5jQ1A+MDA8L2NvZEluY0NQPjxjb2RJbmNJUlJGPjAwPC9jb2RJbmNJUlJGPjxjb2RJbmNGR1RTPjAwPC9jb2RJbmNGR1RTPjxjb2RJbmNTSU5EPjAwPC9jb2RJbmNTSU5EPjxyZXBEU1I+TjwvcmVwRFNSPjxyZXAxMz5OPC9yZXAxMz48cmVwRmVyaWFzPk48L3JlcEZlcmlhcz48cmVwUmVzYz5OPC9yZXBSZXNjPjwvZGFkb3NSdWJyaWNhPjwvYWx0ZXJhY2FvPjwvaW5mb1J1YnJpY2E+PC9ldnRUYWJSdWJyaWNhPjwvZVNvY2lhbD4=",

      "integrationDate": "",

      "integrationTime": ""

    },

    {"sourceBranch": "0100",

      "messageType": "2",

      "messageSequential": "001",

      "registryType": "S-2100",

      "registryKey": "KEYYZE7878RE4854545454998598576",

      "integrationMessage": "PGVTb2NpYWw+PGV2dENhZEluaWNpYWwgSWQ9J0lEMTUzMTEzNzkxMDAwMDAwMjAxNjEyMDkxNDU5NTQwMDAwMSc+PGlkZUV2ZW50bz48aW5kUmV0aWY+MTwvaW5kUmV0aWY+PG5yUmVjaWJvPjwvbnJSZWNpYm8+PHRwQW1iPjM8L3RwQW1iPjxwcm9jRW1pPjE8L3Byb2NFbWk+PHZlclByb2M+MS4wPC92ZXJQcm9jPjwvaWRlRXZlbnRvPjxpZGVFbXByZWdhZG9yPjx0cEluc2M+MTwvdHBJbnNjPjxuckluc2M+NTMxMTM3OTE8L25ySW5zYz48L2lkZUVtcHJlZ2Fkb3I+PHRyYWJhbGhhZG9yPjxjcGZUcmFiPjMyMDA5MDM3ODQ2PC9jcGZUcmFiPjxuaXNUcmFiPjEyMjAzNjcxODQ0PC9uaXNUcmFiPjxubVRyYWI+IEdUIFhNQlBFUkhVSlpOQ1FGU0lWTEFPRDwvbm1UcmFiPjxzZXhvPk08L3NleG8+PHJhY2FDb3I+MTwvcmFjYUNvcj48ZXN0Q2l2PjI8L2VzdENpdj48Z3JhdUluc3RyPjwvZ3JhdUluc3RyPjxuYXNjaW1lbnRvPjxkdE5hc2N0bz4xOTc2LTA0LTEzPC9kdE5hc2N0bz48Y29kTXVuaWM+MTIwMDEwNTwvY29kTXVuaWM+PHVmPlNQPC91Zj48cGFpc05hc2N0bz4wMTM8L3BhaXNOYXNjdG8+PHBhaXNOYWM+MDEzPC9wYWlzTmFjPjxubU1hZT5ORVVTQSBDQVJWQUxITyBORVZFUzwvbm1NYWU+PG5tUGFpPkpPU0UgUkVZTkFMRE8gQ1JFU1BPIE5FVkVTPC9ubVBhaT48L25hc2NpbWVudG8+PGRvY3VtZW50b3M+PENUUFM+PG5yQ3Rwcz4wMDAzNTgwMDwvbnJDdHBzPjxzZXJpZUN0cHM+MDAwNzM8L3NlcmllQ3Rwcz48dWZDdHBzPlNQPC91ZkN0cHM+PC9DVFBTPjxSRz48bnJSZz4xNi43MjEuMDMwPC9uclJnPjxvcmdhb0VtaXNzb3I+U1NQPC9vcmdhb0VtaXNzb3I+PGR0RXhwZWQ+MTk4Mi0wMy0wMjwvZHRFeHBlZD48L1JHPjxDTkg+PG5yUmVnQ25oPjAwMDAwMDAwMDA8L25yUmVnQ25oPjx1ZkNuaD48L3VmQ25oPjxkdFZhbGlkPjwvZHRWYWxpZD48Y2F0ZWdvcmlhQ25oPjwvY2F0ZWdvcmlhQ25oPjwvQ05IPjwvZG9jdW1lbnRvcz48ZW5kZXJlY28+PGV4dGVyaW9yPjxwYWlzUmVzaWQ+MDEzPC9wYWlzUmVzaWQ+PGRzY0xvZ3JhZD5BTEJBPC9kc2NMb2dyYWQ+PG5yTG9ncmFkPjE0NDQ8L25yTG9ncmFkPjxiYWlycm8+UFEuIEpBQkFRVUFSQTwvYmFpcnJvPjxubUNpZD5TQU4gTFVJWjwvbm1DaWQ+PGNvZFBvc3RhbD4wNDM0NjAwMDwvY29kUG9zdGFsPjwvZXh0ZXJpb3I+PC9lbmRlcmVjbz48aW5mb0RlZmljaWVuY2lhPjxkZWZGaXNpY2E+TjwvZGVmRmlzaWNhPjxkZWZWaXN1YWw+TjwvZGVmVmlzdWFsPjxkZWZBdWRpdGl2YT5OPC9kZWZBdWRpdGl2YT48ZGVmTWVudGFsPk48L2RlZk1lbnRhbD48ZGVmSW50ZWxlY3R1YWw+TjwvZGVmSW50ZWxlY3R1YWw+PHJlYWJSZWFkYXA+TjwvcmVhYlJlYWRhcD48L2luZm9EZWZpY2llbmNpYT48YXBvc2VudGFkb3JpYT48dHJhYkFwb3NlbnQ+TjwvdHJhYkFwb3NlbnQ+PC9hcG9zZW50YWRvcmlhPjxjb250YXRvPjxmb25lUHJpbmM+MDAxMzQ3MzU1NTUgLzwvZm9uZVByaW5jPjxmb25lQWx0ZXJuYXQ+MDExNzg5Nzk4Nzk4PC9mb25lQWx0ZXJuYXQ+PGVtYWlsQWx0ZXJuYXQ+UkVZTkFMRE9ASE9UTUFJTC5DT008L2VtYWlsQWx0ZXJuYXQ+PC9jb250YXRvPjwvdHJhYmFsaGFkb3I+PHZpbmN1bG8+PG1hdHJpY3VsYT4wMDAwMDAwMDAwMDAwMDAwMDAwNzwvbWF0cmljdWxhPjx0cFJlZ1RyYWI+MTwvdHBSZWdUcmFiPjx0cFJlZ1ByZXY+MTwvdHBSZWdQcmV2PjxpbmZvUmVnaW1lVHJhYj48L2luZm9SZWdpbWVUcmFiPjxpbmZvQ29udHJhdG8+PGNvZENhdGVnPjMwMjwvY29kQ2F0ZWc+PHJlbXVuZXJhY2FvPjx2clNhbEZ4PjEwMDAuMDA8L3ZyU2FsRng+PHVuZFNhbEZpeG8+NTwvdW5kU2FsRml4bz48L3JlbXVuZXJhY2FvPjxkdXJhY2FvPjx0cENvbnRyPjE8L3RwQ29udHI+PC9kdXJhY2FvPjxsb2NhbFRyYWJhbGhvPjwvbG9jYWxUcmFiYWxobz48L2luZm9Db250cmF0bz48L3ZpbmN1bG8+PC9ldnRDYWRJbmljaWFsPjwvZVNvY2lhbD4=",

      "integrationDate": "",

      "integrationTime": ""

   }

  ]

Nome: WSTAFST2

Objetivo: Permitir a Integração com o módulo SIGATAF utilizando um WebService do Tipo REST.

Descrição: Integra os produtos na tabela compartilhada TAFST2, permite a consulta do status de integração e cadastro dos registros através do TAFKEY ou TAFTICKET e permite a exclusão dos registros através do TAFTICKET.

Métodos: POST, GET e DELETE.

Configurações do Serviço


A  Configuração do serviço REST está documentada  no link Configuração REST SERVER - Protheus.

Estas parametrizações estão localizadas fisicamente no arquivo appserver.ini da pasta de instalação "[...]\BIN\APP"

Nota
titleImportante

Na seção HTTPURI, a chave PrepareIn deve ser comentada.

Segue exemplo de configuração do WS REST para utilização no modulo TAF:


Bloco de código
languageactionscript3
themeEclipse
titleappserver.ini
[HTTPV11]
SOCKETS=HTTPREST
ENABLE=1

[HTTPREST]
Port=8080
URIs=HTTPURI
Security=1

[HTTPURI]
URL=/rest
;PrepareIn=
Instances=1,2
CORSEnable=1
AllowOrigin=*

[HTTPJOB]
MAIN=HTTP_START
ENVIRONMENT=P12

[TAF_CFGJOB]
Main=TAF_CFGJOB
Instances=1,2,1,1
PrepareIn=T1 
RefreshRate=50
ENVIRONMENT=P12

[OnStart]
JOBS=HTTPJOB,TAF_CFGJOB
RefreshRate=120
Informações
titleInstances

A chave Instances na seção TAF_CFGJOB é opcional, se a mesma não existir o sistema ira considerar a quantidade de threads declarada na chave instances da seção HTTPURI.

Informações
titlePrepareIn

A chave PrepareIn deve conter o código do Grupo de Empresas(sigamat.emp/syscompany) utilizado no modulo TAF, abaixo exemplos configurações possíveis para as mesmas:

  • Utilizando o código do grupo; Ex: PrepareIn=01
  • Utilizando diversos códigos de grupos; Ex: PrepareIn=01,02,99 .
  • Utilizando a palavra ALL, neste caso o server vai considerar todos os grupos contidos no arquivo de empresas do Protheus/TAF; Ex PrepareIn=ALL
Aviso
titleConsumo de Memória e CPU

O servidor cria Threads especificas para cada grupo de empresas de acordo com a configuração da chave Instances, por isso essa configuração deve ser realizada considerando a capacidade computacional do servidor.


Fonte: REST com ERP Microsiga Protheus

Definição dos métodos

POST

Descrição do Método: O método POST segue o conceito do próprio método em qualquer outro tipo de serviço REST, devendo seu conteúdo ser enviado no corpo da mensagem (body) no formato json.

O objetivo do método é enviar informações que devem ser gravadas na tabela transacional do TAF  ( TAFST2 ), permitindo que os dados sejam submetidos aos processos de integração.

Estrutura da mensagem enviada no POST (Request):


Atributo

Pai

Nivel

TAFST2

Ocorrência

Formato

ticketCode

-

1


1

String(36)

lote

-

1


1:N

-

sourceBranch

lote

2

TAFFIL

1

String(40)

messageType

lote

2

TAFCODMSG

1

String(01)

messageSequential

lote

2

TAFSEQ

1

String(03)

registryType

lote

2

TAFTPREG

1

String(10)

registryKey

lote

2

TAFKEY

1

String(100)

integrationMessage

lote

2

TAFMSG

1

Memo - Base64

integrationDate

lote

2

TAFDATA

0:1

String - AAAAMM01

integrationTime

lote

2

TAFHORA

0:1

String - HH:MM:SS

registryPrioritylote2TAFPRIORIT0:1String(01)
integrationQueuelote2TAFSTQUEUE0:1String(01)
erpownerlote2TAFOWNER0:1String(40)

registryPredecessor

lote

2

TAFREGPRED

0:1

String(100)

transferBranchlote2TAFFILTRAN0:1

String(40)

complementlote2TAFCOMP0:1String(100)


  • ticketCode – atributo raiz
  • lote -  estrutura dos itens.
  • sourceBranch - Código Identificador da filial do ERP emissor.
  • messageType - Determina se o arquivo enviado em TAFMSG é .txt  (1)ou .Xml(2).
  • messageSequential - Sequência do arquivo; A Mensagem em TAFMSG pode ser enviada em mais de 1 registro, para isso deve-se repetir as informações dos demais campos e alterar a sequencia de acordo com a ordem das informações enviadas.
  • registryType - Chave do Registro.
  • integrationMessage - Arquivo/Evento a ser integrado, a mensagem deve ser enviada com criptografia BASE64.
    Obs: O XML pode ser enviado com a codificação UTF-8, neste caso é obrigatório o uso da declaração  <?xml version="1.0" encoding="utf-8"?> no inicio do Xml.
  • integrationDate - Data da Integração.
  • integrationTime - Hora da Integração.
  • registryPriority - Prioridade de processamento do registro.
  • integrationQueue - Registro será considerado na fila de integração. '1' - Enable ou '0' - Disable.
  • erpowner - Identificação do dono do XML a ser integrado
  • registryPredecessor - Identificador com o TAFKEY do registro predecessor, caso exista algum registro que o preceda.
  • transferBranch - Identificador da Filial original do trabalhador a ser transferido.
  • complement - Campo aberto na TAFST2, onde para os eventos S-1200 e S-1210, quando informado o conteúdo MV será utilizado a regra de gravação de eventos de múltiplos vínculos (gravação aberta).

Aviso
titleAtenção!

Os atributos não obrigatórios têm que fazer parte da estrutura, somente o seu preenchimento é opcional.

Aviso
titleContent-Type e Encode Type

Para a utilização de caracteres especiais nos conteúdos dos atributos, é necessário a definição do encode correto no Header das mensagens de todos os métodos.
Por exemplo, para permitir caracteres como Ç ou Â, deve se usar o encode UTF-8 no Header.

Authorization : Basic ******

Content-Type : application/json;charset=UTF-8


Estrutura da mensagem de retorno do POST (Response):


Atributo

Pai

Nivel

Ocorrência

Formato

ticketCode

-

1

0:1

String(36)

registryKey

-

1

0:N

-

coderr-10:1Int(3)
description-10:1String(100)

key

registryKey

2

1

String(100)

success

registryKey

2

1

boolean(true : false)

error

registryKey

2

0:N

-

coderr

error

3

1

Int(3)

description

error

3

1

String(100)

keyAmount

registryKey

1

0:1

Int(9999)


  • ticketCode – atributo raiz
  • registryKey – Array contendo os TAFKEY requisitados.
  • coderr - Código de erro que impediu a integração do lote
  • description - Descrição do erro que impossibilitou a integração do lote. 
  • key – Código do TAFKEY
  • success – Informa se o TAFKEY foi integrado ou não.
  • error – Array contendo os erros que impediram a integração do registro. Atributo gerado somente quando success for igual a false.
  • coderr – Código do erro que impossibilitou a integração.
  • description – Descrição do erro que impossibilitou a integração. 
  • keyAmount – Número de registros enviados no POST.


Bloco de código
languagejs
themeEclipse
titleExemplo de mensagem POST:
{"ticketCode" : "WIO9753123654789789363655241452363",
  "lote": [
    	{"sourceBranch" : "0100",
      	 "messageType" : "2",
      	 "messageSequential" : "001",
      	 "registryType" : "S-1010",
      	 "registryKey" : "KEYIO7878874854545454998598525",
      	 "integrationMessage": "PGVTb2NpYWw+PGV2dFRhYlJ1YnJpY2EgaWQ9J1MtMTAxMDEzMDUyMDE2MTU0MDE2JyB2ZXJzYW89JzEuMSc+PGlkZUV2ZW50bz48dHBBbWI+MzwvdHBBbWI+PHByb2NFbWk+MTwvcHJvY0VtaT48dmVyUHJvYz48L3ZlclByb2M+PC9pZGVFdmVudG8+PGlkZUVtcHJlZ2Fkb3I+PHRwSW5zYz4xPC90cEluc2M+PG5ySW5zYz41MzExMzc5MTAwMDEyMjwvbnJJbnNjPjwvaWRlRW1wcmVnYWRvcj48aW5mb1J1YnJpY2E+PGFsdGVyYWNhbz48aWRlUnVicmljYT48Y29kUnVicj45OTg8L2NvZFJ1YnI+PGluaVZhbGlkPjIwMTYtMDM8L2luaVZhbGlkPjwvaWRlUnVicmljYT48ZGFkb3NSdWJyaWNhPjxkc2NSdWJyPkJBU0UgUEVOU0FPIFBHVE88L2RzY1J1YnI+PG5hdFJ1YnI+OTk4OTwvbmF0UnVicj48dHBSdWJyPjM8L3RwUnVicj48Y29kSW5jQ1A+MDA8L2NvZEluY0NQPjxjb2RJbmNJUlJGPjAwPC9jb2RJbmNJUlJGPjxjb2RJbmNGR1RTPjAwPC9jb2RJbmNGR1RTPjxjb2RJbmNTSU5EPjAwPC9jb2RJbmNTSU5EPjxyZXBEU1I+TjwvcmVwRFNSPjxyZXAxMz5OPC9yZXAxMz48cmVwRmVyaWFzPk48L3JlcEZlcmlhcz48cmVwUmVzYz5OPC9yZXBSZXNjPjwvZGFkb3NSdWJyaWNhPjwvYWx0ZXJhY2FvPjwvaW5mb1J1YnJpY2E+PC9ldnRUYWJSdWJyaWNhPjwvZVNvY2lhbD4=",
      	 "integrationDate" : "20161210",
	  	 "integrationTime": "14:15:22",
		 "erpowner" : "DATASUL"
    	},
		{"sourceBranch" : "0100",
      	 "messageType" : "2",
      	 "messageSequential" : "001",
      	 "registryType" : "S-2200",
	  	 "registryKey" : "KEYYZE7878RE4854545454998598576",
	  	 "integrationMessage":
"PGVTb2NpYWw+PGV2dENhZEluaWNpYWwgSWQ9J0lEMTUzMTEzNzkxMDAwMDAwMjAxNjEyMDkxNDU5NTQwMDAwMSc+PGlkZUV2ZW50bz48aW5kUmV0aWY+MTwvaW5kUmV0aWY+PG5yUmVjaWJvPjwvbnJSZWNpYm8+PHRwQW1iPjM8L3RwQW1iPjxwcm9jRW1pPjE8L3Byb2NFbWk+PHZlclByb2M+MS4wPC92ZXJQcm9jPjwvaWRlRXZlbnRvPjxpZGVFbXByZWdhZG9yPjx0cEluc2M+MTwvdHBJbnNjPjxuckluc2M+NTMxMTM3OTE8L25ySW5zYz48L2lkZUVtcHJlZ2Fkb3I+PHRyYWJhbGhhZG9yPjxjcGZUcmFiPjMyMDA5MDM3ODQ2PC9jcGZUcmFiPjxuaXNUcmFiPjEyMjAzNjcxODQ0PC9uaXNUcmFiPjxubVRyYWI+IEdUIFhNQlBFUkhVSlpOQ1FGU0lWTEFPRDwvbm1UcmFiPjxzZXhvPk08L3NleG8+PHJhY2FDb3I+MTwvcmFjYUNvcj48ZXN0Q2l2PjI8L2VzdENpdj48Z3JhdUluc3RyPjwvZ3JhdUluc3RyPjxuYXNjaW1lbnRvPjxkdE5hc2N0bz4xOTc2LTA0LTEzPC9kdE5hc2N0bz48Y29kTXVuaWM+MTIwMDEwNTwvY29kTXVuaWM+PHVmPlNQPC91Zj48cGFpc05hc2N0bz4wMTM8L3BhaXNOYXNjdG8+PHBhaXNOYWM+MDEzPC9wYWlzTmFjPjxubU1hZT5ORVVTQSBDQVJWQUxITyBORVZFUzwvbm1NYWU+PG5tUGFpPkpPU0UgUkVZTkFMRE8gQ1JFU1BPIE5FVkVTPC9ubVBhaT48L25hc2NpbWVudG8+PGRvY3VtZW50b3M+PENUUFM+PG5yQ3Rwcz4wMDAzNTgwMDwvbnJDdHBzPjxzZXJpZUN0cHM+MDAwNzM8L3NlcmllQ3Rwcz48dWZDdHBzPlNQPC91ZkN0cHM+PC9DVFBTPjxSRz48bnJSZz4xNi43MjEuMDMwPC9uclJnPjxvcmdhb0VtaXNzb3I+U1NQPC9vcmdhb0VtaXNzb3I+PGR0RXhwZWQ+MTk4Mi0wMy0wMjwvZHRFeHBlZD48L1JHPjxDTkg+PG5yUmVnQ25oPjAwMDAwMDAwMDA8L25yUmVnQ25oPjx1ZkNuaD48L3VmQ25oPjxkdFZhbGlkPjwvZHRWYWxpZD48Y2F0ZWdvcmlhQ25oPjwvY2F0ZWdvcmlhQ25oPjwvQ05IPjwvZG9jdW1lbnRvcz48ZW5kZXJlY28+PGV4dGVyaW9yPjxwYWlzUmVzaWQ+MDEzPC9wYWlzUmVzaWQ+PGRzY0xvZ3JhZD5BTEJBPC9kc2NMb2dyYWQ+PG5yTG9ncmFkPjE0NDQ8L25yTG9ncmFkPjxiYWlycm8+UFEuIEpBQkFRVUFSQTwvYmFpcnJvPjxubUNpZD5TQU4gTFVJWjwvbm1DaWQ+PGNvZFBvc3RhbD4wNDM0NjAwMDwvY29kUG9zdGFsPjwvZXh0ZXJpb3I+PC9lbmRlcmVjbz48aW5mb0RlZmljaWVuY2lhPjxkZWZGaXNpY2E+TjwvZGVmRmlzaWNhPjxkZWZWaXN1YWw+TjwvZGVmVmlzdWFsPjxkZWZBdWRpdGl2YT5OPC9kZWZBdWRpdGl2YT48ZGVmTWVudGFsPk48L2RlZk1lbnRhbD48ZGVmSW50ZWxlY3R1YWw+TjwvZGVmSW50ZWxlY3R1YWw+PHJlYWJSZWFkYXA+TjwvcmVhYlJlYWRhcD48L2luZm9EZWZpY2llbmNpYT48YXBvc2VudGFkb3JpYT48dHJhYkFwb3NlbnQ+TjwvdHJhYkFwb3NlbnQ+PC9hcG9zZW50YWRvcmlhPjxjb250YXRvPjxmb25lUHJpbmM+MDAxMzQ3MzU1NTUgLzwvZm9uZVByaW5jPjxmb25lQWx0ZXJuYXQ+MDExNzg5Nzk4Nzk4PC9mb25lQWx0ZXJuYXQ+PGVtYWlsQWx0ZXJuYXQ+UkVZTkFMRE9ASE9UTUFJTC5DT008L2VtYWlsQWx0ZXJuYXQ+PC9jb250YXRvPjwvdHJhYmFsaGFkb3I+PHZpbmN1bG8+PG1hdHJpY3VsYT4wMDAwMDAwMDAwMDAwMDAwMDAwNzwvbWF0cmljdWxhPjx0cFJlZ1RyYWI+MTwvdHBSZWdUcmFiPjx0cFJlZ1ByZXY+MTwvdHBSZWdQcmV2PjxpbmZvUmVnaW1lVHJhYj48L2luZm9SZWdpbWVUcmFiPjxpbmZvQ29udHJhdG8+PGNvZENhdGVnPjMwMjwvY29kQ2F0ZWc+PHJlbXVuZXJhY2FvPjx2clNhbEZ4PjEwMDAuMDA8L3ZyU2FsRng+PHVuZFNhbEZpeG8+NTwvdW5kU2FsRml4bz48L3JlbXVuZXJhY2FvPjxkdXJhY2FvPjx0cENvbnRyPjE8L3RwQ29udHI+PC9kdXJhY2FvPjxsb2NhbFRyYWJhbGhvPjwvbG9jYWxUcmFiYWxobz48L2luZm9Db250cmF0bz48L3ZpbmN1bG8+PC9ldnRDYWRJbmljaWFsPjwvZVNvY2lhbD4=",
	 	 "integrationDate" : "",
	 	 "integrationTime" :  "",
         "registryPriority" : "0",
	     "integrationQueue" : "1",
         "erpowner" : "DATASUL",
         "registryPredecessor" : "KEYIO7878874854545454998598525",
         "transferBranch" : "0200"
  		}
  	]
}
Bloco de código
languagejs
themeEclipse
titleResponse:
{
"ticketCode": "WIO9753123654789789363655241452363",
"registryKey": [
	{
		"key": "KEYIO7878874854545454998598525",
		"success": true
	},
	{
		"key": "KEYYZE7878RE4854545454998598576",
		"success": true
	}
  ],
"keyAmount": 2
}




GET


Descrição do Método: O método GET retorna os status dos registros integrados de acordo com os parâmetros (atributos) enviados na URL.

A Consulta pode combinar parâmetros utilizando a sintaxe “Query String” conforme exemplo abaixo:

http://172.16.31.214:8085/rest/wstafst2?ticketCode=F95975312365478978936365524145236352&RegistryKey=KEYQWE7878RE4854545454998598571&startRecNo=0



ParâmetroDescriçãoObrigatório
ticketCodeTAFTICKETOC
registryKeyTAFKEYOC
startRecNoRecNo inicial para consultaO
searchModeFiltro para buscaN
sourceBranchFilial do ERP EmissorO*
queryElementsHabilita Consulta no TSSN

lotQuantity

Limita a quantidade de registros retornados
returnRetResponseRetorna XML do Governo


  • ticketCode - Código do TAFTICKET, Obrigatório caso registryKey não seja informado.
  • registryKey - Código do TAFKEY, Obrigatório caso ticketCode não seja informado.
  • startRecNo - Numero do RecNo Inicial a ser considerado na consulta. 
    Observação : O Tamanho máximo do Response é 850 kB ou 500 registros, quando a mensagem chega neste valor é realizado um retorno contendo os registros que já foram incrementados na resposta. O Controle dos itens restantes é feito através do lastRecNo que informa o RecNo do ultimo registro que fez parte da mensagem anterior (respeitando a chave),  caso o mesmo seja diferente de maxRecNo é por que existem itens a serem retornados, caso o contrario a consulta está completa.
  • searchMode - Modo de pesquisa, quando não informado o response retorna todos os TAFKEYs relacionados a busca, quando igual a 1 retorna a última ocorrência do TAFKEY, quando igual a 2 retorna a última ocorrência válida do TAFKEY. Este parâmetro é útil quando o mesmo TAFKEY é enviado em vários TAFTICKET diferentes.
  • Obs: Esta funcionalidade só deve ser utilizada quando quando a consulta realizada for somente por TAFKEY(registryKey), caso seja utilizada na consulta utilizando o TAFTICKET(ticketCode) dependendo do banco de dados o retorno será o ultimo registro valido do Lote.
  • sourceBranch - Código Identificador da filial do ERP emissor - *Não há uma validação de obrigatoriedade no retorno da requisição por conta do legado.
  • queryElements - Determina se o método deve retornar os erros dos registros com statusCode igual a 3 (Erros retornados pelo RET e gravados no TSS), o retorno será atribuído no grupo streamingErrors. Quando a tag não é informada os erros são retornados por Default. Valores validos: 0 - Desabilita, 1 - Habilita.
  • lotQuantity - Limita a quantidade de registros a serem retornados na requisição. O tamanho da mensagem não poderá ultrapassar 850Kb, caso isto aconteça será realizado um retorno contendo os registros que já foram incrementados na resposta.
  • returnRetResponse - Determina se deve retornar o XML autorizado no governo para os eventos transmitidos(XML retornado pelo RET e gravado no TSS). Valores validos: False - não retorna, True - retorna XML.
Estrutura da Resposta do método GET (Response):


Atributo

Pai

Nivel

Ocorrência

Formato

type

-

1

1

-

code

-

1

1:N

String(36-100)

Items

-

1

1

-

success

Items

2

1

boolean(true : false)

proccessed

Items

2

1

boolean(true : false)

description

Items

2

1

String(100)

registryKey

Items

2

0:1

String(100)

ticketCode

Items

2

0:1

String(36)

errorCode

Items

2

0:1

String(6)

errorDescription

Items

2

0:1

String(60)

errorDetail

Items

2

0:1

String(220)

statusCode

Items

2

0:1

String(1)

statusDescription

Items

2

0:1

String(25)

active

Items

2

0:1

boolean(true : false)

receiptNumberItems20:1String(44)
deleteTypeItems20:1String(1)
registryPriorityItems20:1String(1)
integrationQueueItems20:1String(1)
streamingErrorsItems20:1-
streamingErrorCodestreamingErrors30:1String(6)
streamingErrorDetailstreamingErrors30:1String(220)
xmlRetResponseItems20:1       String(999)
lastRecNo-11Int(9999)
maxRecNo-11Int(9999)


  • type – Determina o agrupamento do retorno que pode ser por ticketCode (TAFTICKET) ou registryKey (TAFKEY), o agrupamento depende dos parâmetros enviados no request, quando o registryKey é informado e o ticketCode omitido, o  retorno será por registryKey caso contrário por ticketCode.
  • code – Código do registro indicado no atributo type.
  • items – Itens do response.
  • success – informa que o envio do registro pelo método POST  foi realizado com sucesso.
  • proccessed – Informa se o registro foi processado (Job2) e integrado com sucesso no seu respectivo cadastro.
  • description – Descrição do status atual do registro.
  • registryKey – código do TAFKEY, esse atributo somente é exibido quando type for igual a ticketCode.
  • ticketCode – código do TAFTICKET, esse atributo somente é exibido quando type for igual a registryKey.
  • errorCodeCódigo do erro contido no campo TAFCODERR na tabela TAFXERP, atributo exibido somente quando proccessed for igual a false.
  • errorDescription – Descrição do errorCode, atributo exibido somente quando proccessed for igual a false.
  • errorDetail – Detalhes do erro, alguns tipos de erros possuem detalhes e são armazenados no campo TAFERR na tabela TAFXERP, atributo exibido somente quando proccessed for igual a false.
  • statusCode – Status do registro no TAF, atributo exibido somente quando proccessed for igual a true.
  • statusDescription – Descrição do status no TAF, atributo exibido somente quando proccessed for igual a true.
  • active – Informa se o registro está ativo no TAF, atributo exibido somente quando proccessed for igual a true.
  • receiptNumber - Recibo de autorização do registro no governo.
  • deleteType - Status da exclusão. Retorna 1 caso o evento excluído esteja transmitido, e 0 caso não esteja transmitido. O atributo será retornado somente para os eventos de excluão através do S-3000.
  • registryPriority: Retornar a prioridade definida para o registro, atributo exibido somente quando proccessed for igual a false.
  • integrationQueue: Retorna o status de fila do registro. Retorna branco quando o registro não foi definido para integração utilizando fila de processamento (atributo integrationQueue do método POST), retorna 'F' quando o registro foi retornado para a fila de processamento ou 'R' quando o erro da integração é impeditivo e o registro foi rejeitado pelo TAF. Atributo exibido somente quando proccessed for igual a false.
  • lastRecNo - Numero do RecNo do ultimo registro retornado na requisição.
  • maxRecNo - Informa o numero do RecNo do ultimo registro relacionado a consulta, deve ser utilizado juntamente com o lastRecNo para controlar a paginação e garantir o retorno de todos os registros.
  • streamingErrors – Agrupa todos os erros de transmissão retornados do Governo para o TAF. Os erros são listados por streamingErrorCode e streamingErrorDetail.
  • xmlRetResponse - XML de retorno do governo em sua integralidade (sem nenhuma edição) em base 64. 
  • streamingErrorCode – Código do erro retornado pelo Governo para o TAF, após transmissão do registro.
  • streamingErrorDetail – Descrição do erro retornado pelo Governo para o TAF, após transmissão do registro.


Exemplos de requisição utilizando o método GET:


  • Consulta pelo ticketCode:

Request:

http://172.16.31.214:8085/rest/wstafst2?sourceBranch=01&ticketCode=WIO9753123654789789363655241452363&startRecNo=0



Bloco de código
languagejs
themeEclipse
titleResponse:
{
  "type": "ticketCode",
  "code": "WIO9753123654789789363655241452363",
  "items": [
    {
      "success": true,
      "proccessed": false,
      "description": "Aguardando Processamento.",
      "registryKey": "KEYIO7878874854545454998598525",
      "errorCode": "",
      "errorDescription": "",
      "errorDetail": "",
      "receiptNumber":""
    },
    {
      "success": true,
      "proccessed": false,
      "description": "Aguardando Processamento.",
      "registryKey": "KEYYZE7878RE4854545454998598576",
      "errorCode": "",
      "errorDescription": "",
      "errorDetail": "",
      "receiptNumber":""
    }
  ],
  "lastRecNo": 82,
  "maxRecNo": 82
}



Bloco de código
languagejs
themeEclipse
titleResponse após a execução do processamento:
{

  "type": "ticketCode",
  "code": "WIO9753123654789789363655241452363",
  "items": [
    {
      "success": true,
      "proccessed": false,
      "description": "Registro Inconsistente.",
      "registryKey": "KEYIO7878874854545454998598525",
      "errorCode": "000007",
      "errorDescription": "A operacao solicitada no XML esta em desacordo com o cenario do registro na base do TAF",
      "errorDetail": "",
      "receiptNumber":""
    },
    {
      "success": true,
      "proccessed": true,
      "description": "Registro Processado.",
      "registryKey": "KEYYZE7878RE4854545454998598576",
      "statusCode": " ",
      "statusDescription": "Registro Integrado",
      "active": true,
      "receiptNumber":"2.2.558716721752812458585"
    },
    {
      "success": true,
      "proccessed": true,
      "description": "Registro Processado.",
      "registryKey": "KEYYZE7878RE4854545454998598589",
      "statusCode": "",
      "statusDescription": "Registro Integrado",
      "active": false,
      "receiptNumber": "",
      "deleteType": "0"
    }
  ],
  "lastRecNo": 82,
  "maxRecNo": 82
}

Observação: O exemplo acima contem os 2 tipos de retorno possíveis para um TAFKEY, o atributo proccessed define se vão ser apresentados os atributos de Erro ou de Sucesso conforme descrito acima na tabela de estrutura da resposta do método GET.


  • Consulta pelo ticketCode + registryKey:

Request:

http://172.16.31.214:8085/rest/wstafst2?ticketCode=WIO9753123654789789363655241452363&RegistryKey=KEYYZE7878RE4854545454998598576&startRecNo=0


Bloco de código
languagejs
themeEclipse
titleResponse:
{
  "type": "ticketCode",
  "code": "WIO9753123654789789363655241452363",
  "items": [
    {
      "success": true,
      "proccessed": false,
      "description": "Aguardando Processamento do Job2.",
      "registryKey": "KEYYZE7878RE4854545454998598576",
      "errorCode": "",
      "errorDescription": "",
      "errorDetail": "",
      "receiptNumber":""
    }
  ],
  "lastRecNo": 81,
  "maxRecNo": 81
}
Aviso
titleAtenção!

Quando a consulta for por ticketCode + registryKey o retorno será agrupado por ticketCode.


  • Consulta pelo registryKey:

Request:

http://172.16.31.214:8085/rest/wstafst2?registryKey=KEYYZE7878RE4854545454998598576&startRecNo=0


Bloco de código
languagejs
themeEclipse
titleResponse:
{
  "type": "registryKey",
  "code": "KEYYZE7878RE4854545454998598576",
  "items": [
    {
      "success": true,
      "proccessed": false,
      "description": "Aguardando Processamento do Job2.",
      "ticketCode": "WIO9753123654789789363655241452363",
      "errorCode": "",
      "errorDescription": "",
      "errorDetail": "",
      "receiptNumber":""
    }
  ],
  "lastRecNo": 80,
  "maxRecNo": 80
}


Controle de Paginação:

Quando o retorno de uma requisição ultrapassa o valor de 850 Kb a mensagem de resposta é "quebrada" e retornada com o conteúdo até então incrementado, exemplo:

Bloco de código
themeEclipse
titleExemplo de Paginação
{
  "type": "ticketCode",
  "code": "WIO9753123654789789363655241452363",
  "items": [
    {
      "success": true,
      "proccessed": false,
      "description": "Aguardando Processamento",
      "registryKey": "KEYIO7878874854545454998598525",
      "errorCode": "",
      "errorDescription": "",
      "errorDetail": "",
      "receiptNumber":""
    },
*
*
*
{several items}
*
*
*
    {
      "success": true,
      "proccessed": false,
      "description": "Aguardando Processamento",
      "registryKey": "KEYQIU7878RE4854545454998598544",
      "errorCode": "",
      "errorDescription": "",
      "errorDetail": "",
      "receiptNumber":""

    }
  ],
  "lastRecNo": 150,
  "maxRecNo": 322
}

No exemplo acima a consulta retornou até o registro 150, sendo que o registro com maior RecNo pertencente a consulta é o 322, isso não quer dizer que foram retornados 150 registros e que faltam 172, o RecNo apenas informa a sequencia do registro na tabela TAFST2 porém o lastRecNo menor que o maxRecNo indica que ainda existem registro a serem retornados para a chave requisitada. Para o retorno dos demais registros deve-se realizar uma nova requisição com o startRecNo igual a lastRecNo + 1, este procedimento deve ser adotado  até que o lastRecNo seja igual ao maxRecNo conforme exemplo abaixo:


Request:

http://172.16.31.214:8085/rest/wstafst2?ticketCode=WIO9753123654789789363655241452363&startRecNo=151


Bloco de código
themeEclipse
titleResponse
{
  "type": "ticketCode",
  "code": "WIO9753123654789789363655241452363",
  "items": [
    {
      "success": true,
      "proccessed": false,
      "description": "Aguardando Processamento",
      "registryKey": "KEYIO7878874854545454998598888",
      "errorCode": "",
      "errorDescription": "",
      "errorDetail": "",
      "receiptNumber":""
    },
*
*
*
{several items}
*
*
*
    {
      "success": true,
      "proccessed": false,
      "description": "Aguardando Processamento",
      "registryKey": "KEYQIU7878RE4854545454998598987",
      "errorCode": "",
      "errorDescription": "",
      "errorDetail": "",
      "receiptNumber":""
    }
  ],
  "lastRecNo": 322,
  "maxRecNo": 322
}




DELETE


Descrição do Método: O método DELETE permite excluir toda a cadeia de integração de um TAFTICKET; Um ticket submetido a exclusão tem seus TAFKEYS avaliados, rastreados e excluídos, desde a sua inclusão na TAFST2 e TAFXERP até o cadastro no TAF caso já tenha ocorrido o Processamento. 


Estrutura da mensagem enviada no DELETE (Request):

Request:

http://172.16.31.214:8085/rest/wstafst2?sourceBranch=T1D MG 01

ParâmetroDescriçãoObrigatório
sourceBranchTAFFILOC
  • O Parâmetro sourceBranch deve ser enviado como parâmetro da requisição (QueryParam) para identificar qual grupo de empresas a filial pertence, na ausência deste parâmetro o sistema irá procurar a mensagem a ser excluída na primeira filial configurada na chave PrepareIn na seção TAF_CFGJOB do arquivo appserver.ini do serviço REST. 
Aviso

A não utilização deste parâmetro em ambientes com mais de 1 grupo de empresas pode gerar exclusões indevidas no grupo de empresas utilizado pelo sistema seguindo a regra destacada acima. 

Estrutura do corpo da Mensagem (Body - Request):


Atributo

Pai

Nivel

Ocorrência

Formato

deleteTicket

-

1

1

-

ticketCode

deleteTicket

2

1:N

String(36)


Estrutura da mensagem de retorno do método DELETE (Response):


Atributo

Pai

Nivel

Ocorrência

Formato

success

-

1

1

Lógico(true : false)

Bloco de código
languagejs
themeEclipse
titleExemplo de mensagem para o método DELETE:
 {
	"deleteTicket" : [{"ticketCode":"WIO9753123654789789363655241452363"}
							,{"ticketCode":"UIO9753123654789789363655241452363"}
							,{"ticketCode":"F95975312365478978936365524145236352"}
							,{"ticketCode":"ZTF059753123654789789363655241452363"}
							,{"ticketCode":"AF0597531236547897893636552414523635"}
				 			 ]
}



Bloco de código
languagejs
themeEclipse
titleResponse:
{"success": true}


Exemplo de Consumo do Serviço


Bloco de código
languagedelphi
themeEclipse
titleClient REST
#Include 'Protheus.ch'
Function WSCTAFST2(cMetodo)
	Local oRestClient := FWRest():New("http://172.16.31.214:8085")
	Local oObj   	:= Nil
	Local aHeader := {}
	Local cBody	:= {}
	Local lContinue := .T.
	Local nPag		:= 0
	Local nRec		:= 0
	
	// inclui o campo Authorization no formato <usuario>:<senha> na base64
	Aadd(aHeader, "Authorization: Basic " + Encode64("usertotvs:totvs123456"))
	
	If cMetodo == 'POST'
	
		oRestClient:setPath("/rest/wstafst2/")
		
		cBody := '{'
		cBody += '"ticketCode": "WIO9753123654789789363655241452363",'
		cBody += '"lote": ['
		cBody += '{'
		cBody += '"sourceBranch": "0100",'	
		cBody += '"messageType": "2",''
		cBody += '"messageSequential": "001",'
		cBody += '"registryType": "S-1010",'
		cBody += '"registryKey": "KEYIO7878874854545454998598525",'
		cBody += '"integrationMessage": "PGVTb2NpYWw+PGV2dFRhYlJ1YnJpY2EgaWQ9J1MtMTAxMDEzMDUyMDE2MTU0MDE2JyB2ZXJzYW89JzEuMSc+PGlkZUV2ZW50bz48dHBBbWI+MzwvdHBBbWI+PHByb2NFbWk+MTwvcHJvY0VtaT48dmVyUHJvYz48L3ZlclByb2M+PC9pZGVFdmVudG8+PGlkZUVtcHJlZ2Fkb3I+PHRwSW5zYz4xPC90cEluc2M+PG5ySW5zYz41Mz'
		cBody += 'ExMzc5MTAwMDEyMjwvbnJJbnNjPjwvaWRlRW1wcmVnYWRvcj48aW5mb1J1YnJpY2E+PGFsdGVyYWNhbz48aWRlUnVicmljYT48Y29kUnVicj45OTg8L2NvZFJ1YnI+PGluaVZhbGlkPjIwMTYtMDM8L2luaVZhbGlkPjwvaWRlUnVicmljYT48ZGFkb3NSdWJyaWNhPjxkc2NSdWJyPkJBU0UgUEVOU0FPIFBHVE88L2RzY1J1YnI+PG5hdFJ1YnI+OTk4OTwvbmF'
		cBody += '0UnVicj48dHBSdWJyPjM8L3RwUnVicj48Y29kSW5jQ1A+MDA8L2NvZEluY0NQPjxjb2RJbmNJUlJGPjAwPC9jb2RJbmNJUlJGPjxjb2RJbmNGR1RTPjAwPC9jb2RJbmNGR1RTPjxjb2RJbmNTSU5EPjAwPC9jb2RJbmNTSU5EPjxyZXBEU1I+TjwvcmVwRFNSPjxyZXAxMz5OPC9yZXAxMz48cmVwRmVyaWFzPk48L3JlcEZlcmlhcz48cmVwUmVzYz5OPC9yZXBS'
		cBody += 'ZXNjPjwvZGFkb3NSdWJyaWNhPjwvYWx0ZXJhY2FvPjwvaW5mb1J1YnJpY2E+PC9ldnRUYWJSdWJyaWNhPjwvZVNvY2lhbD4=",'
		cBody += '"integrationDate": "20161005",'
		cBody += '"integrationTime": "14:15:36"'
		cBody += '},'
		cBody += '{'
		cBody += '"sourceBranch": "0100",'
		cBody += '"messageType": "2",'
		cBody += '"messageSequential": "001",'
		cBody += '"registryType": "S-2100",'
		cBody += '"registryKey": "KEYYZE7878RE4854545454998598576",'
		cBody += '"integrationMessage": "PGVTb2NpYWw+PGV2dENhZEluaWNpYWwgSWQ9J0lEMTUzMTEzNzkxMDAwMDAwMjAxNjEyMDkxNDU5NTQwMDAwMSc+PGlkZUV2ZW50bz48aW5kUmV0aWY+MTwvaW5kUmV0aWY+PG5yUmVjaWJvPjwvbnJSZWNpYm8+PHRwQW1iPjM8L3RwQW1iPjxwcm9jRW1pPjE8L3Byb2NFbWk+PHZlclByb2M+MS4wPC92ZXJQcm9jPjwvaWRlRXZ'
		cBody += 'lbnRvPjxpZGVFbXByZWdhZG9yPjx0cEluc2M+MTwvdHBJbnNjPjxuckluc2M+NTMxMTM3OTE8L25ySW5zYz48L2lkZUVtcHJlZ2Fkb3I+PHRyYWJhbGhhZG9yPjxjcGZUcmFiPjMyMDA5MDM3ODQ2PC9jcGZUcmFiPjxuaXNUcmFiPjEyMjAzNjcxODQ0PC9uaXNUcmFiPjxubVRyYWI+IEdUIFhNQlBFUkhVSlpOQ1FGU0lWTEFPRDwvbm1UcmFiPjxzZXhvPk08L'
		cBody += '3NleG8+PHJhY2FDb3I+MTwvcmFjYUNvcj48ZXN0Q2l2PjI8L2VzdENpdj48Z3JhdUluc3RyPjwvZ3JhdUluc3RyPjxuYXNjaW1lbnRvPjxkdE5hc2N0bz4xOTc2LTA0LTEzPC9kdE5hc2N0bz48Y29kTXVuaWM+MTIwMDEwNTwvY29kTXVuaWM+PHVmPlNQPC91Zj48cGFpc05hc2N0bz4wMTM8L3BhaXNOYXNjdG8+PHBhaXNOYWM+MDEzPC9wYWlzTmFjPjxubU1'
		cBody += 'hZT5ORVVTQSBDQVJWQUxITyBORVZFUzwvbm1NYWU+PG5tUGFpPkpPU0UgUkVZTkFMRE8gQ1JFU1BPIE5FVkVTPC9ubVBhaT48L25hc2NpbWVudG8+PGRvY3VtZW50b3M+PENUUFM+PG5yQ3Rwcz4wMDAzNTgwMDwvbnJDdHBzPjxzZXJpZUN0cHM+MDAwNzM8L3NlcmllQ3Rwcz48dWZDdHBzPlNQPC91ZkN0cHM+PC9DVFBTPjxSRz48bnJSZz4xNi43MjEuMDMwP'
		cBody += 'C9uclJnPjxvcmdhb0VtaXNzb3I+U1NQPC9vcmdhb0VtaXNzb3I+PGR0RXhwZWQ+MTk4Mi0wMy0wMjwvZHRFeHBlZD48L1JHPjxDTkg+PG5yUmVnQ25oPjAwMDAwMDAwMDA8L25yUmVnQ25oPjx1ZkNuaD48L3VmQ25oPjxkdFZhbGlkPjwvZHRWYWxpZD48Y2F0ZWdvcmlhQ25oPjwvY2F0ZWdvcmlhQ25oPjwvQ05IPjwvZG9jdW1lbnRvcz48ZW5kZXJlY28+PGV'
		cBody += '4dGVyaW9yPjxwYWlzUmVzaWQ+MDEzPC9wYWlzUmVzaWQ+PGRzY0xvZ3JhZD5BTEJBPC9kc2NMb2dyYWQ+PG5yTG9ncmFkPjE0NDQ8L25yTG9ncmFkPjxiYWlycm8+UFEuIEpBQkFRVUFSQTwvYmFpcnJvPjxubUNpZD5TQU4gTFVJWjwvbm1DaWQ+PGNvZFBvc3RhbD4wNDM0NjAwMDwvY29kUG9zdGFsPjwvZXh0ZXJpb3I+PC9lbmRlcmVjbz48aW5mb0RlZmlja'
		cBody += 'WVuY2lhPjxkZWZGaXNpY2E+TjwvZGVmRmlzaWNhPjxkZWZWaXN1YWw+TjwvZGVmVmlzdWFsPjxkZWZBdWRpdGl2YT5OPC9kZWZBdWRpdGl2YT48ZGVmTWVudGFsPk48L2RlZk1lbnRhbD48ZGVmSW50ZWxlY3R1YWw+TjwvZGVmSW50ZWxlY3R1YWw+PHJlYWJSZWFkYXA+TjwvcmVhYlJlYWRhcD48L2luZm9EZWZpY2llbmNpYT48YXBvc2VudGFkb3JpYT48dHJ'
		cBody += 'hYkFwb3NlbnQ+TjwvdHJhYkFwb3NlbnQ+PC9hcG9zZW50YWRvcmlhPjxjb250YXRvPjxmb25lUHJpbmM+MDAxMzQ3MzU1NTUgLzwvZm9uZVByaW5jPjxmb25lQWx0ZXJuYXQ+MDExNzg5Nzk4Nzk4PC9mb25lQWx0ZXJuYXQ+PGVtYWlsQWx0ZXJuYXQ+UkVZTkFMRE9ASE9UTUFJTC5DT008L2VtYWlsQWx0ZXJuYXQ+PC9jb250YXRvPjwvdHJhYmFsaGFkb3I+P'
		cBody += 'HZpbmN1bG8+PG1hdHJpY3VsYT4wMDAwMDAwMDAwMDAwMDAwMDAwNzwvbWF0cmljdWxhPjx0cFJlZ1RyYWI+MTwvdHBSZWdUcmFiPjx0cFJlZ1ByZXY+MTwvdHBSZWdQcmV2PjxpbmZvUmVnaW1lVHJhYj48L2luZm9SZWdpbWVUcmFiPjxpbmZvQ29udHJhdG8+PGNvZENhdGVnPjMwMjwvY29kQ2F0ZWc+PHJlbXVuZXJhY2FvPjx2clNhbEZ4PjEwMDAuMDA8L3Z'
		cBody += 'yU2FsRng+PHVuZFNhbEZpeG8+NTwvdW5kU2FsRml4bz48L3JlbXVuZXJhY2FvPjxkdXJhY2FvPjx0cENvbnRyPjE8L3RwQ29udHI+PC9kdXJhY2FvPjxsb2NhbFRyYWJhbGhvPjwvbG9jYWxUcmFiYWxobz48L2luZm9Db250cmF0bz48L3ZpbmN1bG8+PC9ldnRDYWRJbmljaWFsPjwvZVNvY2lhbD4=",'
		cBody += '"integrationDate": "",'
		cBody += '"integrationTime": ""'
		cBody += '}]'
		cBody += '}'
	
		// define o conteúdo do body
		oRestClient:SetPostParams(cBody)
		 
		If oRestClient:Post(aHeader)
		   ConOut("POST", oRestClient:GetResult())
		Else
		   ConOut("POST", oRestClient:GetLastError())
		EndIf
		
	ElseIf cMetodo == "GET"
	
		While lContinue
			nPag++
			oRestClient:setPath("/rest/wstafst2?TicketCode=WIO9753123654789789363655241452363&startRecNo=" + AllTrim(Str(nRec)))
			If oRestClient:Get(aHeader)
				ConOut("Pag: " + AllTrim(Str(nPag)))
			   	ConOut("GET", oRestClient:GetResult())
			  	
				If FWJsonDeserialize(oRestClient:GetResult(),@oObj)
			   		If oObj:lastRecNo == oObj:maxRecNo
			   			lContinue := .F.
			   		Else
			   			nRec := oObj:lastRecNo+1
			   		EndIf
			   	EndIf
			   	oObj := Nil
			Else
			   ConOut("GET", oRestClient:GetLastError())
			   lContinue := .F.
			EndIf
		End
		ConOut("------FIM------")
	ElseIf cMetodo == "DELETE"
		
		cBody := '{"deleteTicket" : [{"ticketCode":"WIO9753123654789789363655241452363"}'
		cBody += ',{"ticketCode":"UIO9753123654789789363655241452363"}]}'
		If oRestClient:Delete(aHeader,cBody)
		   ConOut("DELETE", oRestClient:GetResult())
		Else
		   ConOut("DELETE", oRestClient:GetLastError())
		EndIf
		
	Else
		ConOut("Método Inválido")
	EndIf
	
	FreeObj(oRestClient)
Return 
Bloco de código
languagejs
themeEclipse
titleExemplo de Resposta do método GET com RESTFAULT
  "errorCode": 101,
  "errorMessage": "obrigatorio o envio do parametro ticketCode ou registryKey"
}


Códigos De Erros De Validação:


  • 800 – Campo não informado na estrutura do arquivo.
  • 801 – Campo obrigatório não enviado.
  • 802 – Campo com valor inválido.
  • 803 – TAFFIL não encontrado no complemento de empresas.

    Aviso
    titleAtenção!

    No método POST caso o primeiro item do lote não esteja com o TAFFIL cadastrado no complemento de empresas o sistema irá rejeitar o lote inteiro, caso contrario é realizado uma avaliação item a item verificando se a filial é válida e se pertence ao mesmo grupo de empresas no TAF, neste caso é rejeitado somente os registros inválidos dentro do lote.

  • 804 – Layout Inválido.
  • 805 – Código de Prioridade inválido!
  • 806 – Campo com erro na codificação ou criptografia
  • 807 – Código de Fila inválido!
  • 808 – Estrutura da tabela TAFST2 está desatualizada
  • 809 - Não há configuração de empresas na chave PrepareIn seção TAF_CFGJOB
  • 810 - Chave # de Identificação de filial não encontrada.
  • 811 - Não foi possível identificar a filial # no corpo da mensagem.
  • 812 - Código da Filial ERP # não pertence ao mesmo Grupo de Empresas no TAF considerando os registros integrados anteriormente neste lote.
  • 813 - O TAFKEY # já existe na TAFST2 e encontra-se pendente de processamento ou em processamento.
  • 814 - O Xml Contido no campo TAFMSG (integrationMessage) esta em desacordo com as versoes suportadas pelo TAF. Integracao da Versao 1.0 disponivel apenas para eventos SESMT

Legenda:

# - valor variável.

Bloco de código
languagejs
titleExemplo de mensagem POST:Exemplo de Resposta do método POST com erro de validação no LOTE.
{
    "coderr": 803,
    "description": "O valor do campo sourceBranch (TAFFIL)  não está no cadastro no complemento de empresas."
}
Bloco de código
languagejs
titleExemplo de mensagem POST:Exemplo de Resposta do método POST com erro de validação no ITEM:
{
  "ticketCode": "WIO9753123654789789363655241452363",
  "registryKey": [
    {
      "key": "KEYIO7878874854545454998598525",
      "success": false,
      "error": [
        {
          "coderr": 801,
          "description": "Campo TAFFIL (sourceBranch)  e Obrigatorio."
        },
        {
          "coderr": 803,
          "description": "O valor do campo TAFFIL (sourceBranch)  nao esta cadastro no complemento de empresas."
        }
       {
          "coderr": 805,
          "description": "Codigo de Prioridade invalido! Codigo enviado: '8'. Codigos validos: 0 - Urgente, 1 - Prioridade Critica, 2 - Prioridade Alta, 3 - Prioridade Media, 4 - Prioridade Baixa, 5 - Nao Prioritario"
        }
      ]
    },
    {
      "key": "KEYYZE7878RE4854545454998598576",
      "success": true
    },
    {
      "key": "KEYQWE7878RE4854545454998598571",
      "success": true
    },
    {
      "key": "KEYQIU7878RE4854545454998598544",
      "success": true
    }
  ],
  "keyAmount": 4
}


RESTFAULT*


  • 701 - startRecno e ticketCode não informados no GET (é obrigatório que pelo menos 1 deles seja informado)
  • 702 - Erro na criação/abertura da tabela TAFST2 ou TAFXERP
  • 703 - O parâmetro searchMode deve ser preenchido com 1 ou 2.
  • 704 - Arquivo vazio (Não foi enviado uma mensagem no body do POST)
  • 705 - Erro ao realizar parser da mensagem (o arquivo enviado no Body não é um json válido)


Aviso
titleStatus HTTP

Apesar do código de erro iniciar com 7 o status HTTP de um request que submetido a RestFault é 500 - Erro Interno no Servidor.


Image Added

*Será liberado juntamente com o pacote de atualização e-Social 2.4.}