No artigo de hoje, vamos demonstrar em como validar se a base logada é uma base de testes via customização.
Pessoal, antes de começarmos esse artigo, na rotina CFGA750 ( referência no TDN ), é possível configurar o tipo do ambiente (conforme print abaixo).
Essa configuração, fica dentro da tabela SYS_APP_PARAM, com o código TypeEnvironment.
Eu tentei procurar alguma função padrão que retornasse esse valor, mas não consegui identificar, se eu encontra algo, eu atualizo esse artigo.
Então para fazermos uma validação se estamos na base de testes, podemos ter alguns cenários, sendo que separamos dois:
- Cenário 1: Testando pelo nome do ambiente, por exemplo, supondo que o environment de produção se chame EMPRESA (aquele terceiro parâmetro que você usa no atalho do SmartClient) e o da base de testes se chama EMPRESA_TST, então basta usarmos a função GetEnvServer e validar se é a EMPRESA_TST
- Cenário 2: Caso tenha o mesmo nome de environment para base de testes e produção, ai uma alternativa seria buscar o nome da base de dados configurada no DbAccess, e validar se é a base de testes
Pensando nisso então, conforme os dois cenários acima, montamos uma customização que já faz as validações (se atente as linhas 52 e 77):
//Bibliotecas #Include "TOTVS.ch" /*/{Protheus.doc} User Function zInTst Função que valida se esta em base de testes @type Function @author Atilio @since 25/09/2024 @param nTipo, Numérico, Se for 1 irá validar pelo nome do ambiente (environment) se não vai validar pelo nome da base de dados no DbAccess @return lEmTeste, Lógico, .T. se esta na base de testes e .F. se não está @example [...] If u_zInTst(1) Alert("estou na base de testes") Else Alert("estou na base de produção) EndIf [...] @obs Atualize as seguintes linhas do fonte: Linha 52 com o nome dos ambientes da base de teste Linha 77 com o nome da base no DbAccess /*/ User Function zInTst(nTipo) Local aArea := FWGetArea() Local lEmTeste := .F. Default nTipo := 2 //Se for para testar via nome de ambiente If nTipo == 1 lEmTeste := fViaAmbiente() //Senão, pega pelo nome da base no DbAccess Else lEmTeste := fViaDbAccess() EndIf FWRestArea(aArea) Return /*/{Protheus.doc} fViaDbAccess Busca via DbAccess dentro do appserver.ini o nome da base se é a base de testes @type Static Function @author Atilio @since 25/09/2024 /*/ Static Function fViaAmbiente() Local aArea := FWGetArea() Local cNomeAmb := Alltrim(GetEnvServer()) + ";" Local cAmbTst := "AMBTST;AMBTST2;AMBTST_JOB;" //Coloque aqui os nomes dos ambientes da base de testes Local lEmTeste := .F. //Se o ambiente estiver na lista dos da base de testes If cNomeAmb $ cAmbTst lEmTeste := .T. EndIf FWRestArea(aArea) Return lEmTeste /*/{Protheus.doc} fViaDbAccess Busca via DbAccess dentro do appserver.ini o nome da base se é a base de testes @type Static Function @author Atilio @since 25/09/2024 /*/ Static Function fViaDbAccess() Local aArea := FWGetArea() Local cIniFile := GetAdv97() Local cStrError := "ERROR" Local cNomeBase := "" Local cBaseTst := "BASE_TST" //Coloque aqui o nome da sua base de testes que está no DbAccess Local lEmTeste := .F. //Busca o nome da base na seção "DbAccess" cNomeBase := GetPvProfString("DbAccess", "Alias", cStrError, cIniFile) //Se não encontrou ou deu erro, ai vamos buscar novamente mas agora ao invés de "DbAccess" vamos usar a seção "TopConnect" If Empty(cNomeBase) .Or. cNomeBase == cStrError cNomeBase := GetPvProfString("TopConnect", "Alias", cStrError, cIniFile) cPasso := "2" EndIf //Se não encontrou ou deu erro, ai vamos buscar novamente mas agora ao invés de "TopConnect" vamos usar a seção "TotvsDBAccess" If Empty(cNomeBase) .Or. cNomeBase == cStrError cNomeBase := GetPvProfString("TotvsDBAccess", "Alias", cStrError, cIniFile) cPasso := "3" EndIf //Se mesmo assim não encontrou, vamos buscar direto do ambiente If Empty(cNomeBase) .Or. cNomeBase == cStrError cNomeBase := GetSrvProfString("DBAlias", cStrError) cPasso := "4" EndIf //Se for a base de Homologação / Testes If cNomeBase == cBaseTst lEmTeste := .T. EndIf FWRestArea(aArea) Return lEmTeste
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Uhuuul! Trouxe uma dor e virou até post <3
Obrigado Atilião! Ajudou muito e essa do CFG não sabia não, pode ser até mais simples de solucionar o que eu precisava.
Você é muito brabo!
Fala Rafa, bom dia, tudo joia?
Opa, obrigado pelo comentário e pela bondade nas palavras.
Tenha um ótimo e abençoado fim de semana.
Um grande abraço.
Há quanto tempo eu não venho aqui…Valeu!!!!
Fala Helinux, tudo joia?
Verdade faz um bom tempo mesmo né.
É que eu devo imaginar também como deva estar corrido.
Tenha um ótimo e abençoado fim de semana.
Um grande abraço.