PessoALL,
Mais uma novidade da release 12.1.2510 do TOTVS Protheus: não será mais possível manipulação das variavéis públicas de ambiente “cEmpAnt” e “__cUserId“.
Muitos desenvolvedores utilizam atribuição explicitas dessas variavéis para troca de empresa em ambientes com múltiplas empresas e múltiplos usuários. No entanto, esta prática tem que acabar com a nova release.
Neste contexto teremos que revisitar customizações de nossos clientes e seguir a boa prática que é utilizar a função RpcSetEnv() para setar um novo ambiente.
Uma dica importante é utilizar o StartJob(cFuncao, cAmbiente, lIraAguardar) para criar uma nova thread assíncrona onde já é necessário montar um novo ambiente.
Mas vamos ao código exemplo:
Eu faço backup das áreas e da empresa anteriormente utilizadas para restaurar após finalizar a execução do código no novo ambiente:
Local _aAreAtu := {SC5->(FwGetArea()), FwGetArea()} as array //Salva todas as areas num array
Local aEmpBkp := {FwCodEmp(), FwCodFil()} as Array
Atenção: Se for browser com filtros ou outros tipos de função que seja necessário restaurar para não quebrar rotinas padrões, precisa ser salvo em váriaveis backup.
Depois disso, eu limpo o ambiente anterior e monto novo ambiente:
RpcClearEnv()
RpcSetEnv(cEmpDestino, cFilDestino,,,,GetEnvServer(), {“SC5″,”SC6″,”SA1”})
Executo o bloco de código que desejo na empresa destino e depois restauro tudo.
RpcClearEnv()
RpcSetEnv(aEmpBkp[1], aEmpBkp[2],,,,GetEnvServer(), {“SC5″,”SC6″,”SC9″,”SA1”})
As funções exemplificadas acima são de uso exclusivo de funções com interface (SIGAMDI) e não é recomendado o uso em WebServices SOAP e/ou RESTFUL.
Conte com a ABF TECH para auxiliá-los na refatoração destes códigos.