今天到客户处部署MOSS 2007项目,并现场编码。
编码部分主要是EventReceiver,要添加Added, Updating, Updated, Deleting四个事件的代码,并更新另一个列表。
首先就是BeforeProperties,AfterProperties 和ListItem三个属性各自代表的意思。不幸的是,MS在MOSS中定义非常混乱;而我在现场coding时又不能上网……
以下是对照表:
List--列表 | BeforeProperties | AfterProperties | properties.ListItem |
ItemAdding | No value | New value | Null |
ItemAdded | No value | New value | New value |
ItemUpdating | No value | Changed value | Original value |
ItemUpdated | No value | Changed value | Changed value |
ItemDeleting | No value | No value | Original value |
ItemDeleted | No value | No value | Null |
Library--文档库 | BeforeProperties | AfterProperties | properties.ListItem |
ItemAdding | No value | No value | Null |
ItemAdded | No value | No value | New value |
ItemUpdating | Original value | Changed value | Original value |
ItemUpdated | Original value | Changed value | Changed value |
ItemDeleting | No value | No value | Original value |
ItemDeleted | No value | No value | Null |
在没有任何资料的情况下居然蒙对了(我直接使用ing和ed两种方法的ListItem,得到了Original和Changed对于List和Library的统一),运气也未免太好了一点!
主要的感悟就是在MOSS编码时一定要充分考虑到权限问题:默认使用的是当前用户的权限,很多时候,当前用户没有代码给出的权限时,必须要提升权限,就要使用到RunWithElevatedPrivileges,诸如SPSecurity.RunWithElevatedPrivileges(delegate{})的形式,并设置SPWeb.AllowUnsafeUpdates为True。
在EventReceiver开发时,使用OSSEventManager可以快速部署,并且使用VS的调试--附加进程功能可以方便的进行EventReceiver调试。
还有一个感触:Reflector真的是好东西,经常看看MS写的源码,对自己提升确实非常大。