A release 12.1.2510 do Protheus trouxe mudanças importantes para aumentar a segurança e a integridade dos ambientes. Entre elas, uma merece atenção especial dos desenvolvedores e consultores: o bloqueio da atribuição direta das variáveis cEmpAnt e __cUserId.
Se sua empresa possui customizações em AdvPL, integrações ou serviços desenvolvidos internamente, vale entender como essa alteração pode impactar o funcionamento dessas soluções e quais práticas devem ser adotadas a partir de agora.
O que mudou com as variáveis cEmpAnt e __cUserId?
Até versões anteriores, muitos desenvolvedores utilizavam as variáveis cEmpAnt e __cUserId para alterar o contexto de execução de uma rotina, simulando outro grupo de empresas ou outro usuário durante o processamento.
A partir da release 12.1.2510, essa prática deixa de ser permitida.
Embora a leitura dessas variáveis continue liberada, o Framework do Protheus passa a impedir qualquer atribuição direta aos seus valores.
Em outras palavras, você ainda poderá consultar essas informações durante a execução de uma rotina, mas não poderá modificá-las manualmente.
Por que a TOTVS bloqueou essa prática?
Essa mudança faz parte da evolução das políticas de segurança do Framework do Protheus.
Alterar diretamente cEmpAnt e __cUserId podia gerar situações de inconsistência, principalmente em ambientes com múltiplas empresas ou integrações complexas.
Além disso, a alteração manual dessas variáveis dificultava o controle do contexto real de execução e aumentava os riscos relacionados à segurança das aplicações.
Com a nova abordagem, o Protheus garante maior controle sobre o ambiente em execução e reduz a possibilidade de comportamentos inesperados.
Quem pode ser impactado?
Nem todas as empresas sentirão essa mudança.
Entretanto, ela merece atenção principalmente para quem possui:
- Customizações desenvolvidas em AdvPL;
- Rotinas próprias;
- Jobs automatizados;
- Integrações entre sistemas;
- Webservices REST;
- Webservices SOAP.
Se algum desses desenvolvimentos altera diretamente cEmpAnt ou __cUserId, será necessário revisar o código antes ou durante a migração para a release 12.1.2510.
A leitura das variáveis continua permitida
Um ponto importante é que apenas a atribuição foi bloqueada.
Isso significa que as rotinas ainda podem consultar normalmente os valores de cEmpAnt e __cUserId quando houver necessidade de identificar o contexto atual da execução.
Portanto, não há impacto para códigos que apenas realizam leitura dessas informações.
Como trocar o contexto de execução corretamente?
Quando uma rotina precisar executar processos utilizando outro grupo de empresas ou outro usuário, a TOTVS recomenda utilizar os mecanismos oficiais do Framework.
Para rotinas executadas em novas threads, a abordagem suportada é utilizar a função RPCSetEnv(), respeitando os parâmetros de empresa, filial, usuário, senha e módulo.
Além disso, a chamada deve ocorrer em uma nova thread, criada por funções como StartJob, SmartJob ou equivalentes.
Vale lembrar que a TOTVS não recomenda utilizar RPCSetEnv() em threads de interface, pois essa prática pode consumir licenças desnecessariamente e até provocar falhas no ambiente.
Como ficam os Webservices REST e SOAP?
A mudança também afeta os serviços disponibilizados pelo Protheus.
Nos Webservices REST, o ambiente deve ser identificado por meio da autenticação e do cabeçalho tenantId, responsável por informar empresa e filial.
Já nos Webservices SOAP, a preparação do ambiente ocorre por meio das configurações definidas no AppServer.ini, utilizando a diretiva PrepareIn e diferentes configurações de URI para cada grupo de empresas.
Em ambos os casos, cEmpAnt e __cUserId não devem mais ser utilizadas para alterar o contexto de execução.
Podemos te apoiar!
Precisa de ajuda com essas mudanças? Conte com a nossa equipe através de uma consultoria.
CLIQUE AQUI e entre em contato! Será um prazer te ajudar em mais um desafio!


