SharePoint Foundation のイベントについて

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

適用対象: SharePoint Foundation 2010

Microsoft SharePoint Foundation イベント モデルは、特定のトリガー イベントの発生時に SharePoint Foundation オブジェクトに応答する、イベント レシーバーと呼ばれるマネージ コンポーネントに依存します。イベント レシーバーを作成するには、SharePoint イベント レシーバー基本クラスの 1 つから継承します。イベント レシーバーを作成したら、イベント レシーバー クラスのメソッドをオーバーライドして、イベント ハンドラーを実装します。クラスはアセンブリにコンパイルされ、グローバル アセンブリ キャッシュ (GAC) に配置されます。その後、イベント ハンドラーをイベント ホストにバインドします。

イベント レシーバーは、SharePoint オブジェクトで特定のトリガー アクションが発生したときに SharePoint Foundation イベントに応答するマネージ コードの一部です。トリガー アクションには、追加、移動、チェックイン、チェックアウトなどのアクティビティが含まれます。イベントを受け取るオブジェクトはイベント ホストと呼ばれ、これにはサイト コレクション、サイト、リスト、ワークフロー、フィーチャーなどのオブジェクトがあります。

ほぼすべての SharePoint オブジェクトが、1 つ以上のイベント レシーバー クラスでトラップ可能なイベントを発生させることができます。SharePoint イベントを分類する場合は、まずイベントが発生したオブジェクト (つまりイベント ホスト) を考慮すると良いでしょう。たとえばサイト コレクション、リスト、リスト アイテムのどのオブジェクトでイベントが発生したかを考慮してから、そのイベントが同期イベントか非同期イベントかを考えます。トラップ可能なイベントを発生させる SharePoint Foundation オブジェクトの一覧については、「SharePoint Foundation イベントのカタログ」を参照してください。

SharePoint Foundation イベント モデル

SharePoint Foundation イベント モデルは、共通のコンポーネントと概念のセットを基盤として構築されています。以降のセクションでは、この概念とコンポーネントの概要を示します。

Before イベントと After イベント

イベントには、Before イベントと After イベントの 2 種類があります。Before イベントは、指定したアクションの発生時、SharePoint Foundation がコンテンツ データベースに書き戻す前に発生するので、同期イベントとも呼ばれます。これにより、指定したアクションの発生後、データがデータベースにコミットされる前に、SharePoint Foundation が処理を実行できます。データ検証は、同期 Before イベントの良い使用例です。Before イベントはデータがコミットされる前に発生するからです。また、Before (同期) イベントを使用すると、たとえばデータ検証が失敗した場合などに、ユーザー操作を取り消すことができます。

Before イベントによってトリガーされたイベント ハンドラー コード (つまり Before イベント ハンドラー) は、ユーザー操作を実行するコード (ユーザー操作によってトリガー) と同じプロセスで実行されます。このため、Before イベントは常に同期です。Before イベントのメンバー名の末尾には "-ing" が付きます (ItemAdding、ListAdding など)。このサフィックスにより、このイベントを識別できます。

一方、After イベントがトリガーするイベント ハンドラーが実行されるのは、ユーザー操作がコンテンツ データベースにコミットされ、そのユーザー操作が、コンテンツ データベースの変更後に実行されるコードを呼び出した後になります。これにより、特定のユーザー操作の完了後に発生するロジックの実行コードを開発できるようになります。

After イベントは、トリガー アクションとは異なるプロセスで実行されるので、同期または非同期のどちらかで実行できます。After イベントのメンバー名の末尾には "-ed" が付きます (ItemDeleted、WebProvisioned など)。このサフィックスより、このイベントを識別できます。

イベント ホスト

イベント ホストは、イベントを受け取るサイト コレクション、Web、リスト、リスト アイテムなどのオブジェクトです。つまり、これはイベント レシーバーが SharePoint Foundation イベントを "リッスン" しているオブジェクトです。この SharePoint Foundation 2010 のイベント ホスト オブジェクトの種類には、SPSiteSPWebSPListSPContentType などの共通のオブジェクトのインスタンスが含まれます。イベント ホストの種類それぞれに、継承元にできる特定のイベント レシーバー基本型があり、これによりイベント レシーバー コレクションが作成されます。

ホストの種類とそのイベント レシーバーの種類の一覧については、「SharePoint イベント、イベント レシーバー、およびイベント ホストの表」および「SharePoint Foundation イベントのカタログ」を参照してください。

イベント レシーバーとイベントの処理

SharePoint Foundation イベント ハンドラーはカスタム マネージ コードのコンパイルされたモジュールです。これは、指定したイベントによってトリガーされます。イベント ハンドラー コードは, .dll ファイルにコンパイルされ、GAC に展開されます。

SharePoint Foundation のイベント ハンドラーでは、SharePoint イベントの処理を細かいレベルで非常に柔軟に行うことができます。

Visual Studio を使用してイベント レシーバーを開発する方法については、「イベント ハンドラーを作成する」を参照してください。

イベント ハンドラーのバインド

イベント ハンドラー コードをコンパイルし、GAC に展開したら、そのコードをレシーバー オブジェクトにバインドする必要があります。"登録" とも呼ばれるこのバインド処理によって、イベント ハンドラー コードがオブジェクトの種類に関連付けられます。

イベント ハンドラーをバインドする方法は 2 つあります。1 つは、リスト タイプまたはコンテンツ タイプのどちらかによって SharePoint フィーチャー内で宣言型 XML を使用する方法です。詳細については、「SharePoint Features.xml を使用してイベント ハンドラーをバインドする」を参照してください。

もう 1 つは、SharePoint オブジェクト モデルでクラスを実装するコードを記述して、イベント ハンドラー バインドを実装する方法です。詳細については、「SharePoint オブジェクト モデルを使用してイベント ハンドラーをバインドする」を参照してください。

関連項目

タスク

[方法] イベント ハンドラ フィーチャーを作成する

概念

SharePoint Foundation イベント ハンドラーのバインド

イベント ハンドラーを作成する

SharePoint Foundation 2010 のイベント モデルの改良