我在那里发了一个答案,但是如果它被删除或删除,这里有一个副本:
lem.mallari的答案是一个巨大的痛苦,除非你可以假设列表A中的金额永远不会改变,因为它不会跟踪一个项目是否已被添加到总和中。工作流无法遍历SharePoint列表,这意味着没有简单的方法来计算多个列表项的总和或平均值。
实现这一目标的正确方法将需要一些开发。 SharePoint开发人员培训(2010,2013)实际上可以帮助您完成大部分工作:事件接收器应在使用SharePoint API通过的列表A和B中添加或更改项目时触发按名称列出A和平均值,然后更新列表B中的所有(或仅受影响)项目。或者,您可以使用JavaScript显示列表A中与列表B中的项目同名的所有条目的总和因为所有数据都显示在您的页面上。如果您对XPath和InfoPath很方便,可以将列表A作为辅助数据源添加到列表B的表单中,并仅选择列表A中的适用项目来进行求和。
但如果我们谈论工作流程,那么这里是“仅限工作流程”的方法。这在2010年经过测试并取得了成功。使用以下列创建自定义列表C:
- 标题(字符串,必填,强制执行唯一值)
- TotalItems(整数,强制,默认为0)
- 总和(您想要的数字,小数位,强制性,默认为0)
- 平均值(计算,= IF(TotalItems = 0,0,Sum / TotalItems))(可选)
将列表A和B中的名称列替换为指向列表C的查找列。删除列表B中的“数量”列,而不是将“总和”列作为附加列。将以下列添加到列表A,并确保用户无法直接更改它们。这可以通过制作InfoPath表单或通过制作替代视图和编辑表单来加以限制。
- AmountArchive(数字,与金额相同,默认为0)
- AmountHasBeenSubmitted(是/否,默认否)
每次在列表A中创建或修改项目时都创建一个工作流程。使用这些命令(我使用列表来提高可读性;在格式化为代码时它变得很丑陋):
- 如果当前项目:金额不等于当前项目:AmountArchive
- 设置变量:项目计数为(数据源:列表C;来自源的字段:TotalItems;查找列表项:字段标题;值:当前项:名称(返回字段为:查找值(作为文本)))< / LI>
- 计算变量:ItemCount加1(输出到变量:ItemCount)
- 计算列表C:总和(与上面类似的设置;请务必使用查找值(作为文本)而不是字符串!)减去当前项目:AmountArchive(输出到变量:SumWithoutValue)
- 计算变量:SumWithoutValue加上当前项目:金额(输出到变量:NewSum)
- 如果当前项目:AmountHasBeenSubmitted等于否
- 将AmountHasBeenSubmitted设置为是
- 更新列表C中的项目(将TotalItems设置为变量:ItemCount;将Sum设置为变量:NewSum;以相同的方式查找列表项:Field; Title;值:Current Item:Name(返回字段为:Lookup Value( as Text))
- 否则
- 更新列表C中的项目(不要对TotalItems做任何事情;使用相同的逻辑将Sum设置为Variable:NewSum)
- 将金额设置为当前项目:AmountArchive