且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何使用DNN中的事件记录服务

更新时间:2022-08-16 22:12:13

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 IntegerByVal username As StringByVal userId As IntegerByVal portalName As StringByVal Ip As StringByVal 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中的事件记录服务objEventLogInfo.AddProperty("IP", Ip)

最后:制定Event类型,使用EventLogController添加进数据库


如何使用DNN中的事件记录服务objEventLogInfo.LogTypeKey = loginStatus.ToString
如何使用DNN中的事件记录服务
如何使用DNN中的事件记录服务objEventLog.AddLog(objEventLogInfo)

LogTypeKey是一个String,所以可以接受DNN中各种Event的枚举作为类型描述,不同的类,比如登录、模块安装等等都提不同的枚举类型的事件类型,可以直接使用。