cEmpAnt e __cUserId na release 12.1.2510: entenda a mudança

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!