"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