Tempo aproximado para leitura: 5 minutos
Ocorrência
A partir das releases 12.1.2510, foram implementadas restrições na atribuição das variáveis globais cEmpAnt e __cUserId no contexto de execução no Protheus.
Ambiente
Cross Segmento - TOTVS Backoffice (Linha Protheus) - ADVPL - a partir da versão 12.1.2510
Causa
As variáveis cEmpAnt (grupo de empresa) e __cUserId (usuário) eram comumente atribuídas diretamente por desenvolvedores ou integradores para simular ou alterar o contexto de execução de serviços no Protheus. No entanto, essa prática oferece riscos de segurança e inconsistência, especialmente em ambientes com múltiplas empresas.
Com a evolução do Framework e das práticas de segurança, essas variáveis cEmpAnt e __cUserId não podem mais ser alteradas diretamente em chamadas.
Importante: A leitura dessas variáveis é permitida.
Solução
Troca de grupo de empresas ou usuário após abertura inicial.
-
Rotinas em geral:
Mesmo após a autenticação e a preparação do ambiente, não será permitida atribuição diretamente as variáveis cEmpAnt ou __cUserId.
Caso seja necessário verificar ou executar ações em outro grupo de empresas, ou com outro Usuário, a única forma suportada é por meio da função:RPCSetEnv(cRpcEmp, cRpcFil, cEnvUser, cEnvPass, cEnvMod)
A chamada da RPCSetEnv() deve ser efetuada em uma nova thread aberta com as funções StartJob, SmartJob ou similares, passando os parâmetros corretos no início, respeitando as permissões e licenciamento do usuário e módulo informados.Importante: Não é recomendado o uso da RpcSetEnv() em threads de interface, isso pode causar consumo indevido de licenças e até falhas no ERP.
Saiba mais detalhes:
Cross Segmento - TOTVS Backoffice Linha Protheus - ADVPL - Função que permite trocar a empresa em tempo de execução
https://tdn.totvs.com/display/public/framework/RpcSetEnv
https://tdn.totvs.com/display/tec/StartJob -
Webservices REST:
A inicialização do ambiente deve ocorrer por meio de autenticação e identificação do ambiente (empresa/filial) por meio do Header da requisição [tenantId].
As informações de ambiente e usuário são extraídas com base nesses parâmetros, respeitando a estrutura do serviço.Importante: Variáveis como cEmpAnt e __cUserId não podem ser utilizadas para troca de contexto na execução.
Saiba mais detalhes no artigo:
Cross Segmento - TOTVS Backoffice - Linha Protheus - ADVPL - Abertura de ambiente em Web Service -
Webservices SOAP:
No caso do SOAP, o ambiente é preparado conforme a configuração de URIs específicas para cada grupo de empresas, definida no AppServer.ini.
A diretiva [PrepareIn] do AppServer.ini é utilizada para configurar a preparação de ambiente para threads de execução.Importante: Como não existe a opção de configuração PrepareIn=ALL, deve ser configurada uma [HTTPURI] diferente para cada grupo de empresas, pois o SOAP necessita de ambiente especialista por empresa e filial.
Variáveis como cEmpAnt e __cUserId não podem ser utilizadas para troca de contexto na execução.Consulte a documentação completa:
Configurar Portais e Webservices
PrepareIn Rest - Appserver.ini
REST com ERP Microsiga Protheus
Saiba mais
https://tdn.totvs.com/pages/releaseview.action?pageId=954597455
https://tdn.totvs.com/pages/releaseview.action?pageId=918398030
0 Comentários