1

我在 SharePoint 中的事件处理程序存在问题。

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

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

例如

ListA 项目名称

CategoryA 2
CategoryA 4
CategoryA 3
CategoryB 1
CategoryB 8

列表 B
项目名称 值
CategoryA 2
CategoryB 1

如果有人将 ListA 中的 CategoryA 项之一更新为值为 0,则事件处理程序会将 ListB 中的 CategoryA 项替换为新值 0。

目前,我通过删除 ListB 中的所有项目,然后从 ListA 获取所有唯一的 ItemNames 并将每个项目的最小值插入 ListB 来执行此操作。

如果您一次编辑一个项目,这可以正常工作,但如果您在数据表中编辑,由于异步性质,它会变得一团糟。有时它会起作用,有时它不会,这不好。

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

谢谢

4

1 回答 1

1

您正在捕捉哪个事件 - 同步 *ing (ItemAdding) 事件或异步 *ed (ItemAdded) 事件?

一个建议是让事件启动计时器作业以更新摘要列表。然后,您的事件处理程序只需检查作业是否已安排(几分钟时间?),如果没有安排。那么多次快速更新就无关紧要了。

长时间运行的操作:考虑创建自定义 SharePoint 计时器作业。从事件开始/安排计时器作业,而不是运行事件内的所有逻辑。这将允许您使用 SharePoint 的功能来查看 Timer Job 是否成功运行

事件处理程序 - 第 1 部分:您需要了解的关于 ... SharePoint ... 事件处理程序的一切。

另一个建议-您是否需要预先计算并将其存储在列表中?如果它只是为了显示,您是否可以不编写自定义 Web 部件即时执行此操作,缓存结果并根据SPList.ListItemModified和 .LastItemDeleted 时间清除缓存?

于 2010-07-06T09:47:26.890 回答