Customize the Data Storing Mechanism
- 5 minutes to read
The Audit Trail Module stores audit records (AuditDataItem objects) in an application database. The AuditTrailService.Instance.SaveAuditTrailData event allows you to configure how this Module saves information. This event is raised when the Module commits an AuditDataItem object to the database. In this event handler, you can modify the SaveAuditTrailDataEventArgs.AuditTrailDataItems collection, add new or remove unnecessary items. The following code demonstrates how to remove ObjectCreated records.
XAF Windows Forms Application - Program.cs (Program.vb) file:
using DevExpress.Persistent.AuditTrail;
// ...
static class Program {
// ...
static void Main() {
MySolutionWindowsFormsApplication application = new MySolutionWindowsFormsApplication();
// ...
AuditTrailService.Instance.SaveAuditTrailData +=
new SaveAuditTrailDataEventHandler(Instance_SaveAuditTrailData);
application.Setup();
application.Start();
// ...
}
static void Instance_SaveAuditTrailData(object sender, SaveAuditTrailDataEventArgs e) {
for(int i = e.AuditTrailDataItems.Count - 1; i >= 0; i--) {
var item = e.AuditTrailDataItems[i];
if(item.OperationType == AuditOperationType.ObjectCreated) {
e.AuditTrailDataItems.RemoveAt(i);
}
}
}
}
XAF ASP.NET Web Forms Application - Global.asax.cs (Global.asax.vb) file:
using DevExpress.Persistent.AuditTrail;
// ...
public class Global : System.Web.HttpApplication {
// ...
protected void Session_Start(object sender, EventArgs e) {
WebApplication.SetInstance(Session, new MySolutionWebApplication());
AuditTrailService.Instance.SaveAuditTrailData +=
new SaveAuditTrailDataEventHandler(Instance_SaveAuditTrailData);
// ...
WebApplication.Instance.Setup();
WebApplication.Instance.Start();
}
static void Instance_SaveAuditTrailData(object sender, SaveAuditTrailDataEventArgs e) {
for(int i = e.AuditTrailDataItems.Count - 1; i >= 0; i--) {
var item = e.AuditTrailDataItems[i];
if(item.OperationType == AuditOperationType.ObjectCreated) {
e.AuditTrailDataItems.RemoveAt(i);
}
}
}
}
XAF ASP.NET Core Blazor Application - Program.cs file:
using DevExpress.Persistent.AuditTrail;
// ...
public class Program
public static void Main() {
// ...
AuditTrailService.Instance.SaveAuditTrailData +=
new SaveAuditTrailDataEventHandler(Instance_SaveAuditTrailData);
CreateHostBuilder(args).Build().Run();
}
static void Instance_SaveAuditTrailData(object sender, SaveAuditTrailDataEventArgs e) {
for(int i = e.AuditTrailDataItems.Count - 1; i >= 0; i--) {
var item = e.AuditTrailDataItems[i];
if(item.OperationType == AuditOperationType.ObjectCreated) {
e.AuditTrailDataItems.RemoveAt(i);
}
}
}
}
Replace the Default Data Storing Mechanism with a Custom One
To do this, set the event’s SaveAuditTrailDataEventArgs.Handled argument to true in the SaveAuditTrailData event handler.
XAF Windows Forms Application - Program.cs (Program.vb) file:
using DevExpress.Persistent.AuditTrail;
// ...
static class Program {
// ...
static void Main() {
MySolutionWindowsFormsApplication application = new MySolutionWindowsFormsApplication();
// ...
AuditTrailService.Instance.SaveAuditTrailData +=
new SaveAuditTrailDataEventHandler(Instance_SaveAuditTrailData);
application.Setup();
application.Start();
// ...
}
static void Instance_SaveAuditTrailData(object sender, SaveAuditTrailDataEventArgs e) {
// Save the data passed as the e.AuditTrailDataItems parameter
e.Handled = true; // Disable the default data storing mechanism
}
}
XAF ASP.NET Web Forms Application - Global.asax.cs (Global.asax.vb) file:
using DevExpress.Persistent.AuditTrail;
// ...
public class Global : System.Web.HttpApplication {
// ...
protected void Session_Start(object sender, EventArgs e) {
WebApplication.SetInstance(Session, new MySolutionWebApplication());
AuditTrailService.Instance.SaveAuditTrailData +=
new SaveAuditTrailDataEventHandler(Instance_SaveAuditTrailData);
// ...
WebApplication.Instance.Setup();
WebApplication.Instance.Start();
}
static void Instance_SaveAuditTrailData(object sender, SaveAuditTrailDataEventArgs e) {
// Save the data passed as the e.AuditTrailDataItems parameter
e.Handled = true; // Disable the default data storing mechanism
}
}
XAF ASP.NET Core Blazor Application - Program.cs file:
using DevExpress.Persistent.AuditTrail;
// ...
public class Program
public static void Main() {
// ...
AuditTrailService.Instance.SaveAuditTrailData +=
new SaveAuditTrailDataEventHandler(Instance_SaveAuditTrailData);
CreateHostBuilder(args).Build().Run();
}
static void Instance_SaveAuditTrailData(object sender, SaveAuditTrailDataEventArgs e) {
// Save the data passed as the e.AuditTrailDataItems parameter
e.Handled = true; // Disable the default data storing mechanism
}
}
Alternative Approaches
- If you want not to log specific operations, implement the approach described in the Audit Specific Operations topic.
- You can create the AuditDataStore descendant and override its Save method. In this case, initialize the AuditTrailService.Instance.AuditDataStore property with an instance of this descendant.