🔒 Restrições na atribuição das variáveis cEmpAnt e __cUserId no Protheus
A nova versão do sistema TOTVS Protheus introduziu restrições importantes quanto à atribuição direta das variáveis cEmpAnt e __cUserId, além de outras alterações de compatibilidade (break changes).
Essas mudanças impactam principalmente integrações via REST e SOAP, onde o uso do comando rpcSetEnv() passa a ser bloqueado. Caso ainda seja utilizado, a thread será finalizada automaticamente, impedindo o funcionamento da requisição.
🚫 Entenda o problema
Por muitos anos, era comum encontrar integrações REST e SOAP que enviavam o CNPJ no XML ou JSON e, logo em seguida, instanciavam o ambiente utilizando rpcSetEnv() conforme o valor recebido. A partir dessa atualização, esse processo **não será mais permitido**.
O objetivo da mudança é garantir maior segurança e isolamento de ambiente entre empresas, evitando manipulação direta de variáveis internas.
⚙️ Ajustes para REST
Para adequar suas integrações REST às novas regras, siga as recomendações abaixo:
- Configure no
appserver.ini a diretiva:
prepareIn=ALL
- No cabeçalho (Header) da requisição, utilize a chave
tenantId para identificar a empresa e a filial. Exemplo:
tenantId: 01,02
Com isso, o ambiente correto será instanciado automaticamente, sem necessidade de utilizar rpcSetEnv().
🧩 Ajustes para SOAP
Até a data desta publicação, o modelo adotado para SOAP segue o formato onde **cada empresa possui sua própria URL**. Assim, caso existam três empresas no ambiente SIGAMAT, as URLs devem ser configuradas da seguinte forma:
Cada URL corresponde a uma empresa distinta, devidamente configurada e isolada.
Importante: a variável cFilAnt ainda poderá ser setada na thread.
🏷️ Sobre o uso de tenantId no SOAP
O SOAP também possui a tag tenantId, mas, por enquanto, ela atua apenas sobre a **filial**, e não sobre a empresa. É possível utilizá-la em conjunto com a URL da empresa, enviando no request o tenantId correspondente à filial.
No futuro, é esperado que o tenantId no SOAP seja expandido para controlar **empresa e filial simultaneamente**, de forma semelhante ao funcionamento do REST com prepareIn=ALL.
📚 Fonte oficial
Mais detalhes podem ser consultados diretamente na documentação oficial da TOTVS:
➡ TOTVS – Release Notes
💡 Gostou do conteúdo? Compartilhe com seus colegas e deixe seu comentário abaixo! 😎