1

我处于此处描述的相同情况。

我正在尝试使用创建列表项更新列表项操作(如答案中建议的)但没有任何结果。

有人可以解释答案中提到的程序吗?

谢谢,

马塞洛

4

1 回答 1

0

我在那里发布了一个答案,但这是一个副本,以防它被删除或删除:

lem.mallari 的答案是一个巨大的痛苦,除非您可以假设列表 A 中的金额永远不会改变,因为它没有跟踪项目是否已经添加到总和中。工作流无法遍历 SharePoint 列表,这意味着没有简单的方法来计算多个列表项的总和或平均值。

实现这一点的正确方法将需要一些开发。SharePoint 开发人员培训(2010 年2013 年)实际上将为您提供大部分的帮助:当在列表 A 和 B 中添加或更改项目时,事件接收器应该触发,使用 SharePoint 的 API 来遍历列表 A 并按名称计算平均值,然后更新列表 B 中的所有(或仅受影响的)项目。或者,您可以使用 JavaScript 显示列表 A 中与列表 B 中的项目同名的所有条目的总和,只要所有数据都显示在您的页。如果您熟悉 XPath 和 InfoPath,则可以将列表 A 作为辅助数据源添加到列表 B 的表单中,并仅选择列表 A 中适用的项目进行汇总。

但如果我们谈论的是工作流程,这里是“仅工作流程”方法。这在 2010 年经过测试并取得成功。使用以下列创建自定义列表 C:

  • 标题(字符串,强制,强制唯一值)
  • TotalItems(整数,强制,默认 0)
  • 总和(数字,小数位随意,必填,默认 0)
  • 平均值(计算,=IF(TotalItems=0,0,Sum/TotalItems))(可选)

将列表 A 和 B 中的 Name 列替换为指向列表 C 的查找列。删除列表 B 中的 Amount 列,而不是包括 Sum 列作为附加列。将以下列添加到列表 A,并确保用户不能直接更改它们。这可以通过制作 InfoPath 表单或制作替代视图和编辑表单来限制。

  • AmountArchive(数字,与Amount相同,默认0)
  • AmountHasBeenSubmitted(是/否,默认否)

创建一个工作流,每次在列表 A 中创建或修改项目时运行。使用这些命令(我使用列表是为了便于阅读;当格式化为代码时它变得很难看):

  • 如果 Current Item:Amount 不等于 Current Item:AmountArchive
    • 将变量:项目计数设置为(数据源:列表 C;来自源的字段:TotalItems;查找列表项目:字段标题;值:当前项目:名称(返回字段为:查找值(作为文本)))
    • 计算变量:ItemCount 加 1(输出到变量:ItemCount)
    • 计算列表 C:Sum(与上面类似的设置;一定要使用查找值(作为文本)而不是字符串!)减去当前项:AmountArchive(输出到变量:SumWithoutValue)
    • 计算变量:SumWithoutValue 加上当前项目:金额(输出到变量:NewSum)
    • 如果 Current Item:AmountHasBeenSubmitted 等于 No
      • 将 AmountHasBeenSubmitted 设置为 Yes
      • 更新列表 C 中的项目(将 TotalItems 设置为变量:ItemCount;将 Sum 设置为变量:NewSum;以与字段:标题相同的方式查找列表项;值:当前项目:名称(返回字段为:查找值(作为文本) )
    • 别的
      • 更新列表 C 中的项目(不对 TotalItems 执行任何操作;使用相同的逻辑将 Sum 设置为 Variable:NewSum)
    • 将金额设置为当前项目:AmountArchive
于 2013-10-11T21:07:49.817 回答