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.                    


CampoDescriçã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
languagecpp
themeEclipse
Static Function PrintReport(oReport,cPerg,cAlias)

 



Local aTabelas  := {}

Local aOrdem    := {}

 



Local cFilter   := ""

Local cOrdem    := ""
Local cOpIn    

Local cOpIn     := ""

Local cAftFilter:= ""

 

Local nOrder   


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

End

If !Empty(MV_PAR04)

       if !Empty(cFilter)

             cFilter += " AND "

       end

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

 

End

 

If


End

If !Empty(MV_PAR05)

       if !Empty(cFilter)

             cFilter += " AND "

       end

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

 

End

 

 



End


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

 



cOpIn := ""

if !Empty(cFilter)

       cFilter += " AND "

end

 

If

end

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

       cOpIn := "( "

Else

       cOpIn := "( OPERATI=' ' "

EndIf

 

If

EndIf

If MV_PAR08 == 1

 



       If "OPERATI" $ cOpIn

             cOpIn += " OR "

       EndIf

 



       cOpIn += " OPERATI='I' "

EndIf

 

If

EndIf

If MV_PAR09 == 1

 



       If "OPERATI" $ cOpIn

             cOpIn += " OR "

       EndIf

       cOpIn += " OPERATI='U' "

EndIf

 

If

EndIf

If MV_PAR10 == 1

 



       If "OPERATI" $ cOpIn

             cOpIn += " OR "

       EndIf

 



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

EndIf

 

If

EndIf

If !Empty( cOpIn )

       cOpIn += " ) "

EndIf

 

cFilter

EndIf

cFilter +=
cOpIn

 

 

If
 cOpIn


If !Empty( MV_PAR11 )

       if !Empty(cFilter)

             cFilter += " AND "

       end

 



       cFilter += MV_PAR11

EndIf

 

If

EndIf

If MV_PAR12 == 2

       cAftFilter += "TMP_OK<>'2' "

ElseIf MV_PAR12 == 3

       cAftFilter += "TMP_OK='2' "

EndIf

 

oSection

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
 FwATTViewLog(aTabelas,cFilter,cOrdem,cAftFilter,MV_PAR06,MV_PAR07) }  , STR0035 ) // "Consultando banco de dados..."

 



oReport:Section(1):cAlias := cAlias

oReport:Section(1):Print()

 

Return

 


Return



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