如何在Infopath重复表中预填充求和字段

时间:2009-10-19 19:44:49

标签: infopath repeat

我有一个包含多个视图的Infopath 2007表单,用于在浏览器中使用。我无法在重复表中预先填充字段,从给定值开始,然后使用公式派生的默认值。

Summary视图中,我要求项目TotalCost和当前会计年度的预计支出(CurrentFYSpend):

+------------------------------+
|  Project Summary             |
+------------------------------+
|  Total Cost:       $100,000  |  -- TotalCost
|  Current FY Spend: $ 25,000  |  -- CurrentFYSpend
+------------------------------+
在下一个(Detail)视图中,我有一个重复表FYSpending,用户需要在任意数量的会计年度中突破项目的TotalCostFYSpending表格有一个YearlyCost字段,用于保存该年度的估算支出。在重复表格下,我有RunningTotalRemaining个字段。 RunningTotal的默认值为sum(YearlyCost); Remaining的默认值为TotalCost - sum(YearlyCost);他们一起向用户显示已经计算了总数的多少,以及他们还需要多少才能进入财政年度行。

当我们第一次进入Detail视图时,YearlyCost重复表第一行的FYSpending字段应填充CurrentFYSpend值:

+--------------------------------+
|  Project Detail                |
+--------------------------------+
|  Total Cost:        $100,000   |  <- TotalCost
|                                |
|  Fiscal Year Spending:         |
|  +---------------------------+ |  <- FYSpending repeating table
|  |  FY  |        Yearly Cost | 
|  +---------------------------+ |  <- FYSpending repeating table
|  | 2009 |           $ 25,000 | |  <- YearlyCost[1], from Summary CurrentFYSpend
|  +---------------------------+ |
|  | Add Fiscal Year |           |
|  +-----------------+           |
|                                |
|  Running Total:     $ 25,000   |
|  Remaining:         $ 75,000   |  <- TotalCost - sum(YearlyCost)
+--------------------------------+

当用户添加新的会计年度行时,我希望将新行的YearlyCost字段的默认值计算为剩余金额:YearlyCost[n] = TotalCost - sum(YearlyCost)

+--------------------------------+
|  Project Detail                |
+--------------------------------+
|  Total Cost:        $100,000   |
|                                |
|  Fiscal Year Spending:         |
|  +---------------------------+ | 
|  |  FY  |        Yearly Cost | |
|  +---------------------------+ |
|  | 2009 |           $ 25,000 | |
|  | 2010 |           $ 50,000 | |  -- YearlyCost[2], calc'd by rule on Add Row  
|  +---------------------------+ |
|  | Add Fiscal Year |           |
|  +-----------------+           |
|                                |
|  Running Total:     $ 75,000   |
|  Remaining:         $ 25,000   |
+--------------------------------+

我遇到了麻烦,因为这两个预先填充的行为相互冲突,似乎正在创造竞争条件。我尝试在Summary的{​​{1}}字段上设置规则以设置CurrentFYSpend的{​​{1}}的值,然后在FYSpending上设置默认值}字段设置YearlyCost。当我保存表单时,出现以下错误:

  

表单代码中发生错误。   对Changed的调用次数   数据中单个更新的事件   超过了最高限额。

(谢谢,InfoPath,有关此类特定错误消息!我需要支付多少才能获取触发事件的对象的名称,或者您尝试更新的对象?)

无论如何,任何人都可以描述一种实现这一目标的技术吗?总之,

  1. 从上一个视图的YearlyCost
  2. 填充第一行的Value: TotalCost - sum(YearlyCost)
  3. 允许覆盖第一行的YearlyCost,并将随后添加的行“CurrentFYSpend默认值填充到YearlyCost

2 个答案:

答案 0 :(得分:0)

好的,我从Alec Pojidaev得到了答案,他是InfoPath专家。他说:

你有几个问题我能够精确定位。第一个是您在YearlyCost字段上选中复选框“在重新计算公式的结果时更新此值”。它的一次性操作,所以你不想重新计算它。

第二个问题是公式本身。公式../../../my:TotalCost - sum(.)的结果与../../../my:TotalCost - .完全相同 sum()函数在该上下文中没有任何意义。

如果我理解你的意图是正确的,那么正确的公式应该是: ../../../my:TotalCost - sum(../../my:FY/my:YearlyCost)

完成这些更改后,表单按预期工作。

公式中的sum(.)是自动生成的。我通过点击而不是编写XPath表达式来构建公式。当我添加sum()函数并选择YearlyCost字段时,公式编辑器将YearlyCost替换为.我认为它知道它在做什么,所以我一个人留下它。我看到我需要密切关注正在生成的基础XPath。

答案 1 :(得分:0)

Jimmy Riche在infopathdev.com forums上的另一项技巧:

CurrentFYSpend有一条规则设置YearlyCost = .

RunningTotal的默认值为sum(YearlyCost),在重新计算公式时会更新。 Remaining的默认值为TotalCost - RunningTotal,在重新计算公式时会更新。

最后,重复表中的YearlyCost字段的默认值为

重新计算公式时,

(Remaining) * (Remaining > 0)更新。 (整洁的伎俩,嗯?)

这很好用,虽然YearlyCost的公式是,嗯,不明显。但是,我发现很多XPath都是这样的 - 你必须找到一些非显而易见的解决方案,这些解决方案在命令式语言中很简单。无论如何,这是有效的,所以我正在实施它。