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


    Event Log介绍

    DNN提供了很多基础的服务(Service),Event记录系统就是其中的一个。如图:

    clip_image002

    Event记录系统可以记录系统中发生的很多事情,如:

    clip_image004

    那如何使用这个Event系统呢?

    clip_image007在深入细节之前,让我们先想想,在生活中,如果你要记录一个事件,你会怎么办呢?比如借别人钱了,你会用一个小纸片写上,“2008年5月27日,在商场借李四4000元钱,约定8月1日前还”

    在系统中我们要记录一个事件,同样的,我们得指明这些东西:

    • 事件的日期——2008年5月27日
    • 事件的类型——借钱
    • 事件的相关人——李四(当然,我自己也是相关人)
    • 事件的备注——归还日期
    • 事件发生的地点——商场

    我们指明了这些东西,存入数据库,及添加了一个Event记录。

    那如何添加呢,DNN里一个基本概念就是CBO(Custom Business Object)的概念,向数据库里添加、修改、删除一个对象,都要通过对象的Info类和Controller类。Event肯定是一个对象,那个应该有一个EventInfo类。DNN的服务方面的代码都放在了Service命名空间下了,我们在这里找一找,果然,参照左图

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     
     

    clip_image009

    在DNN的DotNetNuke.Services.Log.EventLog下,有一个LogInfo类。我们再来看看LogInfo类有什么属性,如下图:

    • 事件的日期——LogCreateDate、LogCreateDateNum
    • 事件的类型——LogTypeKey
    • 事件的相关人——LogUserName(LoguserID)
    • 事件的备注——LogProperties
    • 事件的地点——LogPortalID、LogPortalName、LogServerName

    还有一些其它的属性,用来记录事件存储的文件等等。

    这个时候我们可以想象如何添加一个Event记录了,生成一个LogInfo,使用LogController添加进数据库。

    我们来看看DNN在用户登录时是如何把用户登录这个Event登录到系统里面的。

     

     

     

     

     

     

     

     

     

     

     

     

    代码如下:


            Private Shared Sub AddEventLog(ByVal portalId As IntegerByVal username As StringByVal userId As IntegerByVal portalName As StringByVal Ip As StringByVal loginStatus As UserLoginStatus)

                
    Dim objEventLog As New Services.Log.EventLog.EventLogController

                
    ' initialize log record
                Dim objEventLogInfo As New Services.Log.EventLog.LogInfo
                
    Dim objSecurity As New PortalSecurity
                objEventLogInfo.AddProperty(
    "IP", Ip)
                objEventLogInfo.LogPortalID 
    = portalId
                objEventLogInfo.LogPortalName 
    = portalName
                objEventLogInfo.LogUserName 
    = objSecurity.InputFilter(username, PortalSecurity.FilterFlag.NoScripting Or PortalSecurity.FilterFlag.NoAngleBrackets Or PortalSecurity.FilterFlag.NoMarkup)
                objEventLogInfo.LogUserID 
    = userId

                
    ' create log record
                objEventLogInfo.LogTypeKey = loginStatus.ToString
                objEventLog.AddLog(objEventLogInfo)

            
    End Sub


    第一步:生成一个EventLogController

    Dim objEventLog As New Services.Log.EventLog.EventLogController

    第二步:生成一个EventInfo,并填充相关属性


    Dim objEventLogInfo As New Services.Log.EventLog.LogInfo

    Dim objSecurity As New PortalSecurity

    objEventLogInfo.AddProperty(
    "IP", Ip)

    objEventLogInfo.LogPortalID 
    = portalId

    objEventLogInfo.LogPortalName 
    = portalName

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

    objEventLogInfo.LogUserID 
    = userId

    这里要注意的一点是,LogInfo的AddProperty()函数可以允许我们添加自定义的记录项。比如本例中的:

    objEventLogInfo.AddProperty("IP", Ip)

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


    objEventLogInfo.LogTypeKey = loginStatus.ToString

    objEventLog.AddLog(objEventLogInfo)

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

  • 相关阅读:
    noip2011 总结
    noip2010 总结
    noip2009 总结
    noip2008 总结
    noip2006总结
    noip2007 总结
    noip2006 总结
    【模板】线段树模板
    【数学】8.30题解-count数页码
    【数论】8.30题解-prime素数密度 洛谷p1835
  • 原文地址:https://www.cnblogs.com/DotNetNuke/p/1242300.html
Copyright © 2020-2023  润新知