moss文档浏览次数统计
2009-06-18 11:06
253 查看
参考《MOSS中文档点击率统计的实现方法》一文,具体出处不太清楚,在网上搜到的,都没有标明出处或是原著,我也就不给出链接了,大家可以自己去搜一下。我按文中方法实现不成功,按照文中思路重新新写了一遍,原文中是通过修改Global.asax文件我发现这样没法调试(至少我这里没法调试,我这里总有点问题样的,工作流也没法附加进程调试,哪位高手能指定我一下为什么),于是改用HttpModule的方式,即可以实现,又可以调试。 具体步骤:
1.先为你的文档建立一个数字列,叫“浏览数”。
2.新建一个类库,我起名叫HitsCount,添加引用Microsoft.SharePoint,System.configuration以及System.Web
然后,将Class1.cs改名为HitsCountModule.cs
3. HitsCountModule.cs中内容如下
4.建立强名称。右键项目-》属性-》签名-》把为程序集签名勾上,然后在下面下拉菜单中点“新建”,在弹出来的对话框中把“使用密码保护密钥文件”的小勾去掉,随便输入一个名字,确定。编译
5. 把编译好的dll拖入c:\windows\assembly目录下。也就是加入GAC,我是建立了一个bat文件,部署方便,bat文件内容如下
6.修改web.config文件,我的是在D:\Inetpub\wwwroot\wss\VirtualDirectories\80下,查找<httpModules>,在此节点下添加
<add name="HitsCount" type="HitsCount.HitsCountModule, HitsCount, Version=1.0.0.0, Culture=neutral, PublicKeyToken=239ba512823b3816"/>
其中PublicKeyToken值会不太一样,需要修改,可以在c:\windows\assembly下找到你拖进去的那个dll查属性就可以看到了。要么你就用Reflector来看吧。
完了后,在命令行输入iisreset重启IIS就完成了。
如果需要调试,直接在VS里,调试-》附加进程-》然后选择w3wp.exe。就可以设置断点并调试了。如果有多个w3wp.exe,可以在命令行下用iisapp命令来识别。
总结
这个方法虽然实现了浏览数的统计,可是也有一个问题,就是我们的“浏览数”是一个普通的列,用户只要有一定的权限就能修改这个列的值。这个问题可以通过自定义Field来实现,不过这类文章太多了,SDK里也有个很好的例子。小弟第一次在这里发随笔,平时说话经常语无论次,写出来的东西估计也是,大家砖头准备好,现一下就好,别真砸过来哈。
==============================================
Q:通过HttpModule的方式统计计数还是会有落网之鱼!不知pengyuan 有没有试过下载副本是否统计得到?此时,有必要修改DownLoad页面。
A:当时没有考虑这个问题呢,我试了一下,的确是在下拉菜单的发送到下载副本项是统计不到的,直接右键另存为刷新后是可以正确统计的。
我查了一下,因为请求的url是不一样的,下载副本定向的url是/Docs/_layouts /download.aspx?SourceUrl=%2FDocs%2F2%2FTest1%2Edocx&Source=http%3A%2F%2Fpengyuan%2FDocs%2F2%2FForms%2FAllItems%2Easpx&FldUrl=
这样一串,他是使用download.aspx页面来输出文件的,并不是文件的实际地址,而我设置的过滤器比较简单,只是判断请求url是否是 以.doc或docx结尾,这串url里不也包含了Test1%2E.docx(%2E代表“.”url编码)字样么。只要做相应的修改一下
List GetFileTypes()
bool FiltrateFile(string fileUrl)
这两个函数,让别判断为包含 “/Docs/_layouts/download.aspx” 又包含 “%2Edocx” ,这样就可以识别出来了。这个过滤器,应该按需来做吧。
其实你调试进去就可以发现是否捕获到这个url了
还有就是里面的处理问题,对于上面的请求url,下面这一句会报错,因为不是文件实际地址
Microsoft.SharePoint.SPFile file = web.GetFile(fileUrl);
捕获这个请求是肯定捕获到了,MOSS用的是download页面来输出文件,就是url的问题,也没有必要改donwload页面了,因为url里包含了.docx文件地址(=%2FDocs%2F2%2FTest1%2Edocx),你只要相办法从中取出来就OK了
具体代码我就不写出来了吧,应该不难的,我有时间再修改我的代码吧
1.先为你的文档建立一个数字列,叫“浏览数”。
2.新建一个类库,我起名叫HitsCount,添加引用Microsoft.SharePoint,System.configuration以及System.Web
然后,将Class1.cs改名为HitsCountModule.cs
3. HitsCountModule.cs中内容如下
using System; using System.Collections.Generic; using System.Text; using System.Web; using Microsoft.SharePoint; using Microsoft.SharePoint.WebControls; namespace HitsCount原文是用PreRequestHandlerExecute,我用PreRequestHandlerExecute是捕获不到我用word打开的.docx文件,于是我改用ResolveRequestCache方法后,解决。
4.建立强名称。右键项目-》属性-》签名-》把为程序集签名勾上,然后在下面下拉菜单中点“新建”,在弹出来的对话框中把“使用密码保护密钥文件”的小勾去掉,随便输入一个名字,确定。编译
5. 把编译好的dll拖入c:\windows\assembly目录下。也就是加入GAC,我是建立了一个bat文件,部署方便,bat文件内容如下
"%programfiles%\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" -uf HitsCount "%programfiles%\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" -if bin\Debug\HitsCount.dll iisreset
6.修改web.config文件,我的是在D:\Inetpub\wwwroot\wss\VirtualDirectories\80下,查找<httpModules>,在此节点下添加
<add name="HitsCount" type="HitsCount.HitsCountModule, HitsCount, Version=1.0.0.0, Culture=neutral, PublicKeyToken=239ba512823b3816"/>
其中PublicKeyToken值会不太一样,需要修改,可以在c:\windows\assembly下找到你拖进去的那个dll查属性就可以看到了。要么你就用Reflector来看吧。
完了后,在命令行输入iisreset重启IIS就完成了。
如果需要调试,直接在VS里,调试-》附加进程-》然后选择w3wp.exe。就可以设置断点并调试了。如果有多个w3wp.exe,可以在命令行下用iisapp命令来识别。
总结
这个方法虽然实现了浏览数的统计,可是也有一个问题,就是我们的“浏览数”是一个普通的列,用户只要有一定的权限就能修改这个列的值。这个问题可以通过自定义Field来实现,不过这类文章太多了,SDK里也有个很好的例子。小弟第一次在这里发随笔,平时说话经常语无论次,写出来的东西估计也是,大家砖头准备好,现一下就好,别真砸过来哈。
==============================================
Q:通过HttpModule的方式统计计数还是会有落网之鱼!不知pengyuan 有没有试过下载副本是否统计得到?此时,有必要修改DownLoad页面。
A:当时没有考虑这个问题呢,我试了一下,的确是在下拉菜单的发送到下载副本项是统计不到的,直接右键另存为刷新后是可以正确统计的。
我查了一下,因为请求的url是不一样的,下载副本定向的url是/Docs/_layouts /download.aspx?SourceUrl=%2FDocs%2F2%2FTest1%2Edocx&Source=http%3A%2F%2Fpengyuan%2FDocs%2F2%2FForms%2FAllItems%2Easpx&FldUrl=
这样一串,他是使用download.aspx页面来输出文件的,并不是文件的实际地址,而我设置的过滤器比较简单,只是判断请求url是否是 以.doc或docx结尾,这串url里不也包含了Test1%2E.docx(%2E代表“.”url编码)字样么。只要做相应的修改一下
List GetFileTypes()
bool FiltrateFile(string fileUrl)
这两个函数,让别判断为包含 “/Docs/_layouts/download.aspx” 又包含 “%2Edocx” ,这样就可以识别出来了。这个过滤器,应该按需来做吧。
其实你调试进去就可以发现是否捕获到这个url了
还有就是里面的处理问题,对于上面的请求url,下面这一句会报错,因为不是文件实际地址
Microsoft.SharePoint.SPFile file = web.GetFile(fileUrl);
捕获这个请求是肯定捕获到了,MOSS用的是download页面来输出文件,就是url的问题,也没有必要改donwload页面了,因为url里包含了.docx文件地址(=%2FDocs%2F2%2FTest1%2Edocx),你只要相办法从中取出来就OK了
具体代码我就不写出来了吧,应该不难的,我有时间再修改我的代码吧
相关文章推荐
- moss文档浏览次数统计之兄弟篇--哈哈,列表项的浏览次数统计
- moss文档浏览次数统计之兄弟篇--哈哈,列表项的浏览次数统计
- moss 文档浏览次数统计
- moss文档浏览次数统计(转)
- moss文档浏览次数统计
- moss文档访问浏览次数统计
- moss文档浏览次数统计 改进版
- moss文档浏览次数统计之兄弟篇--哈哈,列表项的浏览次数统计
- Java interview 统计一篇英文文档的单词数,并输出次数最多的10个
- 静态网页统计浏览次数
- 代码实现WordPress文章浏览次数统计功能
- js统计网站浏览次数
- MOSS中文档点击率统计的实现方法
- List列表实现统计文档中单词出现的次数
- 如何对MOSS中的文档库中的文档进行访问统计
- shell实现统计浏览次数并将结果保存到文件中
- ServletContext 服务器未关闭前,统计一个网页的浏览次数
- Linux下统计文档中每个字符出现的次数
- python统计一个文档中 各个字符出现的次数
- 网页浏览次数统计jsp代码及jsp总结