Páginas filhas
  • Embedded Audit Trail - API de consulta

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Introdução

 

A API de consulta do Embedded Audit Trail permite que os desenvolvedores construam relatórios e consultas de auditoria de forma simples, rápida e segura.

 

Além da facilidade de uso, a API isola o desenvolvedor da consulta das tabelas reais de auditoria, impedindo o acesso direto às mesmas, o que se traduz em segurança para o Administrador do banco de dados e para o próprio desenvolvedor.

 

Modo de uso

 

O princípio básico da API é disponibilizar ao desenvolvedor um conjunto de resultados (result set) padronizado, baseado nos filtros e parâmetros disponíveis. O desenvolvedor poderá então utilizar o RESULT SET como desejar, empregando-o em relatórios ou consultas de tela. Diversos campos estão disponíveis para filtro diretamente na função de chamada, mas o desenvolvedor, de posse do RESULT SET, poderá efetuar filtros adicionais ou transformar os dados na camada ADVPL.

A API efetuará a consulta nas tabelas de auditoria do grupo de empresas do ambiente em que o usuário está "logado".

 

Listamos abaixo os campos retornados pelo RESULT SET. Todos os campos são retornados em formato caractere.

                    

  • TMP_FIELD - Nome do campo
  • TMP_COLD - Conteúdo antes da atualização
  • TMP_CNEW - Conteúdo depois da atualização
  • TMP_TYPE - Tipo de dado                     
  • TMP_RECNO - Número de registro
  • TMP_USER - Usuário no Protheus
  • TMP_UDB - Usuário do banco de dados                           
  • TMP_HOSTNAM - IP do Servidor do Protheus
  • TMP_PROGRAM - Nome da rotina principal a partir do menu do Protheus            
  • TMP_OPERATI - Operação no banco de dados (inclusão, alteração, exclusão)
  • TMP_DTIME - Campo composto de data e hora
  • TMP_UNQ - Chave única do registro                 
  • TMP_OK - indica se o registro do log é confiável ou foi adulterado   

 

O RESULT SET é retornado através da chamada da função FwATTViewLog. Abaixo descrevemos os parâmetros dessa função.

  • aTables – Array que indica o intervalo de tabelas que serão analisadas. O elemento 1 de aTables define a tabela inicial e o elemento 2 a tabela final. Não é necessário que todas as tabelas do intervalo estejam sendo auditadas. Exemplo: {“SA1”,“SZZ”}
  • cFilter – Filtro de seleção em sintaxe SQL. Podem ser utilizados todos os campos de retorno nessa string, exceto o campo TMP_OK.
  • cOrdem – Instrução de ordenação em sintaxe SQL sem a cláusula ORDER BY. Podem ser utilizados todos os campos de retorno nessa string.
  • cAftFilter – Filtro utilizado após a consolidação dos dados. Utilizado especificamente para filtrar o campo TMP_OK pois seu conteúdo é construído posteriormente.
  • dDataDe – Filtro de data inicial. Deve ser passado parâmetro em formato Date do ADVPL
  • dDataAte – Filtro de data final. Deve ser passado parâmetro em formato Date do ADVPL

 

Exemplo de uso

O trecho abaixo foi retirado do relatório padrão do Embedded Audit Trail (CFGR700). Nesse exemplo é definido o range de tabelas iniciais e finais, a string de filtro baseada em parâmetros do relatório, o cAfterFilter para filtrar o campo TMP_OK e os filtros de datas iniciais e finais.

Posteriormente é chamada a função FwATTViewLog processada a consulta e recebido o nome do RESULTSET na variável cAlias.

// Chamada da API de consulta ao Embedded Audit Trail

FWMsgRun(,{|| cAlias := FwATTViewLog(aTabelas,cFilter,cOrdem,cAftFilter,MV_PAR06,MV_PAR07) } ,  , STR0035 ) // "Consultando banco de dados..."

 

O RESULTSET poderia ser lido em uma estrutura do tipo While !Eof(), dbSkip(), EndDo, como se fosse o resultado de uma query tradicional disparada no Protheus. O “Alias” da query é aquele retornado pela função FWATTViewLog (variável cAlias).

Neste exemplo, no entanto, trata-se de um relatório usando a classe tReport. Nesse caso, o RESULTSET é passado ao TReport como descrito abaixo:

