上一回中,小菜学会CQWP的使用. 但是小菜深感对SharePoint整个系统体系的不熟悉而带来的事倍功半.
大师: 小菜, 又有新任务了. 你使用Event Handler 对用户上传文件和修改文件做下权限判断.
小菜: ……
使用Event Handler 判断用户是否有权限上传和修改文件. 特定用户指定修改自己上传的文件.
小菜昨天刚被上一回的CQWP折腾的死去活来, 又来个新的任务, 小菜有点感觉力不从心, 但是小菜有个自认为很伟大的方法, 就是默念”我行,我可以!”. 于是小菜又屁颠屁颠的开工了. 小菜由于不熟悉SharePoint, 分不清楚Field和Item的区别, 也因此分不清楚该用SPListEventReceiver还是SPItemEventReceiver, 但是SPItemEventReceiver能重载的事件显然比较多, 于是小菜决定用SPItemEventReceiver试试.
小菜遇到了不少问题,比如说SPContext.Current ,Session等不能用, 使得小菜不得不修改原来的数据访问层. 由于小菜完全没用过SPSite SPWeb 等对象的属性和方法让小菜稍微费心google了几把, 最终小菜用他熟悉的.NET技术完成了权限判断的逻辑.
如何部署Event Handler的问题又摆在了小菜的面前, 小菜深入的花费半个下午学习了网上大量的部署方法, 都觉得不好用, 最终只得求助于大师.
小菜: 大师,你还是直接告诉我我们公司怎么部署和注册这个Event Handler吧……
大师: 你把生成的dll复制到GAC, 然后用这个工具注册下就好了.
小菜: 大师不愧是大师啊……
15分钟以后……
小菜: 大师, 我按照你的做了, 为什么事件没有触发呢?
大师: 部署到GAC后要重启IIS或者应用程序池的……
小菜: 我好像昨天听说过这么回事的样子……
事件成功触发, 可惜最终Error Page了. 小菜试图按照网上的提示Attach 到远程测试服务器上调试代码, 可惜总是无法调试进到事件触发的断点. 不过小菜丰富的.NET开发调试经验发挥了作用, 小菜把所有权限判断的代码移到了BO中, 最外层不写任何逻辑处理,把整个SPItemEventProperties对象传递给BO层.
小菜: 这样的优点
1 不需要反复拷贝文件到服务器GAC对应的目录的过程.
2 免去了部署到GAC需要重启IIS或者应用程序池的过程.
3 可以用到昨天小菜自己写的.bat文件, 将底层的dll和pdb直接部署到bin目录.
4 附加到远程服务器进程的时候顺利的加载了pdb, 小菜再也不用担心Event Handler的调试.
小菜学会了Event Handler的deploy和debug.
小菜: 这玩意儿让我想起了以前页面上CURD时候的感觉.
大师: 还有呢?
小菜: 其实页面最终的表现形式不就是HTML语言么, 我对SharePoint越来越有信心了.
大师: 还有呢?
小菜: 那些所谓的管理员菜单啊,功能什么的, 最终表现在页面上的就是Dom对象, 我完全可以用个什么js把那些什么上传啊, 新建之类的按钮直接给hide了. 我觉得这个想法可行.
大师: 还有呢?
小菜: 我觉得SharePoint的这些Web Part 给出这么多可以让客户自己配置的属性, 实质上也就是不同形式的CURD而已. 搞这个SharePoint就像是戴着镣铐跳舞, 只要掌握了我可以活动的范围, 照样可以跳出不错的舞蹈.
大师: 还有呢?
小菜: ……
大师: 还有呢?