2013-04-30 123 views
4

我有以下情况:A组有两列(名称,金额),并在列表B(名称),我想添加计算列这应该是所有的总和如何从另一个列表中创建数据计算列

列表A:表A具有相同的名称作为列表B.示例条目

NAME  Amount 
L0011  100 
L0011  50 
L0020  234 
在列表BI

所以要计算列显示:

NAME  Amount 
L0011  150 
L0020  234 

哪有这样做?工作流程(只要在列表A中添加/修改条目,更新列表B)或其他内容?由于

回答

5

这不能使用计算列完成,因为计算列只能用于列在同一名单上。

使用SharePoint Designer工作流,你可以只使用Create List ItemUpdate List Item行动,以便每当用户对L0011增加值金额将在其中包含了以前的数额已经是另一个列表的列被添加。

让我知道如果你需要一个更详细的解答对SharePoint的做法,我会提供你做什么一步一步的指令。

+0

大THX。我会尝试使用WF – DanielR 2013-05-01 06:31:05

7

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,金额/ TOTALITEMS))(可选)

中列出更换名称列A和B查找列指向在列表C中删除列表B中的金额列,而不是将总和列作为附加列。将以下列添加到列表A,并确保用户不能直接更改它们。这可以通过制作InfoPath表单或制作其他视图和编辑表单来限制。

  • AmountArchive(数字,相同的金额,默认为0)
  • AmountHasBeenSubmitted(是/否,默认无)

创建工作流程的每个项目被创建或列表修改时间运行A.使用这些命令(我使用可读性列表;当作为代码格式化它是越来越难看):

  • 如果当前项目:金额不等于当前项:AmountArchive
    • Set Variable:Item Count to(Data source:List C;来源栏:TotalItems;查找列表项目:字段标题;值:当前项目:名称(返回字段为:查找值(作为文本)))
    • 计算变量:ItemCount加1(输出到变量:ItemCount)
    • 计算列表C:Sum(与上面类似的设置; !一定要使用查找值(以文本),而不是字符串)减去当前项目:AmountArchive(输出到变量:SumWithoutValue)
    • 计算变量:SumWithoutValue加上当前货品:金额(输出到变量:NewSum)
    • 如果当前项目:AmountHasBeenSubmitted等于否
      • 设置AmountHasBeenSubmitted为是
      • 更新列表C中的项目(将TotalItems设置为Variable:ItemCount;将Sum设置为变量:NewSum;以与字段相同的方式查找列表项目:标题;值:当前项:姓名(返回字段:查找值(以文本))
    • 否则名单C(不要做任何TOTALITEMS
      • 更新的产品,使用相同的逻辑来设置总和到变量:NewSum)
    • 设置量为当前项目:关于使用DSUM功能AmountArchive
相关问题