Event handler DisableEventFiring EnableEventFiring BeforeProperties AfterProperties
来源:互联网 发布:php身份证验证 编辑:程序博客网 时间:2024/06/10 02:43
编写一个event handler来仅在满足某种条件的时候才允许某个动作的执行, 是非常常见的. 比如说, 你可以写一个ItemDelete handler, 来在当前用户不是站点管理员时取消掉删除动作.
public class VendorItemEventReceiver : SPItemEventReceiver{ public override void ItemDeleting(SPItemEventProperties properties) { if (!properties.OpenWeb().CurrentUser.IsSiteAdmin) { properties.Status = SPEventReceiverStatus.CancelWithError; properties.ErrorMessage = "Vendor can only be deleted by site administrator"; properties.Cancel = true; } }}
为before event编写event handler, 在其中添加某些合法性判断的逻辑也是非常平常的. 比如说, 假设一个场景, 其中你想要添加到Vendor列表的item包含一个至少7个字符长的电话号码.
s 所以, 你必须提供一个ItemAdding的event handler还有一个ItemUpdating的event handler来执行validation的逻辑. 下面的例子展现了一个如何创建一个这样的event handler, 还有个叫做PhoneIsValid的helper方法, 这样你就能够在一个方法中来处理所有的validation的逻辑了.
public class VendorItemEventReceiver : SPItemEventReceiver{ // provide method with validation logic private bool PhoneIsValid(string Phone) { if ((Phone == null) || (Phone.Length < 7)) return false; else return true; } // provide error message const string PhoneInvalidErrorMessage = "VALIDATION ERROR: Phone must be at least 7 digits."; public override void ItemAdding(SPItemEventProperties properties) { // validate Phone column for new vendor item string Phone = properties.AfterProperties["WorkPhone"].ToString(); if (!PhoneIsValid(Phone)) { properties.Status = SPEventReceiverStatus.CancelWithError; properties.ErrorMessage = PhoneInvalidErrorMessage; properties.Cancel = true; } } public override void ItemUpdating(SPItemEventProperties properties) { // validate Phone column for update to vendor item string Phone = properties.AfterProperties["WorkPhone"].ToString(); if (!PhoneIsValid(Phone)) { properties.Status = SPEventReceiverStatus.CancelWithError; properties.ErrorMessage = PhoneInvalidErrorMessage; properties.Cancel = true; } }}
注意ItemAdding和ItemUpdating这两个event handler必须获得用户想要保存的WorkPhone列的值. 这些event handler方法通过使用SPItemEventProperties参数的AfterProperties属性来获得这个column的值. AfterProperties 允许你使用field的underlying name来访问正在被修改的item的column的值(不是DisplayName).
同样地, SPItemEventProperties 参数还暴露了一个叫做BeforeProperties 的属性, 这样你可以确定在column被修改之前的初始值.
before events典型地被用来做合法性验证, 而after events可以被用来保持数据完整性或者开启自定义的某些操作. 想象一个场景, 其中公司名必须都是大写字符. 在这个例子中, 我们会为after events写event handlers来在column的值被修改的任何时候重新格式化值.
public class CompanyItemEventReceiver : SPItemEventReceiver{ // custom logic to format a field value private string FormatCompanyName(string value) { return value.ToUpper(); } public override void ItemAdded(SPItemEventProperties properties) { DisableEventFiring(); string CompanyName = properties.ListItem["Company"].ToString(); properties.ListItem["Company"] = FormatCompanyName(CompanyName); properties.ListItem.Update(); EnableEventFiring(); } public override void ItemUpdated(SPItemEventProperties properties) { DisableEventFiring(); string CompanyName = properties.ListItem["Company"].ToString(); properties.ListItem["Company"] = FormatCompanyName(CompanyName); properties.ListItem.Update(); EnableEventFiring(); }}
你应该注意到上面的例子中对方法DisableEventFiring 和EnableEventFiring的调用. 通过在event handler中禁用event handling, 你能够更新列表中的columns而不会引发额外的事件fire. 这对于防止递归行为是很有必要的, 要不然的话event handler会不断地激发自己.
s
原稿:http://www.cnblogs.com/awpatp/archive/2010/02/07/1665347.html
- Event handler DisableEventFiring EnableEventFiring BeforeProperties AfterProperties
- Working with BeforeProperties and AfterProperties on SPItemEventReceiver
- 在SPItemEventReceiver中使用BeforeProperties和AfterProperties
- 在SPItemEventReceiver中使用BeforeProperties和AfterProperties
- 【飞秋】在SPItemEventReceiver中使用BeforeProperties和AfterProperties
- 转:在SPItemEventReceiver中使用BeforeProperties和AfterProperties
- [转]烦人的BeforePropertie----BeforeProperties,AfterProperties,properties.ListItem
- event generator,event dispatcher,event handler.
- Event Handler in Laszlo
- JavaScript -- event handler
- Java pogramming : Event Handler
- nagios event handler配置
- android event listener and event handler
- Removing event handler from inside the event handler
- JavaScript的onclick event handler
- [Yii]CComponent Event Handler Demo
- Event Handler Method Signature Pattern
- 1Order Event Handler guide
- Magento CMS controller override / cms page controller override in magento
- Cstring --string -- char*之间的相互转换
- 讨论google面试题 - 在从1到n的正数中1出现的次数
- virtual pc 和hyper-v区别
- oracle with as语句的DDL尴尬
- Event handler DisableEventFiring EnableEventFiring BeforeProperties AfterProperties
- 搭建Struts2开发环境
- EXPDP和IMPDP使用说明
- Drupal中的checkboxes的default_value
- How to overload a controller
- 理解AppDomain
- linux shell特定变量参数
- 如何取得当前目录
- Linux下weblogic10.3自动启动