EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

审计跟踪系统中的服务器端时间戳

默认情况下,审计跟踪系统使用客户端时间戳。将审核数据项保存到数据存储中时,ModifyOn属性将使用用于执行更改的计算机时间进行初始化。这可能会导致信息不可靠,因为可以将同时进行的两项更改保存为好像在不同时刻进行的更改(例如,如果这些计算机位于不同的时区)。为了避免这种影响,您应该使用服务器端时间戳。为此,您需要用服务器端时间戳策略替换默认的本地审核时间戳策略。本主题演示如何实现自定义审核时间戳策略,并将其设置为“审核跟踪”系统。

要实施审核时间戳策略,应实施IAuditTimestampStrategy接口。进一步,您将看到如何实现时间戳Web服务和MSSql Server时间戳策略。

提示

DevExpress代码示例数据库(http://www.devexpress.com/example=E1808)中提供了完整的示例项目。

时间戳记Web服务

  • 将Asp.NET Web服务添加到您的解决方案。
  • GetTime方法添加到新服务的实现中:

    [WebService(Namespace = "http://localhost/TimestampService/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class TimestampWebService : System.Web.Services.WebService {
       [WebMethod]
       public DateTime GetTime() {
          return DateTime.Now;
       }
    }
    
  • 对于WebService属性,指定所需的URL(请参见上面的代码)。
  • 将对新Web服务项目的Web引用设置为应用程序模块。
  • 在应用程序模块中,实现WebServiceTimestampStrategy类。以下代码对此进行了演示:

    using System;
    using AuditServerSideTimestampingDemo.Module.TimestampService;
    using DevExpress.Persistent.AuditTrail;
    using DevExpress.Xpo;
    namespace MySolution.Module {
       public class WebServiceTimestampStrategy : IAuditTimestampStrategy {
          DateTime cachedTimestamp;
          #region IAuditTimestampStrategy Members
          public DateTime GetTimestamp(AuditDataItem auditDataItem) {
             return cachedTimestamp;
          }
          public void OnBeginSaveTransaction(Session session) {
             try {
                TimestampWebService service = new TimestampWebService();
                cachedTimestamp = service.GetTime();
             }
             catch {
                throw new Exception(
                   "The TimestampWebService cannot be accessed. Make sure that it is running.");
             }
          }
          #endregion
       }
    }
    
  • 创建WebServiceTimestampStrategy类的实例,并将其分配给AuditTrailService.Instance.TimestampStrategy属性。在下面的代码中,这是针对Windows Forms应用程序执行的。实际上,您也可以为ASP.NET应用程序执行此操作。

    static void Main() {
       MySolutionWindowsFormsApplication application = new MySolutionWindowsFormsApplication();
       //...
       IAuditTimestampStrategy timeStampStrategy = new WebServiceTimestampStrategy();
       AuditTrailService.Instance.TimestampStrategy = timeStampStrategy;
       application.Setup();
       //...
    }
    
  • 运行应用程序。检查实现的代码是否有效。

MSSql Server时间戳策略

要获取时间,可以使用MSSql服务器。为此,请使用Session.ExecuteScalar方法。要在MSSql服务器上获取时间,请使用GETDATE()函数。下面的代码演示了整个MSSqlServerTimestampStrategy类的实现:

using System;
using DevExpress.Xpo;
using DevExpress.Persistent.AuditTrail;
namespace MySolution.Module {
   public class MSSqlServerTimestampStrategy : IAuditTimestampStrategy{
      DateTime cachedTimestamp;
#region IAuditTimestampStrategy Members
      public DateTime GetTimestamp(AuditDataItem auditDataItem) {
         return cachedTimestamp;
      }
      public void OnBeginSaveTransaction(Session session) {
         cachedTimeStamp = (DateTime)session.ExecuteScalar("select getdate()");
      }
#endregion
   }
}

创建的实例MSSqlServerTimestampStrategy类,并将其分配给AuditTrailService.Instance.TimestampStrategy财产。上面已针对WebServiceTimestampStrategy类进行了演示。

转载保留此链接,注明出处