EventHandler学习

EventHandler(事件处理器)学习

ListTemplateId(Elements.xml文件中用到)

100泛型列表

101  文档库 102 调查 103链接列表  104通知列表  105 联系人列表

106事件列表107任务列表  108讨论板 109图片库  110 数据源

111 网站模板库 112用户信息列表 113Web 部件库  114列表模板库

115XML 表单库 116母版页样式库 117无代码工作流 118自定义工作流程

119Wiki 网页库120自定义列表网格130数据连接库140工作流历史记录

150甘特图任务列表200会议序列列表201会议议程列表202会议与会者列表

204会议决策列表207会议目标列表210会议文本框211会议讨论事项列表

212会议工作区网页列表301博客文章列表302博客评论列表303博客类别列表

1100问题跟踪1200管理员任务列表

列表

列表项事件

列表项事件处理器是继承于Microsoft.SharePoint.SPItemEventReceiver的类,以下每一个方法都是一个事件

事件名称

事件描述

ItemAdded

列表项添加之后会调用此方法

ItemAdding

列表项添加之前会调用此方法

ItemAttachmentAdded 

附件添加之后调用此方法

ItemAttachmentAdding

附件添加之前调用此方法

ItemAttachmentDeleted

附件删除之后调用此方法

ItemAttachmentDeleting

附件删除之前调用此方法

ItemCheckedIn 

列表项签入之后调用此方法

ItemCheckingIn

列表项签入之前调用此方法

ItemCheckedOut

列表项签出之后调用此方法

ItemCheckingOut

列表项签入之前调用此方法

ItemUncheckedOut

列表项取消签出之后调用此方法

ItemUncheckingOut

列表项取消签出之前调用此方法

ItemDeleted

列表项删除之后调用此方法

ItemDeleting

列表项删除之前调用此方法

ItemUpdated

列表项修改之后调用此方法

ItemUpdating

列表项修改之前调用此方法

ItemFileMoved

列表项文件移动之后调用此方法,只对文档库有效

ItemFileMoving

列表项文件移动之前调用此方法,只对文档库有效

 

1.采用Feature附加处理器

此示例演示当在列表中添加一条记录的时候创建一个网站的简单事件处理程序。此任务包含两个过程:

  • Microsoft Visual Studio 中创建事件处理程序
  • 添加事件处理程序作为 Windows SharePoint Services 中的功能

1.1 Visual Studio 中创建事件处理程序

通过单击文件,指向新建,然后单击项目以在 Visual Studio 中创建新项目。

  1. 新建项目对话框中,选择项目类型框中的“Visual C#”,选择模板框中的类库,在名称框中键入“ItemAddEvent”,然后单击确定
  2. 在解决方案资源管理器中,选择“ItemAddEvent”,然后在项目菜单上单击添加引用
  3. 添加引用对话框中,在“.NET”选项卡上选择 Microsoft.SharePoint,然后单击确定
  4. 在代码编辑器中,导入 Microsoft.SharePoint 命名空间,如下所示。

using Microsoft.SharePoint;

  1. 将类的名称更改为CreateAction,并使其从 SPItemEventReceiver 类继承,如下所示。

public class CreateAction: SPItemEventReceiver

  1. 在类中添加下面的代码以重写 ItemAdded方法。(在列表项添加之后的事件)

public override void ItemAdded (SPItemEventProperties properties)

{

   //实例化网站

            using (SPSite site = new SPSite("http://zhangqing:2000"))

            {

                //拿到输入的网站的名称、url、描述

                //取当前站点

                SPWeb myweb = site.OpenWeb("/SJ");

                //取要取数据的列表

                SPListItem oItem = properties.ListItem;

 

                //列表的名称

                string name = oItem["名称"].ToString();

                string url = oItem["url"].ToString();

                string desc = oItem["描述"].ToString();

 

                using (SPWeb web = site.OpenWeb("/AllPrject"))

                {

                    //网站的url,显示名称,描述,中文编码,获取网站模板, 用户权限:  使用与父网站相同的权限    使用独有权限 ,否使用父网站的顶部链接栏

                    web.Webs.Add(url, name, desc, 2052, site.GetCustomWebTemplates(2052)[0], false, false);

                }

            }

}

  1. 在解决方案资源管理器中,右键单击“ItemAddEvent”节点,然后单击属性
  2. 属性对话框中,单击签名选项卡,选择为程序集签名,选择选择强名称密钥文件,然后单击“<新建…>”
  3. 创建强名称密钥对话框中,在密钥文件名称框中键入“DeletingEventHandler.snk”,(可选)指定密钥的密码,然后单击确定
  4. 若要生成项目,请单击生成菜单上的生成解决方案,或按 Ctrl+Shift+B
  5. Visual Studio Projects 文件夹中查找 / ItemAddEvent /bin/Debug 文件夹,并将 ItemAddEvent.dll 文件拖动到 C:/WINDOWS/assembly 以将 DLL 放置在全局程序集缓存中。

