天天看點

如何使用DNN中的事件記錄服務

Event Log介紹

DNN提供了很多基礎的服務(Service),Event記錄系統就是其中的一個。如圖:

如何使用DNN中的事件記錄服務

Event記錄系統可以記錄系統中發生的很多事情,如:

如何使用DNN中的事件記錄服務

那如何使用這個Event系統呢?

如何使用DNN中的事件記錄服務

在深入細節之前,讓我們先想想,在生活中,如果你要記錄一個事件,你會怎麼辦呢?比如借别人錢了,你會用一個小紙片寫上,“2008年5月27日,在商場借李四4000元錢,約定8月1日前還”

在系統中我們要記錄一個事件,同樣的,我們得指明這些東西:

  • 事件的日期——2008年5月27日
  • 事件的類型——借錢
  • 事件的相關人——李四(當然,我自己也是相關人)
  • 事件的備注——歸還日期
  • 事件發生的地點——商場

我們指明了這些東西,存入資料庫,及添加了一個Event記錄。

那如何添加呢,DNN裡一個基本概念就是CBO(Custom Business Object)的概念,向資料庫裡添加、修改、删除一個對象,都要通過對象的Info類和Controller類。Event肯定是一個對象,那個應該有一個EventInfo類。DNN的服務方面的代碼都放在了Service命名空間下了,我們在這裡找一找,果然,參照左圖

如何使用DNN中的事件記錄服務

在DNN的DotNetNuke.Services.Log.EventLog下,有一個LogInfo類。我們再來看看LogInfo類有什麼屬性,如下圖:

  • 事件的日期——LogCreateDate、LogCreateDateNum
  • 事件的類型——LogTypeKey
  • 事件的相關人——LogUserName(LoguserID)
  • 事件的備注——LogProperties
  • 事件的地點——LogPortalID、LogPortalName、LogServerName

還有一些其它的屬性,用來記錄事件存儲的檔案等等。

這個時候我們可以想象如何添加一個Event記錄了,生成一個LogInfo,使用LogController添加進資料庫。

我們來看看DNN在使用者登入時是如何把使用者登入這個Event登入到系統裡面的。

代碼如下:

如何使用DNN中的事件記錄服務
如何使用DNN中的事件記錄服務

        Private Shared Sub AddEventLog()Sub AddEventLog(ByVal portalId As Integer, ByVal username As String, ByVal userId As Integer, ByVal portalName As String, ByVal Ip As String, ByVal loginStatus As UserLoginStatus)

如何使用DNN中的事件記錄服務
如何使用DNN中的事件記錄服務

            Dim objEventLog As New Services.Log.EventLog.EventLogController

如何使用DNN中的事件記錄服務
如何使用DNN中的事件記錄服務

            ' initialize log record

如何使用DNN中的事件記錄服務

            Dim objEventLogInfo As New Services.Log.EventLog.LogInfo

如何使用DNN中的事件記錄服務

            Dim objSecurity As New PortalSecurity

如何使用DNN中的事件記錄服務

            objEventLogInfo.AddProperty("IP", Ip)

如何使用DNN中的事件記錄服務

            objEventLogInfo.LogPortalID = portalId

如何使用DNN中的事件記錄服務

            objEventLogInfo.LogPortalName = portalName

如何使用DNN中的事件記錄服務

            objEventLogInfo.LogUserName = objSecurity.InputFilter(username, PortalSecurity.FilterFlag.NoScripting Or PortalSecurity.FilterFlag.NoAngleBrackets Or PortalSecurity.FilterFlag.NoMarkup)

如何使用DNN中的事件記錄服務

            objEventLogInfo.LogUserID = userId

如何使用DNN中的事件記錄服務
如何使用DNN中的事件記錄服務

            ' create log record

如何使用DNN中的事件記錄服務

            objEventLogInfo.LogTypeKey = loginStatus.ToString

如何使用DNN中的事件記錄服務

            objEventLog.AddLog(objEventLogInfo)

如何使用DNN中的事件記錄服務
如何使用DNN中的事件記錄服務

        End Sub

如何使用DNN中的事件記錄服務
如何使用DNN中的事件記錄服務

第一步:生成一個EventLogController

如何使用DNN中的事件記錄服務

Dim objEventLog As New Services.Log.EventLog.EventLogController

第二步:生成一個EventInfo,并填充相關屬性

如何使用DNN中的事件記錄服務

Dim objEventLogInfo As New Services.Log.EventLog.LogInfo

如何使用DNN中的事件記錄服務
如何使用DNN中的事件記錄服務

Dim objSecurity As New PortalSecurity

如何使用DNN中的事件記錄服務
如何使用DNN中的事件記錄服務

objEventLogInfo.AddProperty("IP", Ip)

如何使用DNN中的事件記錄服務
如何使用DNN中的事件記錄服務

objEventLogInfo.LogPortalID = portalId

如何使用DNN中的事件記錄服務
如何使用DNN中的事件記錄服務

objEventLogInfo.LogPortalName = portalName

如何使用DNN中的事件記錄服務
如何使用DNN中的事件記錄服務

objEventLogInfo.LogUserName = objSecurity.InputFilter(username, PortalSecurity.FilterFlag.NoScripting Or PortalSecurity.FilterFlag.NoAngleBrackets Or PortalSecurity.FilterFlag.NoMarkup)

如何使用DNN中的事件記錄服務
如何使用DNN中的事件記錄服務

objEventLogInfo.LogUserID = userId

這裡要注意的一點是,LogInfo的AddProperty()函數可以允許我們添加自定義的記錄項。比如本例中的:

如何使用DNN中的事件記錄服務

最後:制定Event類型,使用EventLogController添加進資料庫

如何使用DNN中的事件記錄服務

objEventLogInfo.LogTypeKey = loginStatus.ToString

如何使用DNN中的事件記錄服務
如何使用DNN中的事件記錄服務

objEventLog.AddLog(objEventLogInfo)

LogTypeKey是一個String,是以可以接受DNN中各種Event的枚舉作為類型描述,不同的類,比如登入、子產品安裝等等都提不同的枚舉類型的事件類型,可以直接使用。