Árvore de páginas

Versões comparadas

Chave

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

Web Service REST

Produto:

TOTVS Automação Fiscal

Versões:

12.1.17+

Este documento tem o objetivo de fornecer informações para utilização do Web Service REST, para consulsta geral de status de consulta de elementos/registros do TOTVS Automação Fiscal, de acordo com o status ou tipo do registro.

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

Nome: WSQueryElementsWSTAFQueryElements

Objetivo: Consultar uma lista de elementos presentes na base de dados do TAF, através de um status tipo pré-definido.

Descrição: O serviço permite, que uma aplicação faça uma consulta generalizada na base de dados do TOTVS Automação Fiscal para Fiscal, para obter uma série de registros/elementos através de um status pré-definido pela aplicação tipo do registro ( de acordo com os status tipos existentes no TAF ).

Métodos: GET


Configurações do Serviço

 

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

Nota
titleImportante

Na Seção seção HTTPURI, a chave PrepareIn deve ser preenchida com o código da empresa/filial principal ou com "All" para todas os grupos de empresas empresas:

PrepareIn para grupo de empresa e filial específica
[HTTPURI]
URL=/rest
PrepareIn=99,01
Instances=1,1 
PrepareIn para grupo de empresa e empresa específica 
[HTTPURI]
URL=/rest
PrepareIn=T1,D MG 01
Instances=1,1 
PrepareIn para todas os grupos de empresas
[HTTPURI]

comentada. A empresa principal deverá estar informada na seção [TAF_CFGJOB]. Não há necessidade da inclusão de mais empresas, pois o próprio WS fará esse controle. Para acessar as demais empresas, basta informar o CNPJ ( CGC ), Inscrição Estadual ( INSCEST ) e Inscrição Municipal ( INSCMUN ) no Header da requisição ao WS.

Segue exemplo de configuração do WS REST:

[HTTPV11]
SOCKETS=HTTPREST
ENABLE=1

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

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

[HTTPJOB]
MAIN=HTTP_START
ENVIRONMENT=P12

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


[OnStart]
JOBS=HTTPJOB,TAF_CFGJOB
RefreshRate=120

URL=/rest PrepareIn=All Instances=1,1

Fonte: REST com ERP Microsiga Protheus

 


Definição dos métodos

 


GET

 


Descrição do Método:

O método GET retorna uma lista de elementos encontrados na base de dados, 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/

wsqueryelements

wstafqueryelements?status=4&registryType=S-1010&startRecNo=0

 


ParâmetroDescriçãoObrigatório
statusStatus do registro no TAF
OC

registryTypeTipo do registro/layout. Exemplo: T007, S-1010...
OC
O
startRecNoRecNo inicial para consultaO
 
sourceBranchCódigo Identificador da filial


    • status - Status do registro na base de dados do TAF. Os códigos válidos podem ser encontrados no Manual de Integração.
  • Obrigatório caso registryType não seja informado.
  • registryType - Tipo do registro (código do campo TAFTPREG). Obrigatório caso status não seja informado.
    • Não é obrigatório.
      Observação: Para consultar Status que seja "em branco" deve-se inserir da seguinte maneira: status: ' '  ( aspas simples espaço aspas simples ). Exemplo:
      http://localhost:8080/rest/WSTAFQueryElements?status=' '&registryType=T001AE&startRecNo=0
      Ou
      http://localhost:8080/rest/WSTAFQueryElements?status=%27%20%27&registryType=T001AE&startRecNo=0
    startRecNoNúmero do RecNo Inicial a ser considerado na consulta. 
    • registryType - Tipo do registro ( código do campo TAFTPREG ). Obrigatório.
    • startRecNo - Número do RecNo Inicial a ser considerado na consulta.
    • sourceBranch - Código Identificador da filial do ERP emissor.


Observação : O Tamanho máximo do Response é

850 

850kB, 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.

 


Estrutura da Resposta do método GET ( Response ):

 


AtributoPai
Nivel
NívelOcorrênciaFormato
type

registryType

-

1

1

-

code

statusCode

-

1

0:1

:N

String(

36-100

1)

Items

-

1

1

-

registryKey

Items

2

1

String(100)

statusCode

Items

2

0:1

String(1)

statusDescription

Items

2

0:1

String(25)

registryType
validateErrorsItems20:1

String(10)

-

validateErrorCode

validateErrors

3

registryTypeDescription

Items

2

0:1

String(

36

6)

validateErrorDetail

validateErrors

Items20:1-

