Como gravar um log das rotinas e módulos mais usados | Ti Responde 0165

No vídeo de hoje, vamos demonstrar como salvar em uma tabela as funções e módulos mais usados pelos usuários.

A dúvida de hoje, nos perguntaram, se seria possível extrair a informação de quais funções ou módulos os usuários mais usam, sem utilizar o MV_DIRLOG e MV_LOGSIGA).

 

Pensando nisso, montamos um exemplo, onde vamos demonstrar em como salvar essa informação em uma tabela customizada através do ponto de entrada ChkExec, e depois você poderá usar isso nas suas queries e relatórios.

 

Segue abaixo o vídeo exemplificando:

 

E abaixo o código fonte desenvolvido:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function ChkExec
Ponto de Entrada acionado ao clicar em alguma opção no menu
@type  Function
@author Atilio
@since 12/06/2024
@see https://tdn.totvs.com/display/public/framework/CHKEXEC+-+Dispara+ponto+de+entrada
/*/

User Function ChkExec()
    Local aArea     := FWGetArea()
    Local lContinua := .T.
    Local cFuncao   := ParamIXB

    //Se veio parênteses, tira
    If "(" $ cFuncao
        cFuncao := Left(cFuncao, At("(", cFuncao) - 1)
    EndIf

    //Aciona a rotina para criar o log
    If ExisteSX2("ZL0")
        u_zVid0165(cFuncao)
    EndIf

    FWRestArea(aArea)
Return lContinua

/*/{Protheus.doc} User Function zVid0165
Função para gravar um log quando um usuário acessa alguma rotina, pode ser adicionada em pontos de entrada como SDULogin ou ChkExec
@type  Function
@author Atilio
@since 12/06/2024
@param cFuncao, Caractere, Nome da função
@obs É necessário criar uma tabela no Configurador, no nosso exemplo usamos a ZL0, sendo:

Tabela:
    ZL0 - Logs de Acesso em Funções (pode ser compartilhada ou exclusiva, depende da sua regra de negócio)

Campos (todos com Contexto Real):
    ZL0_FILIAL - Campo padrão
    ZL0_CODIGO - Código Sequencial - Caractere - Tamanho 9
    ZL0_USRCOD - Código do Usuário - Caractere - Tamanho 6
    ZL0_USRNOM - Nome do Usuário   - Caractere - Tamanho 30
    ZL0_AMBIEN - Ambiente          - Caractere - Tamanho 30
    ZL0_DATA   - Data              - Data      - Tamanho 8
    ZL0_HORA   - Hora              - Caractere - Tamanho 8
    ZL0_FUNCAO - Nome da Função    - Caractere - Tamanho 20
    ZL0_MODNUM - Número do Módulo  - Numérico  - Tamanho 2
    ZL0_MODSIG - Sigla do Módulo   - Caractere - Tamanho 3

Índices:
    1: ZL0_FILIAL + ZL0_CODIGO

/*/

User Function zVid0165(cFuncao)
    Local aArea     := FWGetArea()
    Local cCodUsr   := RetCodUsr()
    Local cCodSeq   := ""
    Default cFuncao := FunName()

    //Busca o próximo sequencial
    DbSelectArea("ZL0")
    cCodSeq   := GetSXENum("ZL0", "ZL0_CODIGO")

    //Inclui o registro na tabela de logs
    RecLock("ZL0", .T.)
        ZL0->ZL0_FILIAL := FWxFilial("ZL0")
        ZL0->ZL0_CODIGO := cCodSeq                //Código sequencial
        ZL0->ZL0_USRCOD := cCodUsr                //Código do Usuário
        ZL0->ZL0_USRNOM := UsrRetName(cCodUsr)    //Nome do Usuário
        ZL0->ZL0_AMBIEN := GetEnvServer()         //Ambiente
        ZL0->ZL0_DATA   := Date()                 //Data
        ZL0->ZL0_HORA   := Time()                 //Hora
        ZL0->ZL0_FUNCAO := cFuncao                //Nome da Função
        ZL0->ZL0_MODNUM := nModulo                //Número do Módulo
        ZL0->ZL0_MODSIG := cModulo                //Sigla do Módulo
    ZL0->(MsUnlock())
    ConfirmSX8()

    FWRestArea(aArea)
Return

Bom pessoal, por hoje é só.

 

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

2 Responses

  1. Nos fontes premium tem isso? Voçê falo do Relatorio de Usuários?

    • Bom dia Mauro, tudo joia?

      Ainda não. O fonte premium de análise de logs de usuários, irá ao ar em Setembro desse ano.

      Mas se você precisar dele antes, nos mande um email que lhe enviamos o pacote com o fonte.

      Tenha uma ótima e abençoada semana.

      Um forte abraço.

Deixe uma resposta

Terminal de Informação