リスト項目イベントのイベントレシーバーのサンプル作成
それでは早速、Visual Studio 2010を使用してSharePoint 2010のイベントレシーバーを作成してみましょう。
サンプルの概要
サンプルとして、リスト項目イベントを扱うイベントレシーバーを作成してみます。
既存の「お知らせ」リストに対して、いくつかのイベント処理を追加します。まず、新しいアイテムの追加前イベントを受け取り、同名のタイトルが既に存在している場合はエラーメッセージを表示しアイテムを追加できないようにします(図1)。さらに、リストの上限アイテム数(ここでは3個と定義)を超えた場合にもエラーメッセージを表示するようにします。
次に、新しいアイテムの追加後イベントを受け取り、追加されたアイテムの有効期限が未設定だった場合には、有効期限を今日の日付から1か月後に自動設定します。
最後に、アイテムの削除前イベントを受け取り、「お知らせ」リストからアイテムを削除できないようにします。
まとめると今回のサンプルでは、リスト項目イベントの次のイベントを扱います(表3)。
| イベント | 発生時に実行する処理 |
| ItemAdding | 同名タイトルの存在チェック、アイテム数の上限チェック |
| ItemAdded | 有効期限の自動設定 |
| ItemDeleting | アイテムの削除禁止 |
サンプルの作成
以下の手順で、サンプルを作成します。
[1]新しいプロジェクトを作成する
SharePoint 2010のイベントレシーバー用の新しいプロジェクトを作成します。
管理者権限でVisual Studio 2010を起動します。[新しいプロジェクト]ダイアログボックスで、[インストールされたテンプレート]から[Visual C#]-[SharePoint]-[2010]を選択し、プロジェクトテンプレートの一覧から[イベントレシーバー]を選択します。[名前]には「EventReceiverProjectSample」と入力し、[OK]ボタンをクリックします(図2)。
[デバッグのサイトとセキュリティレベルの指定]ダイアログボックスが表示されます。[デバッグに使用するローカルサイト]には、使用するSharePointサイトのURLを入力します。信頼レベルは今回もファームソリューションを選択し、[次へ]ボタンをクリックします(図3)。
[イベントレシーバー設定の選択]ダイアログボックスが表示されます。[使用するイベントレシーバーの種類]から[リスト項目イベント]を選択し、[イベントソースとなる項目]から[お知らせ]を選択します。次に、[次のイベントを処理]の一覧から[項目が追加されています]、[項目が削除されています]、[項目が追加されました]の3つをチェックします。最後に、[完了]ボタンをクリックします(図4)。
これで、イベントレシーバーのプロジェクトが作成されました。ソリューションエクスプローラーでプロジェクト作成直後の状態を確認すると、次のようになっています(図5)。
さらに、生成されたイベントレシーバー(EventReceiver1.cs)を開いてみると、リスト1のようになっています。
using System;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Security;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.Workflow;
namespace EventReceiverProjectSample.EventReceiver1
{
/// <summary>
/// リスト項目イベント
/// </summary>
public class EventReceiver1 : SPItemEventReceiver
{
/// <summary>
/// 項目が追加されています.
/// </summary>
public override void ItemAdding(SPItemEventProperties properties)
{
base.ItemAdding(properties);
}
/// <summary>
/// 項目が削除されています.
/// </summary>
public override void ItemDeleting(SPItemEventProperties properties)
{
base.ItemDeleting(properties);
}
/// <summary>
/// 項目が追加されました.
/// </summary>
public override void ItemAdded(SPItemEventProperties properties)
{
base.ItemAdded(properties);
}
}
}
リスト項目イベントを扱うイベントレシーバーであるSPItemEventReceiverクラスを派生させたEventReceiver1クラスが生成されています。そして、先ほど[イベントレシーバー設定の選択]ダイアログボックスでチェックしたリスト項目イベントの3つのイベントに対するハンドラーも生成されていることが分かります。以降の手順で、これらのメソッド内に処理を記述していきます。


![図2 [新しいプロジェクト]ダイアログボックス](http://cz-cdn.shoeisha.jp/static/images/article/5984/5984_02_s.gif)
![図3 [デバッグのサイトとセキュリティレベルの指定]ダイアログボックス](http://cz-cdn.shoeisha.jp/static/images/article/5984/5984_03_s.gif)
![図4 [イベントレシーバー設定の選択]ダイアログボックス](http://cz-cdn.shoeisha.jp/static/images/article/5984/5984_04_s.gif)