Como usar a GravaCV8 para gravação de logs

Em ambientes corporativos, a rastreabilidade das operações é um fator essencial para garantir segurança, transparência e confiabilidade nos processos.

No ERP Protheus, a função GravaCV8 desempenha papel fundamental nesse contexto, permitindo o registro estruturado de logs diretamente na tabela CV8.

Por meio dela, é possível documentar eventos relevantes, como alteração de parâmetros, execução de rotinas ou ocorrências de erros, assegurando que cada ação fique devidamente registrada para futuras consultas ou auditorias.

Essa funcionalidade contribui não apenas para o controle interno, mais também para a melhoria contínua de processos, oferecendo aos usuários uma ferramenta prática e eficiente para acompanhamento das atividades realizadas no sistema.

Para exemplificação da gravação dos logs, criamos um fonte de alteração de parâmetro utilizando a função gravaCV8 para demonstrarmos sua funcionalidade.

#Include "TOTVS.ch"

/*/{Protheus.doc} zBloqDat
Rotina para edição de parâmetros de bloqueio com layout.
Atualiza os parâmetros MV_DATAFIN, MV_DATAFIS, MV_DBLQMOV e MV_ULMES,
registrando log na tabela CV8.
@author Gabriel Dahm
@since 09/07/2025
@version 1.0
@example U_ZBLOQDAT()
*/

User Function zBloqDat()

   Local aArea := FWGetArea()

   // Declaração de variáveis
   Local dDataFin := GetMV("MV_DATAFIN")
   Local dDataFis := GetMV("MV_DATAFIS")
   Local dDataMov := GetMV("MV_DBLQMOV")
   Local dDataEst := GetMV("MV_ULMES")

   Local dOldFin, dOldFis, dOldMov, dOldEst
   Local cDetalhe := ""
   Local aPergs := {}

   Local cType        := "SX6"
   Local cBatchProc   := "zBloqDat"
   Local cMsg         := "Alteração de parâmetros"
   Local cSubProc     := ""
   Local cMsgSubProc  := ""
   Local lCabec       := .T.

   // Array com perguntas para o ParamBox
   aAdd(aPergs, {1, "Dt. Bloqueio Financeiro", dDataFin, "", ".T.", "", ".T.", 80, .F.})
   aAdd(aPergs, {1, "Dt. Bloqueio Fiscal",      dDataFis, "", ".T.", "", ".T.", 80, .F.})
   aAdd(aPergs, {1, "Dt. Bloqueio Movimentos",  dDataMov, "", ".T.", "", ".T.", 80, .F.})
   aAdd(aPergs, {1, "Dt. Bloqueio Estoque",     dDataEst, "", ".T.", "", ".T.", 80, .F.})

   // Exibe ParamBox
   If ParamBox(aPergs, "Informe os Parâmetros de Bloqueio")

      // Guarda os valores anteriores
      dOldFin := dDataFin
      dOldFis := dDataFis
      dOldMov := dDataMov
      dOldEst := dDataEst

      // Captura os novos valores inseridos
      dDataFin := MV_PAR01
      dDataFis := MV_PAR02
      dDataMov := MV_PAR03
      dDataEst := MV_PAR04

      // Atualiza os parâmetros de ambiente
      PutMV("MV_DATAFIN", dDataFin)
      PutMV("MV_DATAFIS", dDataFis)
      PutMV("MV_DBLQMOV", dDataMov)
      PutMV("MV_ULMES",   dDataEst)

      // Monta descrição detalhada para o log
      cDetalhe := "MV_DATAFIN estava como [" + DToC(dOldFin) + "] e foi para [" + DToC(dDataFin) + "], " + ;
                  "MV_DATAFIS estava como [" + DToC(dOldFis) + "] e foi para [" + DToC(dDataFis) + "], " + ;
                  "MV_DBLQMOV estava como [" + DToC(dOldMov) + "] e foi para [" + DToC(dDataMov) + "], " + ;
                  "MV_ULMES   estava como [" + DToC(dOldEst) + "] e foi para [" + DToC(dDataEst) + "]"

      // Grava log na tabela CV8
      GravaCV8(cType, cBatchProc, cMsg, cDetalhe, cSubProc, cMsgSubProc, lCabec)

      // Mensagem de sucesso
      FWAlertSuccess("Parâmetros atualizados com sucesso!", "Confirmação")
   EndIf

   FWRestArea(aArea)

Return

Abaixo o passo a passo necessário.

1. Definir o contexto do log

Identifique o tipo de evento que será registrado: informação erro ou aviso, determine o processo principal e, se necessário o subprocesso envolvido.

2. Preparar os parâmetros da função.

                Configure os valores que serão passados nas funções.

Função: GravaCV8(cType, cBatchProc, cMsg, cDetalhe, cSubProc, cMsgSubProc, lCabec)

  1. Tipo (cType)

Tipo de log. No exemplo citado utilizamos a tabela”SX6″ para indicar que o log está relacionado a parâmetros da tabela SX6 (tabela de parâmetros do Protheus).

  • Processo principal (cBatchProc)

Nome do processo principal ou rotina que está sendo executada. Serve para identificar de onde veio o log.

  • Mensagem principal (cMsg)

Mensagem principal registrada. É o título ou resumo do evento que ocorreu.

  • Detalhes adicionais (cDetalhe)

Detalhes adicionais. Aqui você construiu uma string mostrando os valores anteriores e os novos de MV_DATAFIN, MV_DATAFIS, MV_DBLQMOV e MV_ULMES (Exemplo).

  • Subprocesso (cSubProc)

Nome do subprocesso relacionado.

  • Mensagem do subprocesso (cMsgSubProc)

Mensagem específica do subprocesso.

  • Cabeçalho (lCabec)

Indica se deve gravar cabeçalho. Como está .T., o log será registrado com cabeçalho inicial.

3. Validar o Registro na tabela CV8.

Após a execução, consulte a tabela CV8 para confirmar que o log foi gravado corretamente, verifique se todos os campos foram preenchidos corretamente de acordo com os parâmetros informados.

Tabela CV8
Tabela CV8

4. Utilizar os logs para auditoria e suporte.

Use os registros para acompanhar alterações, identificar falhas e fornecer informações detalhadas em processos de auditoria ou manutenção.

Espero que tenham gostado do conteúdo pessoal.

Um forte abraço.

Artigo redigido por Gabriel Dahm ( LinkedIn ).

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.

Deixe uma resposta

Terminal de Informação