2016-05-30 7 views
1

オーチャードの監査証跡モジュールを使用して、変更内容アイテムを追跡しています。 しかし、私のプロジェクトでは、レコードモデル(部品モデルを持たない)を持つオブジェクトがいくつかあり、Repository.Fetch()を使ってそれらをクエリして保存します。オーチャードCMS追跡記録リポジトリのような記録リポジトリ

Audit Trailモジュールでは、 )、コンテンツアイテムの変更を追跡するUpdated()メソッド。

レコードモデルのみを使用するオブジェクトを追跡したいので、レコードリポジトリのようなものがあるかどうかを知りたいと思います。

例:

私はこれらのモデルを持っている:InvoicePart、InvoicePartRecord、DetailRecord、ProductPart、ProductPartRecord

請求書は多くの詳細を持っています。

詳細ストアInvoice_Id & Product_Id、salesmanは請求書に詳細を追加したり、請求書から削除したり、詳細のProduct_Idを変更することができます。

オーチャード監査証跡は請求書&製品の変更を追跡することができますが、詳細は作成されていないため、詳細が作成、変更、または削除されたことがわかりません。

答えて

1

これを行うには、次のように、元の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(); 
    } 
} 

あなたはこれらのイベントを処理し、それらを監査することができた後、あなたはContentDefinitionProvidersとOrchard.AuditTrailモジュールで、この上に良いサンプルがあります。

注:あなたは(あなたのシステム内のすべてのレコードのすべての変更を監査しない場合は、この便利な)監査が有効になっているレコードを指定したい場合、あなたは新しいクラス属性を追加することができます

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

この属性を使用して、レコードクラスにあるかどうかを確認し、それに基づいて監査を行います。

+0

ContentDefinitionProvidersが見つかりません。デバッグ中にレコードを保存すると、Load()メソッドが実行されません –