SharePoint オブジェクト モデルを使用してイベント ハンドラーをバインドする

最終更新日: 2010年4月8日

適用対象: SharePoint Foundation 2010

SharePoint Foundation イベント ハンドラーをバインドするには、SharePoint Foundation オブジェクト モデルでイベント レシーバーの基本クラスを使用します。このコード サンプルの目的は、「イベント ハンドラーを作成する」で作成した ItemAdded イベントを SPSite インスタンスにバインドすることです。

注意

Microsoft Visual Studio 2010 に用意されているプロジェクトの種類を使用すると、SharePoint イベントを作成するときに、次の作業のほとんどが自動的に行われます。ここでは、イベントを作成およびバインドするメカニズムを示すために、次のコード例を紹介しています。

コード プロジェクトのバインドを作成する

Microsoft Visual Studio を開き、基本的なコンソール アプリケーション プロジェクトを作成して、BindItemEvents という名前を付けます、次に、Program という名前の 1 つのクラスを作成します。


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 オブジェクトへの参照を作成する必要があります。using ステートメントによってサイトおよび Web オブジェクトへの参照が確立されていることに注意してください。これは、コード ブロックの実行後、オブジェクトで Dispose() メソッドが自動的に呼び出されるからです。また、コード ブロックでサイトおよび Web オブジェクトのインスタンスを作成することもできます。ただし、この場合、作成したオブジェクトは、完了後に必ず破棄する必要があります。

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

ここで、参照を作成した先の Web にリスト、つまり "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 を使用してイベント ハンドラーをバインドする