Á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 na visão TOTVS  clique aqui.

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

 


Índice

Índice
indent30px
absoluteUrltrue

Definição do Serviço

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.

 

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).

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

 

Aviso
titleAtenção!

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

 

Estrutura da mensagem de retorno do POST (Response):

 

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

Atributo

Pai

Nivel

Ocorrência

Formato

ticketCode

-

1


1

String(36)

registryKey

lote

-

1


1:N

-

key

sourceBranch

registryKey

lote

2

TAFFIL

1

String(

100

40)

success

messageType

registryKey

lote

2

TAFCODMSG

1

boolean

String(

true : false

01)

error

messageSequential

registryKey

lote

2

0:N

-

coderr

error

TAFSEQ

1

String(03)

registryType

lote

2

TAFTPREG

3

1

Int

String(

3

10)

description

registryKey

lote

error

2

3

TAFKEY

1

String(100)

keyAmount

integrationMessage

registryKey

lote

2

TAFMSG

1

Int(9999)

  • ticketCode – atributo raiz
  • registryKey – Array contendo os TAFKEY requisitados.
  • 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.
  •  

    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}
    *
    *
    *
    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"
        	},
    		{"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" :  ""
      		}
      	]
    }
    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®istryKey=KEYQWE7878RE4854545454998598571

     

     

       
       
       
       

     

     

     

     

     

     

    • 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.
    • 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.

     

    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)

     

    • 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.
    • errorCode – Có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.
    • ative – Informa se o registro está ativo no TAF, atributo exibido somente quando proccessed for igual a true.

     

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

     

    • Consulta pelo ticketCode:

    Request:

    http://172.16.31.214:8085/rest/wstafst2?ticketCode=WIO9753123654789789363655241452363

     

     

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

     

     

    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ódigolanguagejs
    Bloco de código
    themeEclipse
    titleResponse
    após a execução do processamento:
    {
    
      "type": "ticketCode",
      "code": "WIO9753123654789789363655241452363",
      "items": [
        {
          "success": true,
          "proccessed": false,
          "description": "
    Registro
    Aguardando 
    Inconsistente.
    Processamento",
          "registryKey": "
    KEYIO7878874854545454998598525
    KEYIO7878874854545454998598888",
          "errorCode": "
    000007
    ",
          "errorDescription": "
    A operacao solicitada no XML esta em desacordo com o cenario do registro na base do TAF
    ",
          "errorDetail": "",
          "
    errorDetail
    receiptNumber":
    "" },
    ""
        },
    *
    *
    *
    {several items}
    *
    *
    *
        {
          "success": true,
          "proccessed": 
    true
    false,
          "description": "
    Registro
    Aguardando 
    Processado.
    Processamento",
          "registryKey": "
    KEYYZE7878RE4854545454998598576
    KEYQIU7878RE4854545454998598987",
          "
    statusCode
    errorCode": "",
          "errorDescription": "",
          "
    statusDescription
    errorDetail": "
    Registro Integrado
    ",
          "
    active
    receiptNumber":
    true
    ""
        }
      ],
      
    } ]
    "lastRecNo": 322,
      "maxRecNo": 322
    }

    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




    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?ticketCode=WIO9753123654789789363655241452363®istryKey=KEYYZE7878RE4854545454998598576

    /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
    titleResponse:
    {
      "type": "ticketCode",
      "code": "WIO9753123654789789363655241452363",
      "items": [
        {
          "success": true,
          "proccessed": false,
          "description": "Aguardando Processamento do Job2.",
          "registryKey": "KEYYZE7878RE4854545454998598576",
          "errorCode": "",
          "errorDescription": "",
          "errorDetail": ""
        }
      ]
    }

     

    • Consulta pelo registryKey:

    Request:

    http://172.16.31.214:8085/rest/wstafst2?registryKey=KEYYZE7878RE4854545454998598576

    Bloco de código
    languagejs
    themeEclipse
    title
    Response
    Exemplo de mensagem para o método DELETE:
     {
    	"deleteTicket" : [{"
    type
    ticketCode":
    "
    registryKey", "code": "KEYYZE7878RE4854545454998598576", "items": [ { "success": true, "proccessed": false, "description": "Aguardando Processamento do Job2.", "ticketCode": "WIO9753123654789789363655241452363", "errorCode": "", "errorDescription": "", "errorDetail": "" } ] }
    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

     

    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):

    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 aHeader := {}
    	Local cBody	:= {}
    	Local nRegs	:= 0
    	Local nCont	:= 0
    	
    	// inclui o campo Authorization no formato <usuario>:<senha> na base64
    	Aadd(aHeader, "Authorization: Basic " + Encode64("usertotvs:totvs123456"))
    	
    	If cMetodo == 'POST'
    		
    		FOpnTabTAf("TAFST1","TAFST1")
    		nRegs	:=	TAFST1->( LastRec() )
    		TAFST1->( dbGotop() )
    		
    	
    		oRestClient:setPath("/rest/wstafst2/")
    		
    		cBody := '{'
    		cBody += '"ticketCode": "' + TAFGTicket() +'",'WVuY2lhPjxkZWZGaXNpY2E+TjwvZGVmRmlzaWNhPjxkZWZWaXN1YWw+TjwvZGVmVmlzdWFsPjxkZWZBdWRpdGl2YT5OPC9kZWZBdWRpdGl2YT48ZGVmTWVudGFsPk48L2RlZk1lbnRhbD48ZGVmSW50ZWxlY3R1YWw+TjwvZGVmSW50ZWxlY3R1YWw+PHJlYWJSZWFkYXA+TjwvcmVhYlJlYWRhcD48L2luZm9EZWZpY2llbmNpYT48YXBvc2VudGFkb3JpYT48dHJ'
    		cBody += '"lote": ['
    		
    		While !TAFST1->( Eof() )
    			
    			if nCont > 0
    				hYkFwb3NlbnQ+TjwvdHJhYkFwb3NlbnQ+PC9hcG9zZW50YWRvcmlhPjxjb250YXRvPjxmb25lUHJpbmM+MDAxMzQ3MzU1NTUgLzwvZm9uZVByaW5jPjxmb25lQWx0ZXJuYXQ+MDExNzg5Nzk4Nzk4PC9mb25lQWx0ZXJuYXQ+PGVtYWlsQWx0ZXJuYXQ+UkVZTkFMRE9ASE9UTUFJTC5DT008L2VtYWlsQWx0ZXJuYXQ+PC9jb250YXRvPjwvdHJhYmFsaGFkb3I+P'
    		cBody += ','	
    			endIf
    			
    			HZpbmN1bG8+PG1hdHJpY3VsYT4wMDAwMDAwMDAwMDAwMDAwMDAwNzwvbWF0cmljdWxhPjx0cFJlZ1RyYWI+MTwvdHBSZWdUcmFiPjx0cFJlZ1ByZXY+MTwvdHBSZWdQcmV2PjxpbmZvUmVnaW1lVHJhYj48L2luZm9SZWdpbWVUcmFiPjxpbmZvQ29udHJhdG8+PGNvZENhdGVnPjMwMjwvY29kQ2F0ZWc+PHJlbXVuZXJhY2FvPjx2clNhbEZ4PjEwMDAuMDA8L3Z'
    		cBody += '{yU2FsRng+PHVuZFNhbEZpeG8+NTwvdW5kU2FsRml4bz48L3JlbXVuZXJhY2FvPjxkdXJhY2FvPjx0cENvbnRyPjE8L3RwQ29udHI+PC9kdXJhY2FvPjxsb2NhbFRyYWJhbGhvPjwvbG9jYWxUcmFiYWxobz48L2luZm9Db250cmF0bz48L3ZpbmN1bG8+PC9ldnRDYWRJbmljaWFsPjwvZVNvY2lhbD4=",'
    			cBody += '"sourceBranchintegrationDate": "' 		+ AllTrim( TAFST1->TAFFIL ) 			+ 	'",'	
    			cBody += '"messageTypeintegrationTime": "' 		+ AllTrim( TAFST1->TAFCODMSG )			+	'","'
    		cBody += '}]'
    			cBody += '"messageSequential": "' 	+ AllTrim( TAFST1->TAFSEQ )				+	'",'
    			cBody += '"registryType": "'		+ AllTrim( TAFST1->TAFTPREG )			+	'",'
    			cBody += '"registryKey": "'			+ AllTrim( TAFST1->TAFKEY )				+	'",'
    			cBody += '"integrationMessage": "'	+ Encode64(AllTrim(TAFST1->TAFMSG))	+	'",'
    			cBody += '"integrationDate": "'		+ DTOS(dDataBase)							+	'",'
    			cBody += '"integrationTime": "'		+ Time() 									+	'"'
    			cBody += '}'
    			nCont++
    			TAFST1->( dbSkip() )
    		EndDo
    		cBody += ']'
    		cBody += '}'
    		
    		TAFST1->( dbCloseArea() )
    		
    		// define o conteúdo do body
    		oRestClient:SetPostParams(cBody)
    		 
    		If oRestClient:Post(aHeader)
    		   ConOut("POST", oRestClient:GetResult())
    		Else
    }'
    	
    		// 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("POSTGET", oRestClient:GetLastError())
    			   lContinue := .F.
    			EndIf
    		End
    		ConOut("------FIM------")
    	ElseIf cMetodo == "DELETE"
    		
    		cBody :== "GET"
    	
    		oRestClient:setPath("/rest/wstafst2?TicketCode=WIO9753123654789789363655241452363") '{"deleteTicket" : [{"ticketCode":"WIO9753123654789789363655241452363"}'
    		cBody += ',{"ticketCode":"UIO9753123654789789363655241452363"}]}'
    		If oRestClient:GetDelete(aHeader,cBody)
    		   ConOut("GETDELETE", oRestClient:GetResult())
    		Else
    		   ConOut("GETDELETE", oRestClient:GetLastError())
    		EndIf
    		
    	Else
    		ConOut("Método Inválido")
    	EndIf
    	
    	ElseIf cMetodo == "DELETE"
    		//necessário Lib label 28012015 ou superior.
    		
    		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 
    

    Códigos de Erro ( RESTFault )

     

    RESTFAULT

  • 101 – Campo Obrigatório não enviado
  • 102 – Erro na criação/abertura de tabelas
  • 103 – Parâmetro/atributo com valor inválido. (Quando a mensagem é enviada no corpo (body) a validação de campo inválido não retorna RESTFAULT)
  • 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."
    }
    104 – Arquivo enviado no “body” vazio.
    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.
    • 804 – Layout Inválido. 

     

    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  "success": false,
    Obrigatorio."
           "error": [ },
            {
              "coderr": 801803,
              "description": "CampoO valor do campo TAFFIL (sourceBranch)  e Obrigatorionao esta cadastro no complemento de empresas."
            }
           {
              "coderr": 805,
            {
      "description": "Codigo de Prioridade invalido! Codigo enviado: '8'. Codigos "coderr"validos: 803,
    0 - Urgente, 1 - Prioridade Critica, 2 -  "description": "O valor do campo TAFFIL (sourceBranch)  nao esta cadastro no complemento de empresas.Prioridade Alta, 3 - Prioridade Media, 4 - Prioridade Baixa, 5 - Nao Prioritario"
            }
          ]
        },
        {
          "key": "KEYYZE7878RE4854545454998598576",
          "success": true
        },
        {
          "key": "KEYQWE7878RE4854545454998598571",
          "success": true
        },
        {
          "key": "KEYQIU7878RE4854545454998598544",
           "success": true
        }
      ],
      "successkeyAmount": true
        }
      ],
      "keyAmount": 4
    }

     

     

    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.