计算InfoPath中重复元素的字段的乘积

时间:2011-11-15 15:21:38

标签: infopath formula

使用内置xpath函数计算字段的总和,平均值或最大值是很容易的。

但是可以计算产品吗?

假设我有像

这样的重复元素
<my:table>
    <my:row>
        <my:value>10</my:value>
    </my:row>
    <my:row>
        <my:value>20</my:value>
    </my:row>
    <my:row>
        <my:value>30</my:value>
    <my:row>
</my:table>

my:row的数量可能会有所不同。)

我需要一个公式乘以所有my:value s:10 * 20 * 30(并使用任意数量的行)。

有什么想法吗?

请不要建议代码解决方案,我需要限制表格。

2 个答案:

答案 0 :(得分:1)

使用conditional hack described here,我终于收集了解决方案。

my:row内,创建一个正在运行的产品字段my:valueCumul,使用公式填充以引用上一行,并利用条件黑客覆盖第一行的NaN

../my:value * 
concat(
(count(../preceding-sibling::my:row[1]) = 0) * 1,
substring(../preceding-sibling::my:row[1]/my:valueCumul, 1, (count(../preceding-sibling::my:row[1]) = 1) * string-length(../preceding-sibling::my:row[1]/my:valueCumul))
)

在表格之外,您可以轻松参考最后一行中的my:valueCumul来获取总产品:

../my:row[count(../my:row)]/my:valueCumul

此解决方案的优点是:

  • 在任何共享点环境中以浏览器形式运行
  • 不受“16计算”阈值的影响
  • 该公式对行删除和移位非常有用

答案 1 :(得分:0)

您无法使用InfoPath中的内置函数。

但是,不要这么快地注销代码解决方案。如果您只访问表单本身的数据元素(没有EXTERNAL),那么您可以将表单保留为受限制的安全性,代码将运行没有问题 - 用户不知道区别。

附加到正确的事件,抓住节点,并在乘法时循环遍历它们是相当简单的。您甚至不必使用托管代码 - 使用其中一个脚本选项。如果您遇到任何问题,请回复(或更新您的原始帖子),我们可以帮助解决这些问题。