给重复节点求和并不是InfoPath最强大的功能,像自定义顺序。我们仅仅去创建一列重复表,然后对重复表中的一列进行求和。在一些时候这样的求和很难被用到,因为实际情况中中间结果(重复列总合)不需要被存储到数据源中,而我们去做的是动态的计算横向表中的求和值。这篇文章将给大家介绍怎样通过一些工作实现此项功能
让我们来简单的看一个例子:
通过利用方法来计算(price*quantity)的值,并把这个值付给lineItemTotal节点。然后我们创建一个最终汇总的内容,并在添加上来的表达式框中使用内置SUM功能
Sum(my:group1
/
my:lineItems
/
my:lineItemTotal)
瞧,我们完成了,他将汇总当前lineItemTotal里面的数据.
我们为什么在这里说这些简单东西的理由:当然是为了一些复杂的事件了.
如果中间值的结果(这个元素是我们假定的)并没有出现在我们的数据源中,怎么办?这种情况只可能出现在你在操作一个固定的schema或者你是一个XML的纯粹主义者,(至少我是
J),在你的XML中舍去那些没必要的中间计算值.
我们的目标仍然是这样的-但是数据源不同了.
原来的lineItemtotal将以一个表达式框的形式放在原来的文本框的位置上了;他的任务是计算简单的(price*quantity).
但是这样的计算结果怎么汇总到最后的”order total”中呢?你首先肯定会本能的去想利用sum(price*quantity),可这样做以后你会发现这个SUM XPATH功能其实仅仅计算出来的是一个节点上的值…
让我们一起回忆一下仅仅通过利用xPath来从头到尾取值的技术吧.在这里进行了详细的描述.让我们利用以下的方法来去给order total表达式付值:
Sum(xdMath:Eval(my:lineItems,”my:price
*
my:quantity”))
表达式写出来了,相信大家有一些茫然,他是怎么工作的呢?让我们彻底的分析一下:
1) Eval功能是来评估在横向元素price*quantity结果的表达式中的内容(相当于上面的
ineItemTotal),
并在这个虚拟的节点中返回一个值
.
2)
Sum
功能是取得这些虚拟节点中的值
,
去求和
,
然后给我们一个我们想要的值
.
我会给大家一个简单的表单摸版,里面有这个技术的执行,保存XSN到本地后打开.
这个方法工作在InfoPath 2003,2007,支持在浏览器中可能用到的表单摸版