元の KB 番号: 2905419
現象
サイト コレクションは、Microsoft SharePoint Server 2010 または Microsoft SharePoint Server 2013 のレコード センター テンプレートを使用して作成します。 このサイト コレクションの既定の Drop Off ライブラリに新しいコンテンツを更新すると、次のエラー メッセージが表示されます。
Microsoft SharePoint Server 2010: エラー
このアイテムは保留状態であるか、削除をブロックするレコードであるため、削除、移動、または名前変更することはできません。Microsoft SharePoint Server 2013:
申し訳ございません。問題が発生しました。
このアイテムは保留状態であるか、削除をブロックするレコードであるため、削除、移動、または名前変更することはできません。
アップロードされたアイテムは自動的にレコードとして宣言され、コンテンツ オーガナイザー ルールの構成に従って、いずれかのコピー先ライブラリにコピーされます。 また、コピーしたこれらの項目をそれぞれの Drop Off ライブラリまたはレコード ライブラリから削除しようとすると、このエラーも表示されます。
[ コンプライアンスの詳細 ] セクションで宣言を解除しようとしても、この項目の宣言状態は変更されません。 変更を加えずにドロップオフ ライブラリでこの項目を編集して送信すると、レコード ライブラリに新しい重複アイテムが作成されます。 この重複する項目の名前には、一意の自動生成 ID が追加されます。
項目の自動宣言を無効にし、項目の手動宣言を有効にした場合、Drop off ライブラリの項目を削除できます。 ただし、レコード ライブラリの項目は、削除できない重複として残ります。
原因
これは、あるライブラリから別のライブラリへの項目の移動操作が 2 つのフェーズで完了するためです。 最初にソースからコピー先にコピーされた後、ソースから削除されます。 このような状況では、ソースは Drop Off ライブラリであり、アップロードされるとすぐにアイテムをレコードとして宣言します。 アイテムは Drop Off ライブラリ内のレコードとして宣言されているため、削除できません。 アップロード後、コンテンツ オーガナイザー ルールが実行され、アイテムが移動先に移動されます。 これにより、コピー操作が正常に完了し、アイテムがコピー先で使用できるようになります。 ただし、宣言されているため、項目を Drop Off ライブラリで削除することはできません。 この項目を削除しようとすると、前述のエラーが発生します。
アイテムのプロパティを編集すると、開催者ルールが再実行され、プロシージャが繰り返されます。 今回は、ドキュメントが既に宛先に存在するため、アイテム名のサフィックスには一意の ID が付けられます。
レコードの手動宣言を許可するように Drop Off ライブラリを変更した場合、そのような項目を除外解除した後に削除できます。 レコード ライブラリ内の項目が変更された場合、ライブラリはこの項目の宣言状態を変更しないため、アイテムを削除できません。
解決方法
手順 1: ドロップ オフ ライブラリの重複を修正する
アイテムをレコードとして自動的に宣言しないように、Drop Off ライブラリを更新します。 Drop Off ライブラリは、多くのコンテンツ オーガナイザー ルールの対象となる可能性がある 1 つの場所にドキュメントをドロップするために使用されます。
これにより、Drop Off ライブラリにアップロードされた新しい項目が重複したり、エラーがスローされたりしないようにします。 削除ライブラリでレコードの手動宣言を有効にして、既存のドキュメントをアンクレーブして Drop Off ライブラリをクリーンした後で削除できるようにします。
手順 2 レコード ライブラリの重複を修正する
レコード ライブラリ内の既存の重複を修正するには、次の手順に従います。
- アイテム削除アクション中に実行されるイベント レシーバーを削除します。
- 重複するレコードを削除します。
- イベント レシーバーを再度追加します。
次のセクションでは、手順の詳細を示します。
重要
削除の試行中に実行されるイベント レシーバーを削除すると、ドキュメントの削除が有効になります。 これには、削除すべきでない正当なドキュメントが含まれます。 最初にテスト環境でこれらの手順をテストします。 この演習では、ユーザーが他のドキュメントを削除しないように、サイトをユーザーが使用できないようにして、極端な予防措置を講じます。
SharePoint 管理シェルで、次のスクリプトを実行して、すべてのイベント レシーバーを一覧表示します。
$problemweb = Get-SPWeb http://<Your Site Collection> $problemlist = $problemweb.Lists["<Record Library Name>"] $problemlist.EventReceivers | select type, name
注:
YourSiteCollection> と <Rocrdr Listbrayt 名>を正しい値に置き換える<必要があります。
この出力では、次のイベント レシーバーのシーケンスを
ItemDeleting
インクリメントしながら、位置番号 0 として上から開始して、イベント レシーバーの種類の位置を計算します。たとえば、次の出力では、
ItemDeleting
イベント レシーバーは配列の 2 番目の位置にあります。 したがって、配列が 0 で始まるので、位置番号は 1 です。Type Name ---- ---- ItemUpdating ECM_RecordEventReceiver ItemDeleting ECM_RecordEventReceiver ItemFileMoving ECM_RecordEventReceiver ItemAdded Document ID Generator ItemAdded ECM_RecordEventReceiver ItemUpdated Document ID Generator ItemUpdated ECM_RecordEventReceiver ItemCheckedIn Document ID Generator ItemCheckedIn ECM_RecordEventReceiver ItemUncheckedOut Document ID Generator
配列の位置がイベント レシーバーを
ItemDeleting
指していることを確認します。$problemev = $problemlist.EventReceivers[Position of the "ItemDeleting" event receiver]
例:
$problemev = $problemlist.EventReceivers[1]
ItemDeleting イベント レシーバーを削除します。
$problemev.Delete()
一覧を更新します。
$problemlist.update()
ブラウザーを使用して、レコード ライブラリから重複を削除します。
次のスクリプトを実行して、イベント レシーバーを
ItemDeleting
再作成します。$problemevadded = $problemlist.EventReceivers.Add([Microsoft.SharePoint.SPEventReceiverType]::ItemDeleting,"Microsoft.Office.Policy, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c","Microsoft.Office.RecordsManagement.Internal.HoldEventReceiver") $problemlist.update()
詳細
イベント レシーバー ItemDeleting
の種類 SPEventReceiver
は です。 を指定し、receiverType
Assembly
className
このメソッドを使用すると、イベント レシーバーを作成できます。