私は、リスト内の特定のSPItemの更新を処理するイベントハンドラを作成しています。イベントは非同期で、問題なくSPEvenItemPropertiesを取得します。私が知りたいのは、SPItems列のどれが実際にイベントを発生させたかです。誰でもどのように考えている?Sharepointイベント処理..どの列が変更されましたか?
ありがとうございます。
私は、リスト内の特定のSPItemの更新を処理するイベントハンドラを作成しています。イベントは非同期で、問題なくSPEvenItemPropertiesを取得します。私が知りたいのは、SPItems列のどれが実際にイベントを発生させたかです。誰でもどのように考えている?Sharepointイベント処理..どの列が変更されましたか?
ありがとうございます。
これを実行する最善の方法は、SPItemEventPropertiesのBeforePropertiesとAfterPropertiesを調べて、どのフィールドの値が異なるかを確認することです。
これらは、イベントが発生する前後の項目のすべてのフィールドの値を含みます。
あなたの答えは、SPListItemがどこでどのように取得されるかによって少し異なります。通常のリストでは、アイテムの以前の値にアクセスすることはできません。バージョニングを有効にすると、アクセス許可に応じて、以前のバージョンにアクセスすることができます。
ドキュメントライブラリでは、SPItemEventProperties.BeforePropertiesを使用してドキュメントの以前のメタデータを取得できます。あなたはこのような何かを試すことができ、ドキュメントライブラリの
:それはオンになってバージョン管理とドキュメントライブラリでない限り動作しません 実際foreach (DictionaryEntry key in properties.BeforeProperties)
{
string beforeKey = (string)key.Key;
string beforeValue = key.Value.ToString();
string afterValue = "";
if (properties.AfterProperties[beforeKey] != null)
{
afterValue = properties.AfterProperties[beforeKey].ToString();
if (afterValue != beforeValue)
{
// Changed...
}
}
}
.B
、。バージョン管理の有無にかかわらず、通常のリストにはBeforePropertiesがまったく設定されず、すべての列が空になります。 –
代わりに、2つの別々のハンドラを作成する必要があります.1つはItemUpdating(現在のプロパティ値のセットを格納)と、もう1つはItemUpdated(新しいプロパティ値セットを取得し、 Updatingハンドラによって保存されます)... –