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

简介: Event Log介绍 DNN提供了很多基础的服务(Service),Event记录系统就是其中的一个。如图: Event记录系统可以记录系统中发生的很多事情,如: 那如何使用这个Event系统呢? 在深入细节之前,让我们先想想,在生活中,如果你要记录一个事件,你会怎么办呢?...

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() 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的枚举作为类型描述,不同的类,比如登录、模块安装等等都提不同的枚举类型的事件类型,可以直接使用。

目录
相关文章
|
机器学习/深度学习
DNN单击事件只有在"编辑"状态下才有效的解决方案
我用GridView做了个模块,为什么在查看(View)状态下我不能点击“新建”“编辑”之类的所有按钮,编辑(Edit)状态下可以,本来点击的话,会跳转到另外一个页面的。  解决方法: 在页面设置里保证你的模块"Cache Time"设置为"0"。
|
机器学习/深度学习
DNN4.3.3的版本开发的模块.没登陆DNN的情况下,按钮的事件有时候执行,有时候怎么点都不执行
Q:想问一下,我用DNN4.3.3的版本开发的模块. 为什么我在没登陆DNN的情况下,按钮的事件有时候执行,有时候怎么点都不执行啊. A:清空一下Cache就会正常
545 0
|
机器学习/深度学习 算法 PyTorch
OpenCV-图像着色(采用DNN模块导入深度学习模型)
OpenCV-图像着色(采用DNN模块导入深度学习模型)
177 0
来自OpenCv的DNN模块助力图像分类任务
来自OpenCv的DNN模块助力图像分类任务
183 0
来自OpenCv的DNN模块助力图像分类任务
|
机器学习/深度学习 数据库 SQL
|
机器学习/深度学习
DNN 模块MVP 模式学习中的一些问题
为了让View部分可以测试,我们使用interface来分离View和业务逻辑的耦合。 我的问题是: Q:对于在aspx.design.cs中声明的控件,我们也需要在interface中声明吗?如果要声明,那么在aspx.design.cs中的控件声明是不是就是interface的实现? 我们不能在interface直接声明跟aspx.design.cs控件同名的变量,我们应该认为aspx.design.cs中的控件就是view的一部分,我们无法控制。
499 0
|
机器学习/深度学习 前端开发
介绍一些免费的DNN模块
网址:http://oliverhine.com/DotNetNuke.aspx Administration Advanced Control Panel Free fully featured ajax enabled control panel replacement for Dot...
848 0
|
机器学习/深度学习
如何使用NAnt 自动打包DNN模块 之一
一、安装NAnt 每次开发完毕一个DNN模块的版本,打包DNN模块是一件很繁琐的事情。更重要的是,为每一个发布的版本做一个安装包如果用手工管理和容易出错。这里介绍一下如何使用NAnt自动打包模块。 首先需要下载NAnt,http://sourceforge.net/projects/nant/ 下载之后解压这个ZIP包 解压之后的目录重名名为NAnt,拷贝到c:下面。
972 0
|
XML 机器学习/深度学习 数据格式
DNN Navisuite菜单模块原始XML文件的格式
DNN 比较好用的一个菜单模块式Navsuite模块,这个模块因为使用XML+XSL的技术手段,可以灵活的生成各种各样的菜单样式。 你可以通过修改style目录下的xsl文件来创建自己的菜单样式,但有一个问题是这个模块没有非常详细的手册,生成的XML是什么格式我们并不熟悉,我这里把生成的XML贴出来给大家参考。
818 0
|
机器学习/深度学习
DNN模块调试的一点小技巧
有时候模块出错只是出现这样的错误提示: A critical error has occurred. object reference not set to an instance of an object. 这样的错误提示是毫无价值的,那如何得到有价值的错误提示信息呢?可以使用我之前提高的DNN调试利器DNNDebug.aspx--如何调试出错信息不具体的程序错误就可以解决问题。
735 0