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.


Campo
                    
Descrição
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                     
dado    
TMP_RECNO
-
Número de registro
TMP_USER
-
Usuário no Protheus
TMP_UDB
-
Usuário do banco de
dados                           
dados 
TMP_HOSTNAM
-
IP do Servidor do Protheus
TMP_PROGRAM
-
Nome da rotina principal a partir do menu do
Protheus            
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 o intervalo 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.


Bloco de código
languagecpp
themeEclipse
 
// 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:

Bloco de código
languagecpp
themeEclipse
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: 


Bloco de código
languagecpp
themeEclipse
FwATTDropLog(cAlias)
 


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

 

Trecho de código, programa CFGR700 


Bloco de código
 code
language
cpp
themeEclipselanguagecpp
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" )
//Para criar a ordem por Operação ou Deleção, deve ser usado os campo OPERATI ou DELETE 
//AAdd( aOrdem, "OPERATI, DELETE" ) 
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