1.2将事件处理程序作为 Windows SharePoint Services 功能添加

  1. 本地驱动器:/Program Files/Common Files/Microsoft Shared/web server extensions/12/TEMPLATE/FEATURES 中创建一个名为“ItemAddEvent”的文件夹。
  2. 在此文件夹中创建一个 Feature.xml 文件 文件(如下所示),此文件标识功能及其元素指令清单文件并将功能范围设置为 Web site

<Feature Scope="Web"

   Title="Deleting Event Handler" //显示的用户功能名称

   Id="GUID" (自动生成的Guid

   xmlns="http://schemas.microsoft.com/sharepoint/">

   <ElementManifests>

      <ElementManifest Location="Elements.xml"/>//该代码随后指向存储有关功能本身所有详细信息的第二个 XML 文件的位置)

   </ElementManifests>

</Feature>

  1. 若要替换以前的 Id 属性中的 GUID 占位符,请通过运行位于本地驱动器:/Program Files/Microsoft Visual Studio 8 中的 guidgen.exe 来生成 GUID
  2. ItemAddEvent文件夹中创建一个 Elements.xml 文件,此文件标识作为事件处理程序实现的程序集、类和方法。根据 ListTemplateId 属性所指定,此示例将事件处理程序应用于网站的所有通知列表。有关其他默认 Windows SharePoint Services 列表模板类型的 ID,请参阅 ListTemplate 元素的 Type 属性说明。

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">

   <Receivers ListTemplateId="104">//列表类型

      <Receiver>

         <Name> ItemAddEvent</Name>

         <Type>ItemAdded</Type> //事件类型

         <SequenceNumber>10000</SequenceNumber> //事件执行顺序

         <Assembly> ItemAddEvent, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a26b5449ac4a4cf3</Assembly>  //事件处理程序要执行的程序集

         <Class> ItemAddEvent.CreateAction </Class> //事件处理程序要执行的类,及方法名

         <Data></Data>

         <Filter></Filter>

      </Receiver>

   </Receivers>

</Elements>

  1. 若要获取程序集的公钥标记,请在 Windows 资源管理器中查找位于本地驱动器:/WINDOWS/assembly 中的 ItemAddEvent.dll 文件,右键单击此文件,单击属性,然后在属性对话框的常规选项卡上,选择该标记并将其复制。
  2. 在命令提示符下,导航到本地驱动器上的 /Program Files/Common Files/Microsoft Shared/web server extensions/12/BIN,键入下面的每个命令以在部署中安装功能,并在指定子网站上激活功能,然后重置 Microsoft Internet Information Services (IIS),从而使所做更改生效:

stsadm -o installfeature -filename ItemAddEvent /Feature.xml//安装事件

stsadm -o activatefeature -filename ItemAddEvent /Feature.xml  url 指向站点  //激活事件

iisreset

  1. 尝试删除指定网站上的通知列表中的项目,以查看事件处理程序功能的效果。
  2. 卸载事件

停用事件:stsadm -o deactivatefeature -filename ItemAddEvent/Feature.xml -url  http://zhangqing:2000/SJ

卸载事件:stsadm -o uninstallfeature -filename ItemAddEvent/Feature.xml

1.3利用WSP打包解决方案

2.采用代码附加器

因为SPList有一个EventReceivers属性,所以可以通过这个属性操作列表的事件处理。

可以建立一个Winform的程序,当需要附加事件处理器的时候调用即可。

此示例演示当在列表中添加一条记录的时候创建一个网站的简单事件处理程序。

2.1编写事件处理器通用函数

1新建项目对话框中,选择项目类型框中的“Visual C#”,选择模板框中的类库,在名称框中键入“CodeEventClass”,然后单击确定

2.在解决方案资源管理器中,选择“CodeEventClass”,然后在项目菜单上单击添加引用

3.添加引用对话框中,在“.NET”选项卡上选择 Microsoft.SharePoint,然后单击确定

4.在代码编辑器中,导入 Microsoft.SharePoint 命名空间,如下所示。

using Microsoft.SharePoint;

5.将列的名称改为: EventReceiverManager类的方法如下:

/// <summary>

      /// 设置列表的事件处理器

      /// </summary>

      /// <param name="list">要附加事件处理器的列表</param>

      /// <param name="t">事件处理器的类型</param>

      /// <param name="eventData">关联的数据</param>

      /// <param name="eventTypes">事件类型</param>

      public static void SetEventReceivers(SPList list, Type t, string eventData, params SPEventReceiverType[] eventTypes)

      {

          //程序集名称

          string assambly = t.Assembly.FullName;

          //类名

          string className = t.FullName;

          //查看该列表上是否已经有该事件

          for (int i = list.EventReceivers.Count - 1; i >= 0; i--)

          {

              SPEventReceiverDefinition def=list.EventReceivers[i];

              if (def.Class == className)

              {

                  def.Delete();

              }      

          }

          //添加事件处理器

          foreach (SPEventReceiverType et in eventTypes)

          {

              SPEventReceiverDefinition ef = list.EventReceivers.Add();

              ef.Assembly = assambly;

              ef.Class = className;

              //事件处理类型

              ef.Type = et;

              ef.Data = eventData;

              ef.Update();

          }

      }

2.2编写事件理方法

1.右击项目“CodeEventClass,右键添加,,类名为:CreateItemReceiver

2.在类中添加下面的代码以重写 ItemAdded方法。(在列表项添加之后的事件)代码如下:

public override void ItemAdded(SPItemEventProperties properties)

        {

            using (SPSite site = new SPSite("http://zhangqing:2000"))

            {

                //拿到输入的网站的名称、url、描述

                //取当前站点

                SPWeb myweb = site.OpenWeb("/Test");

                //取要取数据的列表

                SPListItem oItem = properties.ListItem;

 

                //列表的名称

                string name = oItem["名称"].ToString();

                string url = oItem["url"].ToString();

                string desc = oItem["描述"].ToString();

 

                using (SPWeb web = site.OpenWeb("/AllPrject"))

                {

                    web.Webs.Add(url,name, desc, 2052, site.GetWebTemplates(2052)[1], false, false);

                }

            }

        }

3. 在解决方案资源管理器中,右键单击CodeEvent节点,然后单击属性

4.属性对话框中,单击签名选项卡,选择为程序集签名,选择选择强名称密钥文件,然后单击“<新建…>”

5.创建强名称密钥对话框中,在密钥文件名称框中键入CodeEvent.snk”,(可选)指定密钥的密码,然后单击确定

6.若要生成项目,请单击生成菜单上的生成解决方案,或按 Ctrl+Shift+B

7. Visual Studio Projects 文件夹中查找 / CodeEvent/bin/Debug 文件夹,并将 CodeEvent.dll 文件拖动到 Local_Drive:/WINDOWS/assembly 以将 DLL 放置在全局程序集缓存中。

2.3附加处理器

1新建项目对话框中,选择项目类型框中的“Visual C#”,选择模板框中的“Windows控制台应用程序,在名称框中键入“CodeEvent”,然后单击确定

2.在解决方案资源管理器中,选择“CodeEvent”,然后在项目菜单上单击添加引用

3.添加引用对话框中,在“.NET”选项卡上选择 Microsoft.SharePoint,然后单击确定

4.在代码编辑器中,导入 Microsoft.SharePoint 命名空间,如下所示。

using Microsoft.SharePoint;

1.       Form1上可以添加一个按钮来附加事件处理器。按钮的方法如下:

 

  using (SPSite site = new SPSite("http://zhangqing:2000"))

            {

                using (SPWeb web = site.OpenWeb("/Test"))

                {

                    SPList list=web.Lists["项目信息"];

                    //调用事件处理器通用方法

     EventReceiverManager.SetEventReceivers(list,typeof(CreateItemReceiver),"",SPEventReceiverType.ItemAdded);

                  

                }

         }

3.Feature附加器和代码附加器的优缺点

3.1Feature附加器

优点:使用比较灵活,可以设置功能的范围(通过Feature.xml中的Scope属性设置,可以是FORM,WebApplication,Site,Web,List,只需安装一次就可以设置到同类别的多个列表上。

缺点:设置比较麻烦。

3.2代码附加器

优点:操作比较简单

缺点:只能为某一个列表附加处理器

文档库

文档库事件

Ø  需要从IListEventSink继承,并且重载OnEvent(SPListEvent)方法。

例子:将EventHandler附加到文档库。当文档库添加一个文件的时候,向D盘添加一个文件,删除的时候,给相关人员上发送一个邮件。当然同样也可以跟数据库连接。

  class DocEventHandler:IListEventSink

    {

        public void OnEvent(SPListEvent oListEvent)

        {

            if (oListEvent.Type == SPListEventType.Insert)

            {

                //当插入时想做的操作            }

            else if(oListEvent.Type==SPListEventType.Delete)

            {

              //当删除时想做的操作            }

        }

部署

可以采用以上的Feature附加器和代码附加器。部署方法一样。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值