首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

SharePoint 事件接收器中 BeforeProperties 與 AfterProperties 差異全解析:列表與文件庫實測對照表

     編輯:關於.NET

問題背景

SPItemEventReceiver 提供 BeforeProperties / AfterProperties 取得欄位變更前後值,但 SDK 指出:「列表項目事件不公開 BeforeProperties」。實測驗證各事件行為差異。

列表測試結果對照表

事件BeforePropertiesAfterPropertiesListItem
ItemAdding無值新值空
ItemAdded無值新值新值
ItemUpdating無值變更值舊值
ItemUpdated無值變更值新值
ItemDeleting無值無值舊值
ItemDeleted無值無值空

文件庫測試結果對照表

事件BeforePropertiesAfterPropertiesListItem
ItemAdding無值無值空
ItemAdded無值無值新值
ItemUpdating舊值變更值舊值
ItemUpdated舊值變更值新值
ItemDeleting無值無值舊值
ItemDeleted無值無值空

關鍵結論

  1. 列表項目確實無 BeforeProperties(所有事件皆為「無值」)。
  2. 列表的 ItemAdding/ItemAdded 可取得 AfterProperties,文件庫則不可。
  3. ItemDeleted 階段所有集合皆為空,實體已刪除。

正確阻止列表欄位修改的寫法

錯誤寫法(文件庫適用、列表失效):

if (properties.BeforeProperties["column"] != properties.AfterProperties["column"]) { ... }

正確寫法(列表適用):

// ItemUpdating 同步事件中
if (properties.ListItem["column"] != properties.AfterProperties["column"])
{
    properties.Cancel = true;
    properties.ErrorMessage = "該欄不允許修改";
}

原理:列表的 ListItem 保有舊值,AfterProperties 為新值,兩者比對即可偵測變更。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved