wss3.0的Audit特性,记录文档操作,做SharePoint2007文档的点击率
SharePoint中关于文档的跟踪记录和点击率一直是个让人头疼的问题。不过wss3.0的audit功能,可以帮我们一点忙。
Audit功能说白了就是可以跟踪并记录站点集 、网站、列表或者列表项(文档)的操作记录(包括察看、下载、更新等),
并且通过对象模型来访问这些操作记录。 其实除了通过对性模型,我们也可以直接访问数据库来获取操作记录。那我们看看怎么样来做吧!
1. 通过Audit对象模型访问操作记录
在wss3.0中,有几个类和枚举与我们的Audit有关,他们所处的命名空间为Microsoft.SharePoint。
这几个类分别是:
SPAuditEntry
SPAuditQuery
枚举分别是:
SPAuditEventSource
SPAuditEventType
SPAuditItemType
SPAuditLocationType
SPAuditMaskType
其中几个类都很重要,那我们就来看看如果通过对向模型来获站点集、网站、列表或者文档的“记录”情况。
首先,我们要打开Audit开关,这样才能保证我们对网站集、文档等所做的操作会被记录下来。打开Audit开关的代码如下:
{
//设置网站集跟踪所有的操作
sitecol.Audit.AuditFlags = SPAuditMaskType. All;
sitecol.Audit.Update();
}
注意其中的语句:sitecol.Audit.AuditFlags = SPAuditMaskType.All。这句话的意思是打开Audit开关,这样就可以跟踪对应网站集的所有操作了。(当然,所有的跟踪操作都是owstimer这个后台服务来完成的,具体跟踪的原理还需要研究。)
具体的操作我们也可以根据需要选择,使用枚举SPAuditMaskType的其它值来选择不同的跟踪类型:
All,CheckIn,CheckOut,ChildDelete,Copy,Delete,Move,None,ProfileChange,SchemaChange,Search,SecurityChange,Undelete,Update,View,Workflow
给文档(列表)库或者文档(列表)打开开关也是同样的方法,在这里我就不重复描述了。(注意:如果要关闭该功能,只要设置SPAuditMaskType. None就可以了)。
OK,现在我们已经打开Audit的开关了,现在我们所做的“一切”动作都会被“记录在案”了。那接下来我们就看看如何获取操作记录。
要获取操作记录,我们需要使用刚才提到的几个类
SPAudit:Audit类,相当于一个Manager的作用。
SPAuditEntry:具体的操作记录实体,代表着某一个操作。
SPAuditEntryCollection:操作记录实体集合。
SPAuditQuery:操作查询类。
获取网站集操作记录的代码如下:
{
//1、使用站点集构造一个SPAuditQuery类
SPAuditQuery wssQuery = new SPAuditQuery(siteColl);
//2、通过站点集的Audit属性得到SPAuditEntryCollection,即该站点集所有操作记录的集合
SPAuditEntryCollection auditCol = siteColl.Audit.GetEntries(wssQuery);
foreach (SPAuditEntry entry in auditCol)
{
//3、通过遍历就可以得到每条操作记录
}
}
注意注解3,我们可以通过操作记录实体(SPAuditEntry)的实例entry去获取相关的属性信息了。SPAuditEntry的属性很多,可以我们经常用到的属性有:
DocLocation:文档的路径(string),被访问或者操作的文档、列表等的相对路径(相对于站点集)。
Event:事件枚举(enum SPAuditEventType),包括:签入、签出、拷贝、删除、更新、查看等等操作。具体操作可以参考wss3.0 sdk
EventName:事件的名称(string)
ItemTyp:列表项类型枚举(enum SPAuditItemType),指操作被执行的对象,包括Document,Folder,List,ListItem,Site,Web
Occurred:操作发生的时间(DateTime)
UserId:操作者ID(string)
如果我们要通过条件筛选操作记录,可以在注解2处加上以下代码:
wssQuery.RestrictToList(list);
//获取特定列表项操作记录
wssQuery.RestrictToListItem(listItem);
//获取特定用户操作记录
wssQuery.RestrictToUser(userId);
//获取特定时间操作记录
wssQuery.SetRangeStart(starttime);
wssQuery.SetRangeEnd(endtime);
使用对象模型确实不错,可以获取我们需要的数据,但是却发现几个问题。
while (dr.Read()) {
this.AddDataReaderRow(dr);
}
}
这段代码的意思是:遍历整个操作记录查询结果来构造SPAuditEntry对象。因此,为了获取更灵活的查询和更高的效率,我们可以直接访问Audit数据库,即通过直接查询数据库表获取我们需要的操作记录。
2 通过数据库访问操作
其实,操作记录的数据在数据库中的存储十分简单,就存储在wss_content_XXX内容数据库的AuditData表中,只要Audit开关打开,该数据表中就会记录对应站点集、网站、列表(文档)库或者列表(文档)的操作记录。
我们可以直接访问数据库去做一些自己需要的查询统计分析了。比如:做某个站点集文档的点集率排名,我们就可以写如下sql作一个简单的统计:
其中Event =3 表示统计查看(下载),Itemtype = 1表示统计文档库
当然我们会发现这样统计会把一些我们不需要的内容也统计进来,比如母版页库的访问,样式库的访问等等。
我们可以通过代码来写一些过滤的方法把我们不需要的内容过滤掉,比如我们可以写一个配置文件,把需要作统计的列表名称列出来,这样就可以把多余的统计内容过滤掉了。
有兴趣的朋友可以一起讨论下具体的实现方式,
我的邮箱是:jiessie327@qq.com,或者回复我!
转载要求及授权协议:
作者: 零零猪(or)Jiessie327(or)JiessieLiang
出处:http://jiessie327.cnblogs.com/
版权:本文版权归作者所有
转载:欢迎转载,为了尊重作者的劳动成果,在【转载】时请按作者要求,指明文章【出处】或给出【原文链接】,谢谢
================================================================
请遵守署名-非商业性使用-禁止演绎 2.5 中国大陆 License.
================================================================