在SPItemEventReceiver中使用BeforeProperties和AfterProperties

正如你所知道的,事件接收器(EventHandler)非常强大,可以挂在许多SharePoint事件上。它们可以应用于功能 (Feature)事件,如FeatureActivated,列表事件,如FIEldAdded,等等。然而,其中我们最常用的还是 SPItemEventReceiver中的一系列接收器。通过继承该类,我们可以把自己的代码挂接在列表项或文档库文档上发生的一系列事件上。

当你利用这些事件时,就很快会发现存在前(同步)后(异步)两种事件。其方法的后缀分别为“ing”(比如,ItemAdding)和“ed”(比如,ItemAdded),分别代表了变更发生前调用和发生后调用。这些都是最基本的东西。

接下来,当你更深入时甚至发现,你可以提取变更前和变更后的状态变化。比如,我们可以挂接到一个文档库的ItemUpdating事件上,来阻止用修改某个特定的字段。其代码大致如下:

1 public override void  ItemUpdating(SPItemEventProperties properties)
2 {
3      if (properties.BeforeProperties["column"] != properties.AfterProperties["column"])
4     {
5         properties.Cancel = true;
6         properties.ErrorMessage = "该栏不允许修改";
7     }
8 }

对于文档库而言,该代码运行良好。然而,你应该知道,BeforeProperties哈希表对于列表项来说并不公开。用SDK中的原话说:“对于文档,Before 和 After 属性可为发布事件(例如 ItemUpdated)提供保证,但 Before 属性不能用于有关列表项的发布事件。”。

当他们说“不能用于有关列表项的发布事件”时,意思是说在后事件(比如 ItemUpdated,ItemDeleted等)中不可用吗?这里词语表述不是很清楚,因此我决定花点时间测试一下各种常见事件(像添加,修改和删除)与列表和库的组合。每个测试包括了添加一个新项,编辑该项,然后删除该项。下面是对列表的测试结果:

列表 BeforeProperties AfterProperties properties.ListItem
ItemAdding 没值 新值
ItemAdded 没值 新值 新值
ItemUpdating 没值 更改的值 老值
ItemUpdated 没值 更改的值 更改的值
ItemDeleting 没值 没值 老值
ItemDeleted 没值 没值
时间: 2024-10-30 15:38:00

在SPItemEventReceiver中使用BeforeProperties和AfterProperties的相关文章

在VS中创建简单的Event Receiver

事件接收器是添加触发器到SharePoint解决方案的有效方法. 1. 在站点创建TestList列表. 2. 管理员身份打开VS,创建Event Receiver事件接收器. 3. 命名SimpleEventReceiver,部署为场解决方案,点击下一步. 4. 选择列表项事件,Announcements通知列表,正在添加项. 本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/net/ 5. 点击完成. 6.

SharePoint开发积累:在Eventhandler中使用State模式

曾经的项目中有个小需求,在一个list中创建一个Choice类型的字段,名为 Status,分别有"Not Started","In Progress","On Schedule","ahead of Schedule","Delayed","Done"等等用来表示进度的字段,要求当这个item的 Status值从"Not Started"变为"In Pro

Spring中管理Bean依赖注入之后和Bean销毁之前的行为

    对于Singleton作用域的Bean,Spring容器将会跟踪它们的生命周期,容器知道何时实例化结束.何时销毁.Spring可以管理Bean在实例化结束之后和Bean销毁之前的行为. Bean依赖关系注入之后的行为:     Spring提供了两种方式在Bean全部属性设置成功后执行特定的行为: 在Spring配置文件中使用init-method属性:这个属性指定某个方法在Bean全部依赖关系设置结束后自动执行.这个方法写在Bean里面.使用这种方法不需要将代码与Spring耦合在一起

电脑中通过修改注册表解决网页无法添加到收藏夹的方法

  电脑中通过修改注册表解决网页无法添加到收藏夹的方法.最近有不少用户反映在电脑中出现了无法添加网页到收藏夹的问题,尝试了各种方法都无法解决这个问题.对此,在接下来的内容中,小编为大家提供了一种通过修改注册表解决网页无法添加到收藏夹的方法,大家可以参考一下. 1.按Win+R打开运行,输入regedit并按回车键; 2.在注册表编辑器依次展开HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer/UserShell

IE8中显示“收藏夹栏”为灰色无法点击开启

  浏览器的收藏夹是我们平时用到的最多功能之一,为了更方便的打开收藏夹中的网页,在IE8浏览器下,我们可以在工具栏的空白处单击右键,然后选择"收藏夹栏"即可在工具栏上显示收藏网页.但是在IE8中可能会遇到"收藏夹栏"无法点击勾选的情况,故障如下: 解决方案: 若此问题出现在Win7系统中可通过修改组策略来解决问题. 提示:更改注册表设置有一定危险,可能会造成系统瘫痪,建议在进行操作之前,先对注册表进行备份 按下 Windows + R 键打开"运行&quo

固定表头-在ASP.NET页面中,固定DATAGRID表头出现的问题

问题描述 在ASP.NET页面中,固定DATAGRID表头出现的问题 使用DIV标签加js纯页面固定表头,实际上就是将表头获取出来填充到一个DIV中,问题就是如何将表头和表中的内容对齐,特别是在表中数据动态改变列宽不固定的时候

html-c# 提取微信文章中的图片是WEBP格式,如何转成JPG格式以便能够正常显示?

问题描述 c# 提取微信文章中的图片是WEBP格式,如何转成JPG格式以便能够正常显示? 根据微信文章地址,提取到了微信文章的HTML源文件,但图片是WEBP格式,并防盗链. 请问,如何通过C#方法,把WEBP转成JPG格式用于保存在本地以便可以正常浏览? 提取到的微信图片的地址如下: http://mmbiz.qpic.cn/mmbiz/Ek7ZheM28KXya0WfIFv58aNZEBb3YSWX9iaMJHLhuz7o5xNia68MItJfDya947ibSX1HVNpy9V3iaJr

在jsp中怎么给文字加背景图片啊

问题描述 在jsp中怎么给文字加背景图片啊 动态生成的菜单 代码如下 function startParentNode(text){ //alert(text); if(""站址管理"" == text){ document.write('<table border=""0"" cellpadding=""1"" cellspacing=""0"&qu

Spring.Net在Mvc4.0中应用的说明

案例Demo:http://yunpan.cn/cJ5aZrm7Uybi3 访问密码 414b Spring.Net在Mvc4.0中应用的说明 1.引用dll       2.修改Global文件 (SpringMvcApplication)       3.控制器添加属性     4.WebConfig配置   <!--必须紧跟着configuration之后-->   <configSections>     <sectionGroup name="spring