validateErrorCode

validateErrors

3

3

0

0

:1

String(

6)

validateErrorDetail

validateErrors

3

0:1

String(

220)

streamingErrorsItems20:1-

streamingErrorCode

streamingErrors

3

0:1

String(6)

streamingErrorDetail

streamingErrors

3

0:1

String(220)

registryProtocol

Items

2

0:1

String(60)

lastRecNo-11Int(9999)
maxRecNo-11Int(9999)

 

type – Determina o agrupamento do retorno que pode ser por status (


  • registryType – Tipo do registro ( conforme campo TAFTPREG ).
  • statusCode – Status do registro no TAF
) ou registryType (TAFTPREG), o agrupamento depende dos parâmetros enviados no request, quando o status é informado e o registryType omitido, o retorno será por status, caso contrário por registryType.
  • code – Código do registro indicado no atributo type.
    • , atributo exibido somente quando o parâmetro status for informado na requisição.
    • items – Itens do response.
    • registryKey – código do TAFKEY. Essa informação sempre será retornada, para que a aplicação de origem consiga identificar o registro em sua própria base de dados.
    • statusCode – Status do registro no TAF, atributo exibido somente quando
    o agrupamento do request for por registryType
    • o parâmetro status não for informado na requisição.
    • statusDescription – Descrição do status no TAF, atributo exibido somente quando
    o agrupamento do request for por registryTypevalidateErrors – Agrupa todos
    • o parâmetro status não for informado na requisição.
  • registryType – Tipo do registro (conforme campo TAFTPREG), atributo exibido somente quando o agrupamento do request for por status.
  • registryTypeDescription – Descrição do tipo do registro (conforme campo TAFTPREG), atributo exibido somente quando o agrupamento do request for por status.
    • validateErrors – Agrupa todos os erros de layout identificado pelo processo de validação do TAF. Os erros são listados por validateErrorCode e validateErrorDetail.
    • validateErrorCode – Código do erro identificado pelo processo de validação do TAF.
    • validateErrorDetail – Descrição do erro identificado pelo processo de validação do TAF.
    • streamingErrors – Agrupa todos os erros de transmissão retornados do Governo para o TAF. Os erros são listados por streamingErrorCode e streamingErrorDetail.
    • 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.
    • registryProtocol – Recibo retornado do Governo para o TAF após a transmissão do registro ter sido realizada com sucesso.
    • 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.

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

     


    Consulta

    por status

    sem informar o STATUS:


    Request:

    GET http://

    172.16.31.214:8085

    localhost:8080/rest/

    wsqueryelements2

    WSTAFQueryElements?

    status

    registryType=

    4

    T011&startRecNo=

    0

    70 HTTP/1.1

    Accept-Encoding: gzip,deflate
    Host: localhost:8080
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

     

     


    Bloco de código
    languagejs
    themeEclipse
    titleResponse:
      {
       "
    type
    registryType": "
    status
    T011",
       "
    code
    itens":  
    "4",
      
    "items":
    [
                {
             "registryKey": "
    KEY000001S-220020170101
    20170620141315DMG01_0000000571",
             "
    registryType
    statusCode": "
    S-2200
    0",
             "
    registryTypeDescription
    statusDescription": "
    Admissão
    Registro validado 
    do
    pelo 
    Funcionário
    TAF"
    ,
    
          },
       
    "registryProtocol":
     
    "20170520081000S2200"
        
    },
        {
             "registryKey": "
    KEY000001S-210020170101
    20170620141315DMG01_0000000572",
             "
    registryType
    statusCode": "
    S-2100
    0",
             "
    registryTypeDescription
    statusDescription": "
    Cadastro
    Registro 
    Inicial
    validado 
    do
    pelo 
    Funcionário"
    TAF"
          },
            
    "registryProtocol
        {
             "registryKey": "
    20170521151402S2100
    20170620141315DMG01_0000000573",
        
    } ],
         "
    lastRecNo
    statusCode": 
    2
    "0",
      
    "maxRecNo
           "statusDescription": 
    2 }

     

    • Consulta por registryType:

    Request:

    http://172.16.31.214:8085/rest/wsqueryelements2?registryType=S-2200&startRecNo=0

     

    Bloco de código
    languagejs
    themeEclipse
    titleResponse após a execução do processamento:
    { "type": "registryType", "code": "S-2200", "items": [ {
    "Registro validado pelo TAF"
          },
                {
             "registryKey": "20170620141315DMG01_0000000574",
             "statusCode": "0",
             "statusDescription": "Registro validado pelo TAF"
          
    "registryKey": "KEY000001S-220020170101",
    }
       
    "statusCode": "4"
    ],
    
       "
    statusDescription
    lastRecNo": 
    "Registro Transmitido com sucesso"
    73,
       
    "
    registryProtocol
    maxRecNo": 
    "20170520081000S2200" }, { "registryKey": "KEY004301S-220020170823", "statusCode": "1", "statusDescription": "Registro não Transmitido - Inválido", "validateErros": [ { "validateErrorCode": "000267", "validateErrorDetail": "A data de admissão do trabalhador João da Silva, para a categoria [103] (aprendiz), deve ser maior ou igual a [20/12/2000]" } { "validateErrorCode": "000335", "validateErrorDetail": "A data de admissão deve ser anterior a data de início do e-Social." } ] } ], "lastRecNo": 232, "maxRecNo": 232 }

     

    • Consulta pelo status + registryType:

    Request:

    http://172.16.31.214:8085/rest/wsqueryelements2?status=4&registryType=S-2200&startRecNo=0

     
    73
    }


    Consulta informando o STATUS:


    Request:

    GET http://localhost:8080/rest/WSTAFQueryElements?status=1&registryType=S-1060&startRecNo=0 HTTP/1.1
    Accept-Encoding: gzip,deflate
    Host: localhost:8080
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.1.1 (java 1.5)


    Bloco de código
    languagejs
    themeEclipse
    titleResponse após a execução do processamento:
    {
       "registryType": "S-1060",
       "statusCode": "1",
       "itens":    [
                {
             "registryKey": "Inclusão Manual",
             "validateErrors":          [
                            {
                   "validateErrorCode": "000692",
                   "validateErrorDetail": "Cadastro de Ambientes de Trabalho - Campo: Tp.Inscrição (T04_TPINSC) - Se empregador PJ, o campo tipo de inscrição deve ser CNPJ (1)."
                }
    Bloco de código
    languagejs
    themeEclipse
    titleResponse:
    { "type": "status", "code": "4", "items": [ { "registryKey": "KEY000001S-220020170101"
    ,
          
    "registryType":
     
    "S-2200",
          
    "registryTypeDescription":
     
    "Admissão
     
    do
     
    Funcionário",
          
    "registryProtocol":
     
    "20170520081000S2200"
     {
               
    }
      
    ],
      "
    lastRecNo
    validateErrorCode": 
    2
    "000693",
      
    "maxRecNo": 2 }
    Aviso
    titleAtenção!

    Quando a consulta for por status + registryType o retorno será agrupado por registryType.

     

    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": "status", "code": "4", "items": [ {
                 "validateErrorDetail": "Cadastro de Ambientes de Trabalho - Campo: Nr.Insc. (T04_NRINSC) - Se o Local Amb. for próprio do empregador ({localAmb} = [1]), o estabelecimento deve pertencer ao empregador e constar da tabela S-1005."
                }
             ]
          
    "registryKey": "KEY000001S-220020170101"
    },
               
    "registryType": "S-2200",
     {
             "
    registryTypeDescription
    registryKey": "
    Admissão
    Inclusão 
    do Funcionário
    Manual",
             "
    registryProtocol
    validateErrors": 
    "20170520081000S2200"
           
    }, * * * {several items} * * *
      [
              
    {
          
    "registryKey":
     
    "KEY000001S-210020170101",
          
    "registryType": "S-2100",
     {
         
    "registryTypeDescription":
     
    "Cadastro
     
    Inicial
     
    do
     
    Funcionário",
          "
    registryProtocol
    validateErrorCode": "
    20170521151402S2100
    000692",
        
    }
      
    ],
             "
    lastRecNo
    validateErrorDetail": 
    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 no response 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/wsqueryelements2?status=4&registryType=S-2200&startRecNo=151

     

    Bloco de código
    themeEclipse
    titleResponse
    { "type": "status", "code": "4", "items": [ {
    "Cadastro de Ambientes de Trabalho - Campo: Tp.Inscrição (T04_TPINSC) - Se empregador PJ, o campo tipo de inscrição deve ser CNPJ (1)."
          
    "registryKey":
     
    "KEY895424S-220020170723",
         
    "registryType": "S-2200"
    },
          
    "registryTypeDescription":
     
    "Admissão
     
    do
     
    Funcionário",
          
    "registryProtocol": "20170723081032S2200"
        
    }, * * * {several
     
    items} * * *
        {
                   "
    registryKey
    validateErrorCode": "
    KEY072355S-210020170312
    000693",
           
    "registryType": "S-2100",
            "
    registryTypeDescription
    validateErrorDetail": "Cadastro
    Inicial do Funcionário", "registryProtocol": "20170312151402S2100" } ], "lastRecNo": 322, "maxRecNo": 322 }

     

     de Ambientes de Trabalho - Campo: Nr.Insc. (T04_NRINSC) - Se o Local Amb. for próprio do empregador ({localAmb} = [1]), o estabelecimento deve pertencer ao empregador e constar da tabela S-1005."
                }
             ]
          },
                {
             "registryKey": "T1D MG 01_S-1060_20170626_1514430001.XML",
             "validateErrors": [         {
                "validateErrorCode": "000693",
                "validateErrorDetail": "Cadastro de Ambientes de Trabalho - Campo: Nr.Insc. (T04_NRINSC) - Se o Local Amb. for próprio do empregador ({localAmb} = [1]), o estabelecimento deve pertencer ao empregador e constar da tabela S-1005."
             }]
          },
                {
             "registryKey": "T1D MG 01_S-1060_20170626_1514430002.XML",
             "validateErrors": [         {
                "validateErrorCode": "000693",
                "validateErrorDetail": "Cadastro de Ambientes de Trabalho - Campo: Nr.Insc. (T04_NRINSC) - Se o Local Amb. for próprio do empregador ({localAmb} = [1]), o estabelecimento deve pertencer ao empregador e constar da tabela S-1005."
             }]
          },
                {
             "registryKey": "T1D MG 01_S-1060_20170626_1514430003.XML",
             "validateErrors": [         {
                "validateErrorCode": "000694",
                "validateErrorDetail": "Cadastro de Ambientes de Trabalho - Campo: Nr.Insc. (T04_NRINSC) - Se o Local Amb. de terceiros ({localAmb} = [2]), a raiz do CNPJ pode ser diferente da constante no S-1000, porém deve constar na Tabela de Lotações Tributárias (S-1020)."
             }]
          }
       ],
       "lastRecNo": 5,
       "maxRecNo": 5
    }


    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
    {
       "registryType": "S-2200",
       "statusCode": "1",
      "items": [
        {
          "registryKey": "KEY000001S-220020170101",
          "registryProtocol": "20170520081000S2200"
        },
    *
    *
    *
    {several items}
    *
    *
    *
        {
          "registryKey": "KEY000150S-220020170101",
          "registryProtocol": "20170521151402S2200"
        }
      ],
      "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 no response, 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:

    GET http://localhost:8080/rest/WSTAFQueryElements?status=1&registryType=S-2200&startRecNo=151 HTTP/1.1
    Accept-Encoding: gzip,deflate
    Host: localhost:8080
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.1.1 (java 1.5)


    Bloco de código
    themeEclipse
    titleResponse
    {
       "registryType": "S-2200",
       "statusCode": "1",
      "items": [
        {
          "registryKey": "KEY000151S-220020170101",
          "registryProtocol": "201705206912365S2200"
        },
    *
    *
    *
    {several items}
    *
    *
    *
        {
          "registryKey": "KEY000322S-220020170101",
          "registryProtocol": "20170529875302S2200"
        }
      ],
      "lastRecNo": 322,
      "maxRecNo": 322
    }
    



    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 lContinue := .T.
    	Local nPag		:= 0
    	Local nRec		:= 0
    	Local cLayout  := "S-1060"
    	Local aHeader := {"CGC: 43211325000126","INSCEST: 0621608450090"}	
    	If cMetodo == "GET"
    	
    		While lContinue
    			nPag++
    			oRestClient:setPath("/rest/wstafqueryelements?status=1&registryType="+ cLayout +"&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
    			   		EndIf
    			   	EndIf
    			   	oObj := Nil
    			Else
    			   ConOut("GET", oRestClient:GetLastError())
    			   lContinue := .F.
    			EndIf
    		End
    		ConOut("------FIM------")
    	EndIf
    	
    	FreeObj(oRestClient)
    Return 

     

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

     

    Bloco de código
    languagejs
    titleExemplo de mensagem POST:Exemplo de Resposta do método POST com erro de validação:
    {
      "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
    }
    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 registryKeyregistryType"
    }

     

     


    Códigos De Erros De Validação:


    800 – Status (status) solicitado no request é inválido.

    801 – Tipo de registro (registryType) solicitado no request é inválido.