2016-05-30 5 views
1

Ich benutze Orchards Audit Trail-Modul zum Verfolgen von Inhalten mit Änderungsinhalt. Aber, in meinem Projekt habe ich einige Objekte, die nur Datensatzmodell haben (kein Teilmodell), ich abfragen und speichern sie mithilfe von Repository.Fetch()Orchard cms Verfolgen von Datensatz-Repository wie Verfolgen von Inhaltselementen in Audit Trail

Im Audit Trail-Modul überschreiben es Aktualisierung (), Aktualisierte() Methode zum Verfolgen eines Inhaltselements.

Ich möchte wissen, ob es so etwas für Datensatz-Repository gibt, weil ich auch Objekte verfolgen möchten, die nur Datensatzmodell verwenden.

Ex:

Ich habe diese Modelle: InvoicePart, InvoicePartRecord, DetailRecord, ProductPart, ProductPartRecord

eine Rechnung viele Details hat.

Detail speichert Invoice_Id & Product_Id, Verkäufer kann weitere Details in Rechnung hinzufügen oder aus Rechnung löschen oder Product_Id eines Details ändern.

Orchard Audit Trail kann nur verfolgen, Änderung für Rechnung & Produkt, aber nicht für Detail, denn es ist kein Inhaltselement, so dass ich nicht wissen kann, wenn ein Detail erstellt, geändert oder gelöscht wurde.

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

hier können Sie Ihre Ereignisse auslösen können, wenn Sie Änderungen verfolgen möchten:

Antwort

1

Um dies zu tun, müssen Sie neue Repository Implementierung aus dem Original, wie dies geerbt hinzuzufügen. Dann die ursprüngliche Implementierung zu unterdrücken Sie neue Autofac Modul Klasse hinzufügen:

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

nach, dass Sie auf diese Ereignisse reagieren können und prüfen sie, werden Sie eine gute Probe auf das in Orchard.AuditTrail Modul mit ContentDefinitionProviders finden.

Hinweis: Wenn Sie die Datensätze angeben möchten, welche Prüfungs aktiviert haben (diese nützlich, wenn Sie alle Änderungen auf alle Datensätze in Ihrem System zur Prüfung nicht wollen), können Sie eine neue Klasse Attribut hinzufügen:

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

Verwenden Sie dieses Attribut dann, um zu überprüfen, ob die Aufzeichnungsklasse es enthält oder nicht, und führen Sie Ihre Auditing auf dieser Grundlage durch.

+0

Ich kann nicht ContentDefinitionProvider finden, und wenn ich einen Datensatz während des Debuggens speichern, sehe ich es in keiner Load() -Methode laufen –