oReport:Section(1):cAlias:= cAlias

  

Após o termino do processo ou consulta, deve-se utilizar a função FwATTDropLog passando como parâmetro o nome do resultset:

 

FwATTDropLog(cAlias)

 

Esta função efetua a exclusão da área de trabalho temporária.

 

Trecho de código, programa CFGR700

 

Static Function PrintReport(oReport,cPerg,cAlias)

 

Local aTabelas  :={}

Local aOrdem    :={}

 

Local cFilter   :=""

Local cOrdem    :=""

Local cOpIn     :=""

Local cAftFilter:=""

 

Local nOrder    :=0

 

Local oSection

 

AAdd(aOrdem,"TMP_DTIME, TMP_FIELD, TMP_USER")

AAdd(aOrdem,"TMP_FIELD, TMP_USER, TMP_DTIME")

AAdd(aOrdem,"TMP_FIELD, TMP_DTIME, TMP_USER")

AAdd(aOrdem,"TMP_DTIME, TMP_USER, TMP_FIELD")

AAdd(aOrdem,"TMP_USER, TMP_DTIME, TMP_FIELD")

AAdd(aOrdem,"TMP_USER, TMP_FIELD, TMP_DTIME")

AAdd(aOrdem,"TMP_PROGRAM, TMP_FIELD, TMP_USER")

AAdd(aOrdem,"TMP_HOSTNAM, TMP_USER, TMP_DTIME")

 

MakeSqlExp(cPerg)

 

// Filtro de tabelas

aTabelas:={Upper(MV_PAR01),Upper(MV_PAR02)}

 

If !Empty(MV_PAR03)

       cFilter+=MV_PAR03 // String de filtro em sintaxe SQL

End

 

If !Empty(MV_PAR04)

       if !Empty(cFilter)

             cFilter+=" AND "

       end

       cFilter+=MV_PAR04 // String de filtro em sintaxe SQL

 

End

 

If !Empty(MV_PAR05)

       if !Empty(cFilter)

             cFilter+=" AND "

       end

       cFilter+=Upper(MV_PAR05) // String de filtro em sintaxe SQL

 

End

 

 

// Filtro de operação (inclusão, alteração e exclusão)

 

cOpIn:=""

if !Empty(cFilter)

       cFilter+=" AND "

end

 

If MV_PAR08==1.Or.MV_PAR09==1.Or.MV_PAR10==1

       cOpIn:="( "

Else

       cOpIn:="( OPERATI=' ' "

EndIf

 

If MV_PAR08==1

 

       If "OPERATI"$cOpIn

             cOpIn+=" OR "

       EndIf

 

       cOpIn+=" OPERATI='I' "

EndIf

 

If MV_PAR09==1

 

       If "OPERATI"$cOpIn

             cOpIn+=" OR "

       EndIf

       cOpIn+=" OPERATI='U' "

EndIf

 

If MV_PAR10==1

 

       If "OPERATI"$cOpIn

             cOpIn+=" OR "

       EndIf

 

       cOpIn+=" OPERATI='X' OR OPERATI='D' "

EndIf

 

If !Empty(cOpIn)

       cOpIn+=" ) "

EndIf

 

cFilter+=cOpIn

 

 

If !Empty(MV_PAR11)

       if !Empty(cFilter)

             cFilter+=" AND "

       end

 

       cFilter+=MV_PAR11

EndIf

 

If MV_PAR12==2

       cAftFilter+="TMP_OK<>'2' "

ElseIf MV_PAR12==3

       cAftFilter+="TMP_OK='2' "

EndIf

 

oSection:=oReport:Section(1)

nOrder:=oSection:nOrder

 // Definição da string de ordem baseado na escolha do usuário

cOrdem:=aOrdem[nOrder]

 

oSection:nOrder:=0

 

// Chamada da API de consulta ao Embedded Audit Trail

 

FWMsgRun(,{|| cAlias := FwATTViewLog(aTabelas,cFilter,cOrdem,cAftFilter,MV_PAR06,MV_PAR07)},  ,STR0035)// "Consultando banco de dados..."

 

oReport:Section(1):cAlias:= cAlias

oReport:Section(1):Print()

 

Return

 

Status do documentoConcluído
Data16/01/2015
Versão1.0
Versão anterior1.0
Autores

Sergio Luis De Alcantara Silveira