StrataFrame Forum

Duvidas sobre Auditoria

http://forum.strataframe.net/Topic29472.aspx

By Malcon - 1/31/2011

Boa tarde, ja tenho a auditoria implementada em meu software a algum tempo. Mas agora as empresas estao me cobrando a seguinte situação:

Algum usuario do sistema altera o endereço do cadastro de clientes de Rua XXXX para Rua YYYY. Na auditoria ele ira mostrar que foi na tabela de clientes, no campo endereço com valor antigo XXX e novo YYY. Mas foi em qual cliente?

Existe alguma forma, ou situação que possa implementar para que ele sempre grave um determinado campo, e/ou grupo de campos?
By Ivan George Borges - 1/31/2011

Olá Malcon.

Simplesmente configurando o BO e setando o SecurityBasics, eu acho que não.

Porém, se você usar o Auditor.InsertAuditEvent para logar sua auditoria, pode montar praticamente como quiser. Por exemplo, pode utilizar o seu BO BeforeSave, checar se o campo que você audita foi alterado e inserir tudo o que quiser no SFSAuditEvents ae_Data como um byte array.

Lembre-se que não há filtro de campos da maneira automática que existe hoje, e isto pode incorrer em uma penalidade de performance considerável, dependendo de como seu sistema é utilizado.
By Marcio Valerio Silva - 1/31/2011

Olá Ivan e Malcon!

Desculpem-me a intromissão no post mas se algum de vocês tiverem um exemplo de como fazer essa auditioria para saber o registro em que houve a alteração e puderem postar eu agradeceria, pois me ajudaria muito.

Eu até entendo o uso da classe mas como fazer está faltando uma luz...
By Ivan George Borges - 1/31/2011

Oi Marcio.

Você poderia usar, por exemplo, o BeforeSave e lá dentro descobrir que campos foram alterados. Para isto, estes posts vão te dar uma boa noção de como fazê-lo:

http://forum.strataframe.net/FindPost14099.aspx

http://forum.strataframe.net/FindPost11127.aspx

Então, para cada campo alterado, ou para aqueles que você gostaria de auditar, você pode adicionar um registro à tabela the AuditEvents, algo como o seguinte:

MicroFour.StrataFrame.Security.Auditor.InsertAuditEvent( _
    "Alteração de Valor em Campo", _
    "O campo " & MyField & " foi alterado", _
    New System.Text.ASCIIEncoding().GetBytes( _
    "Valor antigo: " & MyBo.CurrentRow.Item(MyBoFieldNames.MyField, DataRowVersion.Current) & vbLf & _
    "Valor atual: " & MyBo.CurrentRow.Item(MyBoFieldNames.MyField, DataRowVersion.Current)))