0

カスタムリストマスターを含むサイトがあります。このリストのコピーを含むサブサイトがいくつかあります。誰かが新しいリストアイテムを編集したりマスターリストに追加したりした場合、マスターリストに関連付けられているイベントハンドラーによってすべてのサブサイトがそれに応じて更新されるようにしたいと思います。

たとえば、アイテムが追加された場合は、各サブサイトのリストに追加します

アイテムが更新された場合は、各サブサイトの適切なリストアイテムを更新します

アイテムが削除された場合は、各サブサイトから適切なリストアイテムを削除します

SPListItem.CopyメソッドとlistItemのCopyToメソッドを使用してみましたが役に立ちませんでした。この種の手法を実行するためのベストプラクティスは何ですか?

4

2 に答える 2

1

SPListItem.CopyとSPListItem.CopyToは、ターゲットリストが元のアイテムと同じSPWeb上にある場合にのみ機能すると思います。これらのリストアイテムには、他のリストアイテムと区別するだけでなく、すべてのサブサイトとトップレベルサイトで常に同じである「ID」フィールドがあると想定しています(100ではないIDとは異なります)。 %あなたの管理下にあります)。タイトル、プログラムで割り当てられた番号、何でもかまいません。これを単に「ID」フィールドと呼びます。

私はあなたがイベントハンドラーを知っていると仮定しています。そうでない場合は、ここですべてのコア概念を説明する非常に基本的な例を見ることができます。

削除は最も扱いやすい方法です。サブサイトを反復処理し、正しい「ID」フィールドを持つアイテムのマスターリストを反復処理して、SPListItem.Delete()を呼び出します。これは、ItemDeletingイベントを発生させるのに十分なはずです。

追加は少し難しいです。もう一度サブサイトを繰り返し処理しますが、今回は次のような方法を使用します。

SPListItem target = list.Items.Add();
target["Title"] = properties.AfterProperties["Title"];
//Repeat similar assignments for all fields in the list item which can be assigned during creation.
target.Update();

これは、変更可能なすべてのフィールドと、まだ含めていない場合は「ID」フィールドを含めるように変更する必要があります。自動的に割り当てられるものについて心配する必要はありません(Copy / CopyToが機能していれば、SharePointはとにかくそれらを処理します)。ItemAddedイベントに入れます。

最後に、アイテムの更新はアイテムの追加と非常に似ていますが、list.Items.Add()を呼び出す代わりに、マスターリストを反復処理して正しい「ID」フィールドを持つアイテムを取得することで正しいアイテムを取得します。ItemUpdatedイベントに入れます。

マスターリストのサブサイトのアクセス許可がトップレベルのサイトのアクセス許可と同じであることを確認することをお勧めします。これがあなたのために働くことを願っています!

于 2010-04-13T15:32:53.973 に答える
0

ルックアップ列として使用するマスターリストの場合は、ルートサイトにリストを作成し、サイト列をそのリストにポイントすることができます。そのサイト列は、任意のサブサイトリストで使用できます。

于 2010-04-14T14:04:58.907 に答える