Репозиторий отслеживания записей Orchard cms, например отслеживание содержимого в Audit Trail

Я использую модуль Orchard Audit Trail для отслеживания изменений элементов контента. Но в моем проекте у меня есть некоторые объекты, которые имеют только модель записи (не имеют модели детали), я запрашиваю и сохраняю их с помощью Repository.Fetch()

В модуле Audit Trail он переопределяет метод Updating(), Обновлено () для отслеживания изменения элемента содержимого.

Я хочу знать, есть ли что-то подобное для репозитория записей, потому что я также хочу отслеживать объекты, которые используют только модель записи.

Пример:

У меня есть эти модели: InvoicePart, InvoicePartRecord, DetailRecord, ProductPart, ProductPartRecord

Счет имеет много деталей.

Хранилища деталей Invoice_Id & Product_Id, продавец может добавить дополнительные детали в Invoice, или удалить их из Invoice, или изменить Product_Id детали.

Orchard Audit Trail может отслеживать только изменения для счета-фактуры и продукта, но не для детализации, поскольку это не элемент содержимого, поэтому я не могу знать, когда была создана, изменена или удалена деталь.

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

затем используйте этот атрибут, чтобы проверить, есть ли класс записи, или нет, и проведите аудит на основе этого.

Другие вопросы по тегам