更新SPListItem时禁用SharePoint项目事件触发

Update()

  • 更新数据库中的项目
  • 更新"Modified"和"Modified by"值
  • 创建一个新版本

SystemUpdate()

  • 更新数据库中的项目
  • "Modified"和"Modified by"值没有任何更改
  • 没有新版本
  • 触发项目事件

SystemUpdate(true)

  • SystemUpdate()相同,并递增项目版本
  • 使用SystemUpdate(false)SystemUpdate()完全相同

UpdateOverwriteVersion()

  • 更新项目但不创建新版本
  • 更新"Modified"和"Modified by"值

禁用SharePoint项目事件触发

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;

namespace MYEventReceiver {
    class DisabledItemEventsScope : SPItemEventReceiver, IDisposable {
        bool oldValue;

        public DisabledItemEventsScope () {
            this.oldValue = base.EventFiringEnabled;
            base.EventFiringEnabled = false;
        }

        #region IDisposable Members

        public void Dispose () {
            base.EventFiringEnabled = oldValue;
        }

        #endregion
    }
}

现在,我们可以将此类与using语法一起使用来创建一个范围,在该范围内禁用所有项目事件触发。

像这样:

1
2
3
4
using (DisabledItemEventsScope scope = new DisabledItemEventsScope ()) {
    item.Update (); //不会触发事件
}
item.Update (); //将再次引发事件

它适用于上述任何SPListItem更新方法。所以我们也可以:

1
2
3
4
using (DisabledItemEventsScope scope = new DisabledItemEventsScope ()) {
    item.SystemUpdate (true); //不会触发事件
}
item.SystemUpdate (true); //将再次引发事件

分享

文章导航