zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    Day2 while 循环,格式化输出,运算符,字符串编码
    Day 1 变量,基础数据类型与条件语句
    关于字符的一些看法
    正则的全局问题
    模块——js功能(倒计时,幻灯)
    垂直居中
    不确定宽度元素居中
    css3媒体查询
    less的预处理
    手机幻灯
  • 原文地址:https://www.cnblogs.com/snailJuan/p/2490285.html
Copyright © 2011-2022 走看看