我在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。
如果您一次编辑一个项目,这可以正常工作,但如果您在数据表中编辑,由于异步性质,它会陷入混乱。有时它会起作用,有时它不会,这是不好的。
做这样的事情的最佳做法是什么?如果有多个项目被异步编辑,您将如何以一致的方式更新这样的汇总表?
谢谢
答案 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次?