zoukankan      html  css  js  c++  java
  • SharePoint2007文档的点击率统计

    SharePoint中关于文档的跟踪记录和点击率一直是个让人头疼的问题。不过wss3.0的audit功能,可以帮我们一点忙。
    Audit功能说白了就是可以跟踪并记录站点集 、网站、列表或者列表项(文档)的操作记录(包括察看、下载、更新等),
    并且通过对象模型来访问这些操作记录。 其实除了通过对性模型,我们也可以直接访问数据库来获取操作记录。那我们看看怎么样来做吧!


    1. 通过Audit对象模型访问操作记录


    在wss3.0中,有几个类和枚举与我们的Audit有关,他们所处的命名空间为Microsoft.SharePoint。


    这几个类分别是:


    SPAudit

    SPAuditEntry

    SPAuditEntryCollection

    SPAuditQuery

    枚举分别是:

    SPAuditEventSource
    SPAuditEventType
    SPAuditItemType
    SPAuditLocationType
    SPAuditMaskType

    其中几个类都很重要,那我们就来看看如果通过对向模型来获站点集、网站、列表或者文档的“记录”情况。
    首先,我们要打开Audit开关,这样才能保证我们对网站集、文档等所做的操作会被记录下来。打开Audit开关的代码如下:



    using (SPSite sitecol = new SPSite("collectionUrl"))

               
    {
               
    //设置网站集跟踪所有的操作
                    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:操作查询类。
    获取网站集操作记录的代码如下:


    using (SPSite siteColl = new SPSite("sitecollectionurl"))

         
    {

    //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)

    ItemId:列表项GUID(Guid)
    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);


    使用对象模型确实不错,可以获取我们需要的数据,但是却发现几个问题。

    第一, 不够灵活。SPAuditQuery对象提供的筛选方法比较少,比如就不能按照操作类型来获取。

    第二, 效率不高,通过Reflector反射发现,在SPAuditEntryCollection中存在这样的语句


    using (SqlDataReader dr = this.m_query.Site.SqlSession.ExecuteReader(cmd, CommandBehavior.CloseConnection))     {         
    while (dr.Read())                 {                       
    this.AddDataReaderRow(dr);                
    }
        
    }

    这段代码的意思是:遍历整个操作记录查询结果来构造SPAuditEntry对象。因此,为了获取更灵活的查询和更高的效率,我们可以直接访问Audit数据库,即通过直接查询数据库表获取我们需要的操作记录。


    通过数据库访问操作

    其实,操作记录的数据在数据库中的存储十分简单,就存储在wss_content_XXX内容数据库的AuditData表中,只要Audit开关打开,该数据表中就会记录对应站点集、网站、列表(文档)库或者列表(文档)的操作记录。
    我们可以直接访问数据库去做一些自己需要的查询统计分析了。比如:做某个站点集文档的点集率排名,我们就可以写如下sql作一个简单的统计:

    select itemid,count(itemid) as countnum from AuditData where SiteId = @SiteId and
    Event
    = 3 and itemtype = 1 group by itemid order by countnum desc

    其中Event =3 表示统计查看(下载),Itemtype = 1表示统计文档库
    当然我们会发现这样统计会把一些我们不需要的内容也统计进来,比如母版页库的访问,样式库的访问等等。
    我们可以通过代码来写一些过滤的方法把我们不需要的内容过滤掉,比如我们可以写一个配置文件,把需要作统计的列表名称列出来,这样就可以把多余的统计内容过滤掉了。

    SpagoBI中文社区,致力于国际优秀开源BI套件SpagoBI在中国的普通推广; 联系我们QQ群:275725345
  • 相关阅读:
    面向对象程序设计(JAVA) 第11周学习指导及要求
    面向对象程序设计(JAVA) 第10周学习指导及要求
    国内外计算机教育领域顶会、权威期刊名录
    面向对象程序设计(JAVA) 第8周学习指导及要求
    JAVA类与类之间的关系及代码示例
    面向对象程序设计(Java) 第7周学习指导及要求
    面向对象程序设计(Java) 第6-7周学习指导及要求
    面向对象程序设计(Java) 第4周学习指导及要求
    面向对象程序设计(Java) 第2周学习指导及要求
    前端开发基础,JavaScript 主要作用是什么?
  • 原文地址:https://www.cnblogs.com/mybi/p/1999431.html
Copyright © 2011-2022 走看看