No artigo de hoje, vou mostrar como fazer um controle customizado de rotinas mais usadas no Protheus.
Primeiramente será necessário criar uma tabela, então supondo que a tabela se chame ZD0, iremos criar os seguintes campos:
- ZD0_FILIAL (campo padrão de filial, mas podemos deixar a tabela como compartilhada)
- ZD0_SEQ (campo sequencial, caractere, tamanho pode ser 9)
- ZD0_USRCOD (campo caractere, tamanho 6, conterá o código do usuário)
- ZD0_USRNOM (campo caractere, tamanho 30, conterá o nome do usuário)
- ZD0_DATA (campo data, tamanho 8, conterá a data que o usuário acessou a rotina)
- ZD0_HORA (campo caractere, tamanho 8, conterá a hora que o usuário acessou a rotina)
- ZD0_FUNCAO (campo caractere, tamanho 10 -mas se quiser criar maior por segurança-, conterá o nome da função acionada no menu)
Após criar a tabela, precisamos criar uma função para criar esse Log, então podemos fazer uma função genérica que é acionada passando apenas o nome da função, por exemplo:
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} zIncLog
Função parar criar log de rotina
@author Atilio
@since 17/06/2021
@version 1.0
@param cFuncao, Caracter, Nome da função
@example
u_zIncLog("zFuncao")
/*/
User Function zIncLog(cFuncao)
Local aArea := GetArea()
Local cSeq := ""
Default cFuncao := ""
//Se tiver Função
If ! Empty(cFuncao)
//Pegando a próxima sequência
cSeq := GetSXENum('ZD0', 'ZD0_SEQ')
//Salvando o log
RecLock("ZD0", .T.)
ZD0->ZD0_FILIAL := FWxFilial('ZD0')
ZD0->ZD0_SEQ := cSeq
ZD0->ZD0_USRCOD := RetCodUsr()
ZD0->ZD0_USRNOM := UsrRetName(RetCodUsr())
ZD0->ZD0_DATA := dDataBase
ZD0->ZD0_HORA := Time()
ZD0->ZD0_FUNCAO := cFuncao
ZD0->(MsUnlock())
ConfirmSX8()
EndIf
RestArea(aArea)
Return
Em seguida precisamos criar um ponto de entrada que é acionado sempre ao abrir alguma rotina no menu, nesse caso usaremos o ChkExec.
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} ChkExec
Ponto de Entrada ao acionar alguma rotina no menu
@author Atilio
@since 17/06/2021
@version 1.0
@see https://tdn.totvs.com/display/public/PROT/CHKEXEC+-+Dispara+ponto+de+entrada
/*/
User Function zCriaLog(cFuncao)
Local aArea := GetArea()
Local lRet := .T.
Local cFuncao := Upper(ParamIXB)
//Cria o log
u_zIncLog(cFuncao)
RestArea(aArea)
Return lRet
Dessa forma, agora sempre irá gravar quando o usuário clicar em alguma rotina no menu. Além disso, você pode usar outros pontos de entrada para também acionar a função de criação de log, como a função SDULogin.
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Legal pra caramba jovem.
Da pra fazer métricas bem legais como horário de pico de determinada rotina, as 10 rotinas mais usadas além de muitos outros relatórios legais que podem auxiliar no gerenciamento do ambiente. Top, parabéns!!
Grande mano Súlivan.
Obrigado pelo comentário e feedback jovem.
Abração.