1

SharePoint のイベント ハンドラーに問題があります。

ItemAdded および ItemUpdated のコードを使用してイベント ハンドラーが関連付けられているアイテムのリスト (リスト A) があります。

これらのイベントのいずれかがトリガーされたら、別のリスト (リスト B) を更新して、リスト A の類似した名前のすべてのアイテムの最小値を取得します。ほぼ Min(FieldX) のように考えてください。

例えば

ListA
ItemName 値
CategoryA 2
CategoryA 4
CategoryA 3
CategoryB 1
CategoryB 8

リスト B
項目名 値
カテゴリ A 2
カテゴリ B 1

誰かが ListA の CategoryA 項目の 1 つを値 0 に更新すると、イベント ハンドラーは ListB 内の CategoryA 項目を新しい値 0 に置き換えます。

現在、ListB のすべての項目を削除し、ListA からすべての一意の ItemName を取得し、それぞれの最小値を ListB に挿入することでこれを行っています。

これは、一度に 1 つの項目を編集する場合は問題なく機能しますが、データシートで編集すると、非同期の性質のために適切な混乱が生じます。うまくいくこともあれば、うまくいかないこともあり、それは良くありません。

このようなことを行うベストプラクティスの方法は何でしょうか? 非常に多くのアイテムが非同期的に編集されているため、このようなロールアップ テーブルを一貫した方法で更新するにはどうすればよいでしょうか?

ありがとう

4

1 に答える 1

1

Synchronous *ing (ItemAdding) イベントまたは Async *ed (ItemAdded) イベントのどちらのイベントをキャッチしていますか?

1 つの提案は、イベントでタイマー ジョブを開始して、概要リストを更新することです。次に、イベント ハンドラーは、ジョブがスケジュールされているかどうか (数分間?) をチェックし、スケジュールされていない場合はスケジュールします。その後、複数のクイック更新については問題になりません。

長時間実行される操作: カスタム SharePoint タイマー ジョブの作成を検討してください。イベント内のすべてのロジックを実行するのではなく、イベントからタイマー ジョブを開始/スケジュールします。これにより、SharePoint の機能を使用して、タイマー ジョブが正常に実行されたかどうかを確認できます。

イベント ハンドラー - パート 1: SharePoint について知っておくべきことのすべて ... イベント ハンドラー。

別の提案 - これを事前に計算してリストに保存する必要がありますか? 表示のためだけにカスタム Web パーツを作成できない場合は、その場でこれを行い、SPList.ListItemModifiedおよび .LastItemDeleted 時間に応じて結果をキャッシュし、キャッシュをクリアしますか?

于 2010-07-06T09:47:26.890 に答える