例: リスト アイテム イベント ハンドラーを作成する
最終更新日: 2010年4月9日
適用対象: SharePoint Foundation 2010
次の例は、イベント ハンドラーの基本的な作成手順を示しています。この例では、リスト アイテムが削除される前またはアイテムが追加された後にイベント ハンドラーがコードを実行します。この例では、お知らせリストで新しいアイテムの本文にテキストを追加し、既存のアイテムを削除する操作を取り消します。
Microsoft Visual Studio でクラス ライブラリを作成することによってイベント ハンドラー アセンブリを作成します。次の例のように、Microsoft.SharePoint.dll への参照を追加し、Microsoft.SharePoint.SPItemEventReceiver 基本クラスから継承します。
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
namespace MyEventHandlers
{
public class SimpleEventHandler : SPItemEventReceiver
{
}
}
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports Microsoft.SharePoint
Namespace MyEventHandlers
Public Class SimpleEventHandler
Inherits SPItemEventReceiver
End Class
End Namespace
リスト内でアクションが発生したときにクラスのオブジェクトがインスタンス化されます。開発者は、処理するイベント用に基本クラスのメソッドをオーバーライドします。オーバーライドできる SPItemEventReceiver 基本クラスのメソッドは次のとおりです。
この例では、ItemDeleting と ItemAdded という 2 つのメソッドをオーバーライドしています。"-ing" という接尾辞は、アクションが発生する前にイベントが処理されることを示し、"-ed" という接尾辞は、アクションが発生した後でイベントが処理されることを示します。
public override void ItemDeleting(SPItemEventProperties properties)
{
properties.Cancel = true;
properties.ErrorMessage = "Deleting is not supported.";
}
Public Overrides Sub ItemDeleting(ByVal properties As SPItemEventProperties)
properties.Cancel = True
properties.ErrorMessage = "Deleting is not supported."
End Sub
リスト アイテムに関連付けられているデータは、ListItem プロパティに含まれています。これらのプロパティ値へのアクセスには、AfterProperties プロパティ バッグを使用します。
オーバーライドする必要がある 2 つ目のメソッドは、ItemAdded です。次の例では、ListItem プロパティを使用して、新しいリスト アイテムを表すオブジェクトを返し、そのアイテムの本文を変更します。
public override void ItemAdded(SPItemEventProperties properties)
{
SPListItem oItem = properties.ListItem;
oItem["Body"] = "Body text maintained by the system.";
oItem.Update();
}
Public Overrides Sub ItemAdded(ByVal properties As SPItemEventProperties)
Dim oItem As SPListItem = properties.ListItem
oItem("Body") = "Body text maintained by the system."
oItem.Update()
End Sub
「SharePoint Foundation イベント ハンドラーのバインド」の説明に従って、ItemDeleting イベント レシーバーと ItemAdded イベント レシーバーの両方を登録する必要があります。