Boa tarde. Estou tentando integrar uma solicitação com o Protheus porem existem 2 empresas. Estou enviando a empresa no headers como na documentação dentro da teg tenantId porem ao preencher na tabela a filial sempre fica como 00. Alguém já passou por isso ?
var tenantid = '02,01';
var clientService = fluigAPI.getAuthorizeClientService();
var data = {
companyId: getValue("WKCompany") + '',
serviceCode: 'api_solicitacaoarmazem_ivn',
endpoint: '/rest/SA',
method: 'post',
timeoutService: '1000',
headers:{
"tenantId": String(tenantid),
"Content-Type": "application/json"
},
params:{
"SA":{
"NUM": cDoc,
"SOLICITANTE": "cUserName",
"EMISSAO": "dDataBase",
"EMISSAO": "dDataBase",
"ITENS": items
}
}
};
Parte do código lado Protheus. modelo padrão.
#Include 'protheus.ch'
#Include 'parmtype.ch'
#Include 'RestFul.ch'
#INCLUDE "TBICONN.CH"
#INCLUDE "TBICODE.CH"
#INCLUDE "TOPCONN.CH"
User Function SA()
Return
WSRESTFUL SA DESCRIPTION "Servi�o REST para solicitacao ao armazem"
WSDATA RECEIVE As String //Json Recebido no corpo da requi��o
//WSDATA CGC As String //Em caso de PUT ou DELETE pega o CGC por URL
WSMETHOD POST DESCRIPTION "Cadastra uma nova solicitacao ao armazem" WSSYNTAX ""
END WSRESTFUL
WSMETHOD POST WSRECEIVE RECEIVE WSSERVICE SA
Local cJSON := Self:GetContent() // Pega a string do JSON
Local oParseJSON := Nil
Local cJsonRet := ""
Local cArqLog := ""
Local cErro := ""
//Local cCodSA1 := ""
Local lRet := .T.
Local aArea := GetArea()
Local nX := 0
Local cFiltraSCP := ""
Local bBloco := .T.
Private lMsErroAuto := .F.
// --> Cria o diret�rio para salvar os arquivos de log
If !ExistDir("\log_cli")
MakeDir("\log_cli")
EndIf
// --> Deserializa a string JSON
FWJsonDeserialize(cJson, @oParseJSON)
conout("Empresa:"+cEmpAnt)
conout("Filial:"+cFilAnt)
conout("Empresa: "+substr(oParseJSON:tenantId,1,2))
conout("Filial: "+substr(oParseJSON:tenantId,4,2))
//conout("Empresa: "+substr(oParseJSON:tenantId,1,2))
//conout("Filial: "+substr(oParseJSON:tenantId,4,2))
//RpcSetEnv( substr(oParseJSON:tenantId,1,2),substr(oParseJSON:tenantId,4,2), "", " ", "FAT", "", {"ZA4","SC9","SC6"}, , , , )
//conout("Empresa Logada: "+cEmpAnt)
//conout("Filial Logada: "+cFilAnt)
::SetContentType("application/json")
// --> Deserializa a string JSON
Problema resolvido. Acabei me esquecendo que na aplicação TOTVS eu referenciava a filial assim sempre mandando como 00. A forma correta de referenciar a empresa é no headers mesmo como mostrei no JSON da primeira parte.
Pelo que li, no codigo não teria que receber nada disso, me parece que apenas colocando a teg tenantId o próprio WS iria se encarregar disso. Apenas adicionei ali a informação para ver em qual empresa o sistema estava logando.
— Danilo Mariano 12 de May de 2020