在SPItemEventReceiver中使用BeforeProperties和AfterProperties.docxVIP

在SPItemEventReceiver中使用BeforeProperties和AfterProperties.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在SPItemEventReceiver中使用BeforeProperties和AfterProperties

在SPItemEventReceiver中使用BeforeProperties和AfterProperties正如你所知道的,事件接收器(EventHandler)非常强大,可以挂在许多SharePoint事件上。它们可以应用于功能(Feature)事件,如FeatureActivated,列表事件,如FieldAdded,等等。然而,其中我们最常用的还是SPItemEventReceiver中的一系列接收器。通过继承该类,我们可以把自己的代码挂接在列表项或文档库文档上发生的一系列事件上。当你利用这些事件时,就很快会发现存在前(同步)后(异步)两种事件。其方法的后缀分别为“ing”(比如,ItemAdding)和“ed”(比如,ItemAdded),分别代表了变更发生前调用和发生后调用。这些都是最基本的东西。接下来,当你更深入时甚至发现,你可以提取变更前和变更后的状态变化。比如,我们可以挂接到一个文档库的ItemUpdating事件上,来阻止用修改某个特定的字段。其代码大致如下:?view sourceprint?1publicoverridevoid? 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等)中不可用吗?这里词语表述不是很清楚,因此我决定花点时间测试一下各种常见事件(像添加,修改和删除)与列表和库的组合。每个测试包括了添加一个新项,编辑该项,然后删除该项。下面是对列表的测试结果:列表BeforePropertiesAfterPropertiesproperties.ListItemItemAdding没值新值空ItemAdded没值新值新值ItemUpdating没值更改的值老值ItemUpdated没值更改的值更改的值ItemDeleting没值没值老值ItemDeleted没值没值空“没值”的意思是该栏的值在哈希表中不可用。“新值”的意思是该栏当前的值是可用的。“更改的值”的意思是该栏修改后的值是可用的。“老值”的意思是该栏在修改前的值是可用的。下面是对于文档库的测试结果:文档库BeforePropertiesAfterPropertiesproperties.ListItemItemAdding没值没值空ItemAdded没值没值新值ItemUpdating老值更改的值老值ItemUpdated老值更改的值更改的值ItemDeleting没值没值老值ItemDeleted没值没值空Properties.ListItem是指列表项在事件中当前的值。空表示该项不可用。通过我的分析得到如下结论:毫不奇怪,我们在ItemAdding(在项被添加前)和ItemDeleted(在项被删除后)得到的是空值。之前Lshai Sagi也证明过这一点。正如SDK中记载的,对于列表项事件不公开BeforeProperties。对于列表项而言ItemAdding 和ItemAdded正确返回了AfterProperties的值,而对于库文件则无效。这一点很有意思。通过之前的实验发现,在ItemDeleted中没有任何可用的值。这也很明显,一旦删除了就彻底消失了。因此,如果再回到我们原来的问题上,如何防止用户在列表项的事件中修改某一栏的值?对于列表而言,你可以看到,如果挂在ItemUpdating事件上,我们可以对当前列表项的值(properties.ListItem)和AfterProperties的值进行比较。代码如下:view sourceprint?1if(properties.ListItem[column] != properties.AfterProperties[column]) 2{ 3????properties.Cancel = true; 4????properties.ErrorMessage = 该栏不允许修改; 5}

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档