Criando um log de rotinas mais usadas no Protheus

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.

Dan Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

2 Responses

  1. Súlivan disse:

    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!!

Deixe uma resposta