SharePoint列表项事件处理程序

时间:2011-07-20 11:15:05

标签: sharepoint sharepoint-2010 sharepoint-2007 event-receiver splist

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

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

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

非常感谢, Hrayr

3 个答案:

答案 0 :(得分:2)

为您提供多种选择。

从计时器作业中插入标记

  • 在列表中设置一个标记,可以是“AddedFromTimerJob”之类的列(可以从UI中隐藏),也可以在SPListItem.Properties中添加内容
  • 在您的活动接收机中检查标志/财产 - 如果它存在,请通过,如果没有则拒绝。

Disable the event receiver for the thread, do your insert, re-enable event receiver.

答案 1 :(得分:1)

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

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

暂停禁用事件触发的代码可以在这里:Disable Sharepoint item events firing during item update(它适用于任何事件,而不仅仅是更新)

答案 2 :(得分:0)

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

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