0

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

Summary观点而言,我要求一个项目TotalCost和当前财政年度的预计支出(CurrentFYSpend):

+------------------------------+
| 项目总结 |
+------------------------------+
| 总成本:100,000 美元 |  -  总消耗
| 当前财政年度支出:$ 25,000 | -- CurrentFYSpend
+------------------------------+
在下一个 ( Detail) 视图中,我有一个重复表FYSpending,用户需要在其中分解项目 TotalCost在任意数量的财政年度内。该FYSpending表有一个YearlyCost字段保存当年的估计支出。在重复表下我有RunningTotalRemaining字段。RunningTotal默认值为sum(YearlyCost); Remaining默认值为TotalCost - sum(YearlyCost); 它们一起向用户显示已经占了总数的多少,以及他们还需要多少才能进入财政年度行。

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

+--------------------------------+
| 项目详情 |
+--------------------------------+
| 总成本:100,000 美元 | <- 总成本
| |
| 财政年度支出:|
| +----------------------------+ | <- FYSpending 重复表
| | 风云 | 年费 |
| +----------------------------+ | <- FYSpending 重复表
| | 2009 | 25,000 美元 | | <- YearlyCost[1],来自汇总 CurrentFYSpend
| +----------------------------+ |
| | 添加会计年度 | |
| +-----------------+ |
| |
| 运行总额:$ 25,000 |
| 剩余:$ 75,000 | <- TotalCost - sum(YearlyCost)
+--------------------------------+

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

+--------------------------------+
| 项目详情 |
+--------------------------------+
| 总成本:100,000 美元 |
| |
| 财政年度支出:|
| +----------------------------+ |
| | 风云 | 年费 | |
| +----------------------------+ |
| | 2009 | 25,000 美元 | |
| | 2010 | 50,000 美元 | | -- YearlyCost[2],按添加行的规则计算  
| +----------------------------+ |
| | 添加会计年度 | |
| +-----------------+ |
| |
| 运行总额:$ 75,000 |
| 剩余:$ 25,000 |
+--------------------------------+

我遇到了麻烦,因为这两个预填充操作相互冲突,并且似乎正在创造一种竞争条件。我尝试在 ' 字段上设置规则SummaryCurrentFYSpend设置 's 的值FYSpending,然后在要设置的字段上设置YearlyCost默认值。当我保存表单时,我收到以下错误:YearlyCostValue: TotalCost - sum(YearlyCost)

表单代码中出现错误。对数据中的单个更新调用 Changed 事件的次数超过了最大限制。

(感谢 InfoPath 提供此类特定的错误消息!我需要支付多少费用才能获得触发事件或您尝试更新的对象的名称?)

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

  1. YearlyCost从前一个视图填充第一行CurrentFYSpend
  2. 允许覆盖第一行YearlyCost,并将随后添加的行的YearlyCost默认值填充为TotalCost - sum(YearlyCost)
4

2 回答 2

0

Jimmy Riche 在infopathdev.com 论坛上的另一种技术:

CurrentFYSpend有一个规则YearlyCost = .

RunningTotal有一个默认值sum(YearlyCost),在重新计算公式时更新。 Remaining有一个默认值TotalCost - RunningTotal,在重新计算公式时更新。

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

(Remaining) * (Remaining > 0),重新计算公式时更新。(巧妙的把戏,嗯?)

这很好用,虽然公式YearlyCost是,嗯,不明显。但是,我发现很多 XPath 都是这样的——您必须为在命令式语言中非常简单的事情找到不明显的解决方案。无论如何,这行得通,所以我正在实施它。

于 2009-10-22T21:19:53.987 回答
0

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

你有几个我能够查明的问题。首先是您在 YearlyCost 字段上选中了“重新计算公式结果时更新此值”复选框。它是一次性操作,因此您不想重新计算它。

第二个问题是公式本身。您的公式的结果 ../../../my:TotalCost - sum(.)../../../my:TotalCost - .
sum() 函数在这种情况下毫无意义。

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

在我进行这些更改后,表单按预期工作。

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

于 2009-10-20T18:43:13.100 回答