Event Receivers 学习小结
- 什么是Event Receiver
SharePoint的Event Receiver是用于当SharePoint中某个对象发生变化时,触发相应的事件实现方法,响应用户在事件触发时要执行的自定义代码。可触发的事件有添加删除SPListItem,文件迁入迁出,创建或删除列表,站点等。
- Event Receivers 相关类
SPEventReceiverBase 基类
SPItemEventReceiver 捕获Item触发的事件,如添加、删除、修改等。对于document所触发的事件,Before和After属性都有效,对于SPListItem所触发的对象,仅After属性有效。
SPListEventReceiver 捕获List所触发的事件,如Field发生更改,添加、删除List等。
SPWebEventReceiver 捕获web所触发的事件,如创建站点集、创建、删除、移动站点等。
注意:
这些类都不能被实例化,如果需要在事件触发是实现自定义的功能,只需要继承以上相应的class,然后override对应的方法。
EventFiringEnabled,获取或设置是否引发事件,默认为true。如在ItemAdding中有SPListItem.Update() 的操作,同时在Event Receiver中重写了ItemUpdated方法,如果不想在执行SPListItem.Update()时触发相关的自定义代码,就可先将EventFiringEnabled=false,然后再执行update();
- 添加Event Receiver
方法一:使用Event Receiver模板注册事件。
step1.在Project中点击鼠标右键——再打开的菜单中选择Add——New Item…
step2.在弹出的Add New Item对话框中,现在左边的导航中选择SharePoint,然后在中间的列表中选择Event Receiver。
step3.在下面的弹出框中进行相关的设置。
step4.点击Finish,然后在生成的.cs文件中加入时间触发时要执行的自定义代码。
step5:将Event Receiver添加到相应的feature中,这样Feature在启动的时候就会自动根据其Scope将此Receiver注册到web或者site上。
注意:这种注册事件的方式有一定的局限性,它可以将时间注册到特定的ListTemplate中,对于用户override的事件触发方法是,站点集中所有的此ListTemplate对应的列表都有可能触发事件。
方法二,使用代码手动注册事件的处理类。
step1.创建一个class,继承SPItemEventReceiver,重写ItemAdded方法,即当添加一个Item到List中,就会触发此方法。
public class ECTest:SPItemEventReceiver { public override void ItemAdded(SPItemEventProperties properties) { base.ItemAdded(properties); /**cutom code**/ } }
step2.写代码注册此事件
SPList splist = web.GetList("/Lists/Calendar"); SPEventReceiverDefinition receiver = splist.EventReceivers.Add(); receiver.Type = SPEventReceiverType.ItemAdded; receiver.Assembly = this.GetType().Assembly.FullName; receiver.Class = "MyHelper.ECTest"; receiver.Update();
这样事件就能注册到特定的某个列表上。
删除Event Receiver
int index = 0; while (index < splist.EventReceivers.Count) { SPEventReceiverDefinition erDef = splist.EventReceivers[index]; if (erDef.Class.Equals(className)) { erDef.Delete(); } else index++; }
注意:如果是使用模板方式创建的Event Receiver,会根据启动Feature的Scope注册到Web或者Site中,这样在删除的时候就要使用SPWeb.EventReceiver或者SPSite.EventReceivers来找到它然后删除。
Event Receiver相关Blog
http://hristopavlov.wordpress.com/2009/02/24/understanding-sharepoint-event-receivers/