使用 SharePoint 对象模型绑定事件处理程序

上次修改时间: 2010年4月8日

适用范围: SharePoint Foundation 2010

您可以通过使用 SharePoint Foundation 对象模型中的事件接收器基类来绑定 SharePoint Foundation 事件处理程序。我们在此代码示例中的目标是将在创建事件处理程序中创建的 ItemAdded 事件绑定到 SPSite 实例。

备注

Microsoft Visual Studio 2010 提供了可在创建 SharePoint 事件时自动执行以下很多工作的项目类型。但是,下面提供的代码示例是为了阐释用于创建和绑定事件的机制。

创建绑定代码项目

打开 Microsoft Visual Studio,创建一个基本的控制台应用程序项目,并将其命名为 BindItemEvents。然后创建一个名为 Program 的类。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.SharePoint;

namespace BindItemEvents
{
    class Program
    {
        static void Main(string[] args)

接下来,您必须创建对您的网站和 Web 对象的引用。请注意,对网站和 Web 对象的引用可通过 using 语句来实现。这样做的原因是,在执行代码块之后,它可以自动对这些对象调用 Dispose() 方法。或者,您也可以在代码块中创建网站和 Web 对象的实例;不过,如果您这样做,则必须确保在使用完这些对象之后释放它们。

        {
            using (SPSite site = new SPSite("https://localhost")) 
            {
                using (SPWeb web = site.OpenWeb())

现在,我们在已创建对其引用的网站上创建一个列表(即,一个名为"Shared Documents"的文档库),然后您将绑定事件接收器定义。

{
                    SPList list = web.Lists["Shared Documents"];

                    SPEventReceiverDefinition def = list.EventReceivers.Add();

但是请注意,只添加事件接收器 EventReceivers 是不够的。绑定操作还要求提供属性值以便定义接收器:

    def.Assembly = "ERDefinition, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=704f58d28567dc00";
    def.Class = "ERDefinition.ItemEvents";
    def.Name = "ItemAdded Event";
    def.Type = SPEventReceiverType.ItemAdded;
    def.SequenceNumber = 1000;
    def.Synchronization = SPEventReceiverSynchronization.Synchronous;
    def.Update();

上面的代码示例指明了最常用的属性值。若要查看可用属性的完整列表(以及查看有关所有属性的文档),请参阅 SPEventReceiverDefinition。但是,在所有情况下都需要的一个最重要的属性是 Type 属性。在本例中,此属性为 ItemAdded。您还必须通过使用 Assembly 属性和相应的类(在本例中为 ERDefinition.ItemEvents。如创建事件处理程序中所述,您应已经创建这个类。)指定程序集。

请注意,应使用强名称提供程序集名称。(您可以通过在全局程序集缓存 (GAC) 中定位程序集并公开程序集的属性来获取程序集强名称。)另请注意,程序集强名称区分大小写。使用 SequenceNumber 属性可指定在出现一个操作引发多个事件的情况下事件的引发顺序。您可以使用 Synchronization 属性指定事件是同步还是异步的。最后,您必须运行 Update() 方法。

代码清单

下面是上述活动的完整代码清单。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.SharePoint;

namespace BindItemEvents
{
    class Program
    {
        static void Main(string[] args)
        {
            using (SPSite site = new SPSite("https://localhost")) 
            {
                using (SPWeb web = site.OpenWeb())
                {
                    SPList list = web.Lists["Shared Documents"];

                    SPEventReceiverDefinition def = list.EventReceivers.Add();

                    def.Assembly = "ERDefinition, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=704f58d28567dc00";
                    def.Class = "ERDefinition.ItemEvents";
                    def.Name = "ItemAdded Event";
                    def.Type = SPEventReceiverType.ItemAdded;
                    def.SequenceNumber = 1000;
                    def.Synchronization = SPEventReceiverSynchronization.Synchronous;
                    def.Update();
                }
            }
        }
    }
}

请参阅

任务

如何:创建事件处理程序功能

概念

绑定 SharePoint Foundation 事件处理程序

使用 SharePoint Features.xml 绑定事件处理程序