2016-05-30 46 views
1

我正在使用Orchard的Audit Trail模块来跟踪更改内容项。 () 但是,在我的项目中,我有一些只有记录模型的对象(没有零件模型),我使用Repository查询并保存它们。在Audit Trail模块中,它覆盖Updating ),Updated()方法来跟踪更改内容项目。Orchard cms跟踪记录存储库,跟踪Audit Trail中的内容项

我想知道是否有类似的记录存储库,因为我也想跟踪只使用记录模型的对象。

例:

我有这些模型:InvoicePart,InvoicePartRecord,DetailRecord,ProductPart,ProductPartRecord

的发票有许多细节。

细节商店Invoice_Id & Product_Id,销售人员可以将更多细节添加到发票中,或从发票中删除它,或更改细节的Product_Id。

Orchard Audit Trail只能跟踪发票&产品的更改,但不包含详细信息,因为它不是内容项目,所以我无法知道Detail何时创建,修改或删除。这里

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

,可以触发您的活动,只要你想跟踪变化:

回答

1

要做到这一点,你必须添加从原来的一个继承新仓库实现,像这样。 然后,抑制原始的实现必须添加新的Autofac模块类:

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 { 
} 

然后使用此属性检查记录类是否存在它,并根据它进行审计。

+0

我找不到ContentDefinitionProviders,并且当我在调试时保存一条记录时,我发现它不会遇到任何Load()方法 –