SharePoint事件处理程序

时间:2010-07-06 08:47:57

标签: sharepoint moss event-handling sharepoint-api

我在SharePoint中遇到了事件处理程序的问题。

我有一个项目列表(列表A),它附有一个事件处理程序,其中包含ItemAdded和ItemUpdated的代码。

当这些事件中的任何一个触发时,我希望使用列表A中所有类似名称项的最小值来更新另一个列表(列表B)。想想几乎像Min(FieldX)。

e.g。

利斯塔
ITEMNAME价值
CategoryA 2
CategoryA 4
CategoryA 3
类别b 1个
类别b 8

列表B
ITEMNAME价值
CategoryA 2
类别b 1个

如果有人更新ListA中的某个CategoryA项目的值为0,那么事件处理程序将使用新值0替换ListB中的CategoryA项目。

目前我这样做是通过删除ListB中的所有项目,然后从ListA获取所有唯一的ItemNames,并将每个项目的最低值插入ListB。

如果您一次编辑一个项目,这可以正常工作,但如果您在数据表中编辑,由于异步性质,它会陷入混乱。有时它会起作用,有时它不会,这是不好的。

做这样的事情的最佳做法是什么?如果有多个项目被异步编辑,您将如何以一致的方式更新这样的汇总表?

谢谢

1 个答案:

答案 0 :(得分:1)

您正在捕捉哪个事件 - Synchronous * ing(ItemAdding)事件或Async * ed(ItemAdded)事件?

一个建议是该事件启动计时器作业以更新摘要列表。然后,您的事件处理程序只是简单地查看作业是否已安排(一分钟时间?),如果没有安排它。然后关于多个快速更新无关紧要。

  

长期运营:考虑一下   创建自定义SharePoint计时器   工作。启动/安排计时器作业   从事件而不是全部运行   事件中的逻辑。这将   允许您使用的功能   SharePoint查看是否为Timer   工作成功运行

Event Handlers - Part 1: Everything you need to know about ... SharePoint ... Event Handlers.

另一个建议 - 您是否需要预先计算并将其存储在列表中?如果它只是用于显示你可以不编写自定义Web部件,请执行此操作,缓存结果并清除缓存,具体取决于SPList.ListItemModified和.LastItemDeleted次?