【问题标题】:SharePoint Event HandlerSharePoint 事件处理程序
【发布时间】:2010-07-06 17:47:26
【问题描述】:

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

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

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

例如

列表A
项目名称     值
类别A    2
类别A    4
类别A    3
类别B    1
类别 B    8

列表 B
项目名称     值
类别A    2
类别 B    1

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

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

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

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

谢谢

【问题讨论】:

  • 原谅我,我要为我的公司软件——PivotPoint——做一个公然的插件——它可以做这种数据透视表,比如汇总操作(min/max/sum/count/std dev)等等pentalogic.net/sharepoint-products/pivotpoint

标签: sharepoint moss event-handling sharepoint-api


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 我喜欢这份工作的想法——谢谢!编辑项目后,我将启用该作业一分钟(如果尚未启用),当该作业运行时,它将更新汇总列表。是否可以将参数传递到作业中?即从子站点 X 处理 listA?
  • 我正在实施作业解决方案 - 是否可以安排作业在几分钟内运行一次然后停止?我看到有调度,但我看不出我怎么可以只运行一次,然后再也不运行
  • 想我可能已经找到了答案 - SPOneTimeSchedule
  • 为别人做的时候贴出来...谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多