Репозиторий отслеживания записей 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 {
}
затем используйте этот атрибут, чтобы проверить, есть ли класс записи, или нет, и проведите аудит на основе этого.