关于这方面的需求很多。最近的我负责的项目里用户也提出了类似的需求。wanghao-3(http://www.cnblogs.com/wanghao-3)小朋友在一期里通过自定义字段实现了一个统计文档点击次数的功能,是一个不错的创意。
如果采用sharepoint自带的审计功能,这个非常繁琐,信息冗余量大,也不是一个适合的方式。
完美的solution在哪里呢?考虑一个解决方案,自然要从完整性,可部署性, 非侵入式等多方面考虑。参照一般的权限管理,aop的设计模式,用httphandler来做拦截器是个不错的选择。
sharepoint自定义httphandler MSDN上有一篇论述, http://msdn.microsoft.com/en-us/library/bb457204.aspx,不过这种介绍只适合用来开发自定义的ajax框架或者提供诸如list,docLib的对象的json等应用场景。
Sharepoint作为一个典型的asp.net应用, 使用典型的httphandler部署方式既可。下面简单介绍一下相关步骤:
1、开发一个httphandler组件,签名。将组件拖入到GAC目录中。
组件中只有一行代码:
context.Response.Write("倒霉孩子,不允许通过此方式下载文件!");
2、 对sharepoint站点webconfig进行配置,添加拦截器。
<add verb="*" path="*.docx" type="WebApplication1.Handler1, WebApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=01c53c387f599d4b" />
ok,当用户在视图中通过右键另存为直接下载docx的文件时,这个倒霉孩子只能下载到一个html页面,打开一看,就是上面你输出的内容。 当然,你也可以考虑不做限制,只将当前的信息记录到后台数据库。
但如果通过客户端来交互,这个目前就得去看看交互的webdav了。
题记:在部署的时候,一直找不到dll,后来发现,因为我直接将gac 映射成一个盘,然后将dll copy进gac的,后改为拖入的方式就好了,这里有篇文章论述其原因
http://hi.baidu.com/seapub/blog/item/07e61c4fd8bd623fafc3abbe.html