2

我的 SharePoint 2007 项目中有以下场景。我有计时器作业定义,每 30 分钟更新一次 SQL 数据库表中的 SharePoint 列表。

我还为我的列表添加了项目事件处理程序,因此它不允许用户从 SharePoint 用户界面将新项目添加到列表中。换句话说,只能通过 SharePoint 对象模型在计时器作业定义中添加新列表项,并且不应允许从 UI 添加新项。

我的问题是 - 即使从计时器作业定义中添加新项目,事件处理程序也会被执行,我可以以某种方式检查事件处理程序是如何添加项目的(通过对象模型或通过用户界面)。

非常感谢, Hrayr

4

3 回答 3

2

几个选项供您选择。

标记计时器作业中的插入

  • 在列表中设置一个标志,可以是“AddedFromTimerJob”之类的列(可以从 UI 中隐藏),也可以在SPListItem.Properties中添加一些内容
  • 在您的事件接收器中检查标志/属性 - 如果它存在则让它通过,如果没有则拒绝。

禁用线程的事件接收器,插入,重新启用事件接收器。

于 2011-07-20T12:03:40.583 回答
1

首先,为什么不设置不允许添加新项目的权限,而不是在用户尝试将项目添加到列表后通过 eventreceiver 向用户提供错误?

关于问题 - 可以暂时禁用事件触发。例如,当您的计时器作业运行时,禁用事件触发直到您完成。但是它可能不适合所有情况,因为它会禁用列表的所有事件接收器。但是,如果您没有任何事件接收器可以对 ItemAdding/ItemAdded 事件的添加数据执行某些操作,则它可以工作。

禁用事件触发临时的代码可以在这里喜欢:禁用在项目更新期间触发的 Sharepoint 项目事件(它适用于任何事件,而不仅仅是更新)

于 2011-07-20T13:36:28.917 回答
0

您可以检查正在执行项目添加操作的用户帐户。

如果System.Threading.Thread.CurrentPrincipal.Identity是运行定时器作业的帐户,设置 SPEventPropertiesBase.Cancel =false;

于 2012-01-05T09:15:09.577 回答