EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

分析审计日志

您可以使用任何支持SQL查询执行的数据库管理系统(DBMS)从外部访问审核日志。如果您使用的是Microsoft SQL Server,则建议使用Microsoft SQL Server Management Studio。您也可以使用SQLCMD控制台工具来执行SQL查询,但是它的便利性要低得多。

通过SQL查询分析审核日志

您可以编写各种SQL查询来访问数据库中存储的审核日志中的数据。常见的查询模板可能如下所示。

select OperationType, ModifiedOn, UserName, PropertyName, DisplayName, OldValue, NewValue
from AuditDataItemPersistent a
join AuditedObjectWeakReference aw on a.AuditedObject = aw.Oid

例如,要过滤特定对象的所有更改,请使用以下SQL语句(对于MS SQL)。

select OperationType, ModifiedOn, UserName, PropertyName, DisplayName, OldValue, NewValue
from AuditDataItemPersistent a
join AuditedObjectWeakReference aw on a.AuditedObject = aw.Oid
where PropertyName = 'Office'
order by ModifiedOn

如果主键字段的类型是INT,而不是GUID,请使用AuditedObjectWeakReference表的IntId字段(而不是GuidId字段)在上面的查询中联接表。

在UI中分析审核日志

当前版本的Audit Trail模块不允许在不修改业务对象实现的情况下在用户界面中表示审核日志。因此,如果要查看对特定对象所做的更改,请添加一个AuditTrail集合属性,该属性列出了审核日志中的对象。下面的代码演示了这一点。

using DevExpress.Persistent.BaseImpl;
using DevExpress.ExpressApp;
// ...
[DefaultClassOptions]
public class MyBusinessObject : BaseObject {
    public MyBusinessObject(Session session) : base(session) { }
    //...
    private XPCollection<AuditDataItemPersistent> auditTrail;
    [CollectionOperationSet(AllowAdd = false, AllowRemove = false)]
    public XPCollection<AuditDataItemPersistent> AuditTrail {
        get {
            if(auditTrail == null) {
               auditTrail = AuditedObjectWeakReference.GetAuditTrail(Session, this);
            }
            return auditTrail;
        }
    }
}

下图显示了一个详细视图,其中包含上面的代码中演示的AuditTrail属性。

AuditTrail维恩

通过SQL查询清除审核日志

以下SQL语句说明了如何删除2018年10月24日之前所做的所有审核日志条目。

update [AuditDataItemPersistent]
set
  GCRecord = 1, AuditedObject = null
where ModifiedOn < &#39;2018-10-24&#39;

update [XPWeakReference]
set
  GCRecord = 1
where Oid in (select NewObject from AuditDataItemPersistent where GCRecord is not null) or
   Oid in (select OldObject from AuditDataItemPersistent where GCRecord is not null) or
   (Oid in (select Oid from AuditedObjectWeakReference) and
    not (Oid in (select AuditedObject from AuditDataItemPersistent where AuditedObject is not null)))

delete from AuditDataItemPersistent
where GCRecord is not null

delete from AuditedObjectWeakReference
where Oid in (select Oid from [XPWeakReference] where GCRecord is not null)

delete from [XPWeakReference]
where GCRecord is not null

您可以实现仅对管理员可用的Action,该Action将使用标准ADO.NET方法执行上述语句。

相关文章

转载保留此链接,注明出处