Orchard cms跟踪记录存储库,例如在Audit Trail中跟踪内容项

时间:2016-05-30 04:06:04

标签: orchardcms

我正在使用Orchard的Audit Trail模块来跟踪更改内容项。 但是,在我的项目中,我有一些只有记录模型的对象(没有部分模型),我使用Repository.Fetch()

查询和保存它们。

在Audit Trail模块中,它覆盖Updating(),Updated()方法以跟踪更改内容项。

我想知道记录存储库是否存在类似内容,因为我还想跟踪仅使用记录模型的对象。

例如:

我有以下型号:InvoicePart,InvoicePartRecord,DetailRecord,ProductPart,ProductPartRecord

发票有很多细节。

详细信息存储Invoice_Id& Product_Id,销售员可以在Invoice中添加更多详细信息,或者从Invoice中删除它,或者更改Detail的Product_Id。

Orchard Audit Trail只能跟踪Invoice&产品,但不是详细信息,因为它不是内容项,因此我无法知道何时创建,修改或删除了详细信息。

1 个答案:

答案 0 :(得分:1)

为此,您必须添加从原始存储库继承的新存储库实现,如下所示:

public class MyRepository<T> : Repository<T>, IRepository<T> where T : class

在这里,只要您想跟踪更改,就可以触发事件。 然后,要禁止原始实现,您必须添加新的Autofac Module类:

public class DataModule : Module {
    protected override void Load(ContainerBuilder builder) {
        builder.RegisterGeneric(typeof(MyRepository<>)).As(typeof(IRepository<>)).InstancePerDependency();
    }
}

之后您可以处理这些事件并对其进行审核,您将在Orchard.AuditTrail模块中找到一个包含ContentDefinitionProviders的好示例。

注意:如果要指定启用了审核的记录(如果您不想审核系统中所有记录的所有更改,这很有用),您可以添加新的类属性:

[AttributeUsage(AttributeTargets.Class)]
public sealed class AuditTrailEnabledAttribute : Attribute {
}

然后使用此属性检查记录类是否包含它,并根据它进行审核。