Page tree
Skip to end of metadata
Go to start of metadata

Rest Preparein

Produto:

ADVPL

Versões:

P11-P12

Ocorrência:

Após configuração de INI para uso de webservice Rest, quando é chamado alguma rotina o sistema está considerando uma filial diferente da que está definida na tag PrepareIn

Definimos nesta tag que o padrão será a empresa 01 e filial 06 
Porém, quando é feito uma busca, o xFilial está retornado a filial 01. 

Ambiente:

Todos

Passo a passo:

"A definição do PREPAREIN no REST é diferente do conceito utilizado nos webservices convencionais.
Cada valor da chave PREPAREIN representa um grupo de empresas diferente para acesso ao serviço.
Por exemplo, a chave PREPAREIN configurada com os valores 19 avisa ao serviços REST que o grupo de empresa 19 vai receber requisições, e deve então ter threads preparadas para isso.
Para que todos os grupos possam receber requisição, a chave PREPAREIN deve estar configurada como PREPAREIN=ALL
Cada thread é montada com a primeira filial válida para aquele grupo. Para que o valor da filial seja trocada pela camada do REST é necessário enviar, no cabeçalho da requisição REST o parâmetro tenantid, conforme abaixo:
tenantid: 19,D MG 02.
Neste caso, o servidor REST irá buscar uma thread disponível para o grupo 19 e a execução será realizada na filial D MG 02. Se o tenantid não for enviado no header da requisição ela será processada na primeira filial válida."

Com essa informação realizamos teste co um serviço simples para retornar a filial que se encontra logada utilizando o fonte abaixo :

#include "protheus.ch
#include "restful.ch"

WSRESTFUL tstRetFil DESCRIPTION "Serviço REST para verificação da filial logada"

WSMETHOD GET DESCRIPTION "Retorno da verificação das filiais" WSSYNTAX "/tstRestFil"

END WSRESTFUL

WSMETHOD GET WSSERVICE tstRetFil

// define o tipo de retorno do método
::setContentType("application/json")

::setResponse('[')
::setResponse('{')
::setResponse( "Retorno cFilAnt:" + cFilAnt + ',')
::setResponse( "Retorno xFilial:" + xFilial("SED"))
::setResponse('}')
::setResponse(']')

return .t.

Utilizamos o postman para ser o client rest no processo enviando o header informado (02. REST com ERP Microsiga Protheus)

Video do Teste : teste_prepare_rest.rar

Observações:

Ticket 1328982