小蜗牛的足迹

        I'm a slow walker, but I never walk backwards.

Event Receivers 学习小结

  • 什么是Event Receiver

SharePoint的Event Receiver是用于当SharePoint中某个对象发生变化时,触发相应的事件实现方法,响应用户在事件触发时要执行的自定义代码。可触发的事件有添加删除SPListItem,文件迁入迁出,创建或删除列表,站点等。

  • Event Receivers 相关类

image

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.在下面的弹出框中进行相关的设置。

 image

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/

http://www.sharepointalex.co.uk/index.php/2010/06/beforepropertiesafterproperties-in-event-receivers-i-always-forget-this/

posted on 2012-05-08 16:21  o_小蜗牛_o  阅读(850)  评论(0编辑  收藏  举报

导航