ポスト アクションとバイパス ロックでアクションを期限切れにする

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

適用対象: SharePoint Server 2010

レコードを適切に使用するためには、カスタム ポリシー アクションを適切に使用する必要があります。カスタム ポリシー アクションが不適切に登録や使用されても、オブジェクト モデルはほとんど警告やエラーを表示しないため、カスタム ポリシー アクションを使用するためには、オブジェクト モデルがどのように機能するか十分に理解することが必要です。

このトピックには、ポスト アクションとバイパス ロックでアクションを期限切れにするために、オブジェクト モデルを使用する際に役立つヒントとコード例が含まれます。保持ポリシーはあらゆる場合にレコードに対して動作することが期待されているため、たとえユーザーが作成している固有のアクションがレコードを処理する意図がない場合でも、保持ポリシーがレコードを管理できるように、カスタム アクションを作成することを推奨します。このトピックでは、レコードを使用するためにコードに OnExpirationWithPostActions(SPListItem, XmlNode, Time) メソッドを実装するカスタム ポリシー アクションをラップする方法と、ロックされたレコードをコードで処理したくない場合に、レコードのロックをバイパスする方法を説明します。

  1. 新しい IExpirationActionWithPostActions インターフェイスを使用して OnExpirationWithPostActions(SPListItem, XmlNode, Time) メソッドを実装する場合、それがレコードであるときは、SPItem オブジェクトを更新するために適切な ExpirationPostActions アクションを返してください。

  2. IExpirationAction インターフェイスを使用するか、あるいは Expiration クラスのみを実装する場合、Microsoft SharePoint Server 2010 のレコード管理ソリューションは、デフォルトで適切にカスタム ポリシー アクションを管理できます。

ExpirationPostActions の例は、アイテムが期限切れになったときに実行されるポスト アクションを宣言する方法を示します。コードはアイテムの有効期限を再計算して、アイテムを更新し、ユーザー定義カスタム アクションが実行された後で、そのアクションについての監査イベントをログに記録します。

またこのコードは、インプレース レコード管理機能がアイテムをロックしたかの確認もします。このコードは、システム アカウントにチェックアウトされたレコードを破棄するためにポスト アクションを使用し、アイテムを更新して、次に再びシステム アカウントにアイテムをチェックアウトします。

public ExpirationPostActions OnExpirationWithPostActions(SPListItem item, XmlNode parametersData, DateTime expiredDate)
{
    /* Recalculates the item's expiration date, updates 
     * the item, and logs an audit event for the action. */
    ExpirationPostActions postActions = ExpirationPostActions.Default;

    //Do whatever you want to do on the item.

    //Check to see whether In-Place Records Management has locked the item.
    if (Records.IsLocked(item))
    {
        /* In-Place Records Management locks items by checking them 
         * out to the System Account. For our changes to persist 
         * for these items, the code updates the checked-in version. */
         
        postActions |=
                /* Discards the check-out to System Account before 
                 * updating the item. */
                ExpirationPostActions.UndoCheckOutBeforeUpdate |
                /* Checks the item back out to the System Account after 
                 * updating the item. */
                ExpirationPostActions.KeepCheckedOutToSystem;
    }

    return postActions;
}

ロックされたアイテムを更新するために、すべてのその他の要求は昇格されたスコープで BypassLocks(SPListItem, ByPassLockedItemDelegateMethod) メソッドを呼び出す必要があります。

using Microsoft.SharePoint;
using Microsoft.SharePoint.Publishing;
using Microsoft.Office.RecordsManagement.RecordsRepository;

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    Records.BypassLocks(myListItem, delegate(SPListItem item)
    {
        //Perform any action on the item.
    });
});

関連項目

概念

情報管理ポリシーの管理

レコードと電子情報開示の管理