Definição do Serviço
Nome: WSTAFQUERYSELECTORALLWSTAFQueryElements
Objetivo: Consultar o status de uma lista de elementos presentes na base de dados do TAF, através de um determinado parâmetrotipo pré-definido.
Descrição: O serviço permite, que uma aplicação faça uma consulta de status generalizada, para generalizada na base de dados do TOTVS Automação Fiscal, para obter uma série de registros/elementos , no TOTVS Automação Fiscal, através de um dado/parâmetro pré-definido pela própria aplicação.
Métodos: GET
Configurações do Serviço
tipo do registro ( de acordo com os tipos existentes no TAF ).
Métodos: GET
Configurações do Serviço
A Configuração A Configuração do serviço REST está documentada no link Configuração REST SERVER - Protheus.
Nota |
---|
|
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]
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 os status dos registros integrados 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
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/
wstafst2wstafqueryelements?
ticketCodestatus=
F959753123654789789363655241452363524&
RegistryKeyregistryType=
KEYQWE7878RE4854545454998598571S-1010&startRecNo=0
Parâmetro | Descrição | Obrigatório |
---|
ticketCode | TAFTICKET | OC |
registryKey | TAFKEY | OC |
status | Status do registro no TAF |
|
registryType | Tipo do registro/layout. Exemplo: T007, S-1010... | O |
startRecNo | RecNo inicial para consulta | O |
searchMode | Filtro para busca | N |
- 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, 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.
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) |
sourceBranch | Có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. 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=' '®istryType=T001AE&startRecNo=0
Ou
http://localhost:8080/rest/WSTAFQueryElements?status=%27%20%27®istryType=T001AE&startRecNo=0
- 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 é 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 ):
Atributo | Pai | Nível | Ocorrência | Formato |
registryType | - | 1 | 1 | - |
statusCode | - | 1 |
registryKey | Items | 2100ticketCode |
Items | - | 1 | 1 | - |
registryKey | Items | 2 |
0:36errorCodestatusCode | Items | 2 | 0:1 | String( |
6errorDescriptionstatusDescription | Items | 2 | 0:1 | String( |
60errorDetailString(220) | - |
validateErrorCode | validateErrors | 3 |
statusCode | Items | 21statusDescriptionItems225activeboolean(true : false) | - |
streamingErrorCode | streamingErrors | 3 |
registryPriority | Items | 21integrationQueueItems23 | 0:1 | String(220) |
registryProtocol | Items | 2 | 0:1 | String(60) |
lastRecNo | - | 1 | 1 | Int(9999) |
maxRecNo | - | 1 | 1 | Int(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.
- registryType – Tipo do registro ( conforme campo TAFTPREG ).
- statusCode – Status do registro no TAF, atributo exibido somente quando o parâmetro status for informado na requisição.
- 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.active – Informa se o registro está ativo no TAF, atributo exibido somente quando proccessed for igual a true.registryPriority: Retornar a prioridade definida para o registro, atributo exibido somente quando proccessed for igual a false.- 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 parâmetro status não for informado na requisição.
- statusDescription – Descrição do status no TAF, atributo exibido somente quando o parâmetro status não for informado na requisição.
- 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
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.
Exemplos de requisição utilizando o método GET:
pelo ticketCode172.16.31.214:8085wstafst2ticketCodeWIO9753123654789789363655241452363070 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 |
---|
language | js |
---|
theme | Eclipse |
---|
title | Response: |
---|
|
|
Bloco de código |
---|
language | js |
---|
theme | Eclipse |
---|
title | Response: |
---|
|
typeticketCodecode"WIO9753123654789789363655241452363",
"items":{
"success": true,
proccessedfalse"20170620141315DMG01_0000000571",
" |
descriptionAguardando Processamento.registryKeyKEYIO7878874854545454998598525"Registro validado pelo TAF"
},
|
"errorCode": "",errorDescriptionregistryKey": "20170620141315DMG01_0000000572",
" |
errorDetail
} {
success true, "Registro validado pelo TAF"
|
"proccessed": false"description":"AguardandoProcessamento.",
"registryKey":"KEYYZE7878RE4854545454998598576",
errorCoderegistryKey": "20170620141315DMG01_0000000573",
" |
errorDescriptionerrorDetailstatusDescription": "Registro validado pelo TAF"
},
|
],
"lastRecNo": 82,
"maxRecNo": 82
}
Bloco de código |
---|
language | js |
---|
theme | Eclipse |
---|
title | Response após a execução do processamento: |
---|
|
{
"type": "ticketCode {
"registryKey": "20170620141315DMG01_0000000574",
|
"codeWIO9753123654789789363655241452363"items": [
{
successtrue,
"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": ""
},
{
"success": true,
"proccessed": true,
"description": "Registro Processado.",
"registryKey": "KEYYZE7878RE4854545454998598576",
Request:
GET http://localhost:8080/rest/WSTAFQueryElements?status=1®istryType=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 |
---|
language | js |
---|
theme | Eclipse |
---|
title | Response após a execução do processamento: |
---|
|
{
"registryType": "S-1060",
"statusCode": " |
statusDescriptionRegistroIntegradoactivetrue
}],
"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 |
---|
language | js |
---|
theme | Eclipse |
---|
title | Response: |
---|
|
{
"type": "ticketCode",
"code": "WIO9753123654789789363655241452363",
"items": [
{
"success": true {
"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)."
},
|
"proccessed":false,
"description":"AguardandoProcessamentodoJob2.",
"registryKey": "KEYYZE7878RE4854545454998598576","errorCode": "",
errorDescriptionvalidateErrorCode": "000693",
|
"errorDetail":""
}
],
lastRecNo 81,
"maxRecNo": 81
} Aviso |
---|
|
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 |
---|
language | js |
---|
theme | Eclipse |
---|
title | Response: |
---|
|
{
"type": "registryKey",
"code": "KEYYZE7878RE4854545454998598576",
"items": [
{ "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."
|
"success": true,
"proccessed":false,
"description": "Aguardando Processamento do Job2.",
"ticketCode": "WIO9753123654789789363655241452363",errorCoderegistryKey": "Inclusão Manual",
" |
errorDescription "",
"errorDetail":""
}
],
"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 |
---|
theme | Eclipse |
---|
title | Exemplo de Paginação |
---|
|
{
"typeticketCode"code": "WIO9753123654789789363655241452363",
"items":[
{
successtrue,
"Cadastro de Ambientes de Trabalho - |
"proccessed"false,
"description": "Aguardando Processamento",
"registryKey": "KEYIO7878874854545454998598525",
Tp.Inscrição (T04_TPINSC) - Se empregador PJ, o campo tipo de inscrição deve ser CNPJ (1)."
|
"errorCode": """errorDescription": "",
"errorDetail":""
},
*
*
*
{severalitems}
*
*
*
"success": true,
proccessedfalse"description": "Aguardando Processamento",
registryKeyKEYQIU7878RE4854545454998598544",
Cadastro de Ambientes de Trabalho - |
"errorCode""",
"errorDescription": "",
"errorDetail": "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."
}
] |
,"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 |
---|
theme | Eclipse |
---|
title | Response |
---|
|
{
"type": "ticketCode",
"code": "WIO9753123654789789363655241452363",
"items": [
{
"success": true,
"proccessed": false,
{
"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."
}]
},
{
" |
descriptionAguardando ProcessamentoT1D MG 01_S-1060_20170626_1514430002.XML",
" |
registryKey "KEYIO7878874854545454998598888",
"errorCode": "","errorDescription "validateErrorCode": "000693",
|
"errorDetail"
},
*
*
*
{several items}
*
*
*
{
"success": true,
"proccessed": false,
"description": "Aguardando Processamento",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": "KEYQIU7878RE4854545454998598987","errorCode": """errorDescription":"",
"errorDetail":""
}
],
lastRecNo322,
"maxRecNo": 322
}
"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 |
---|
theme | Eclipse |
---|
title | Exemplo 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®istryType=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 |
---|
theme | Eclipse |
---|
title | Response |
---|
|
{
"registryType": "S-2200",
"statusCode": "1",
"items": [
|
Exemplo de Consumo do Serviço
Bloco de código |
---|
language | delphi |
---|
theme | Eclipse |
---|
title | Client 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 |
---|
language | js |
---|
theme | Eclipse |
---|
title | Exemplo 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 |
---|
language | js |
---|
title | Exemplo de mensagem POST:Exemplo de Resposta do método POST com erro de validação: |
---|
|
{
"ticketCode": "WIO9753123654789789363655241452363",
"registryKey": [
{
"key": "KEYIO7878874854545454998598525",
"success": false,
"error": [
coderr801"KEY000151S-220020170101",
|
descriptionCampo TAFFIL (sourceBranch) e Obrigatorio. },
*
*
*
{several items}
*
*
*
|
coderr803"KEY000322S-220020170101",
|
descriptionOvalordocampoTAFFIL(sourceBranch)nao "lastRecNo": 322,
"maxRecNo": 322
}
|
Exemplo de Consumo do Serviço
Bloco de código |
---|
language | delphi |
---|
theme | Eclipse |
---|
title | Client 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®istryType="+ 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 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 |
---|
language | js |
---|
theme | Eclipse |
---|
title | Exemplo de Resposta do método GET com RESTFAULT |
---|
|
"errorCode": 101,
"errorMessage": "obrigatorio o envio do parametro ticketCode ou registryKeyregistryType"
} |