2009-10-19 141 views
0

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

Summary观点,我问一个项目的TotalCost和当前财年的预计支出(CurrentFYSpend):

 
+------------------------------+ 
| Project Summary    | 
+------------------------------+ 
| Total Cost:  $100,000 | -- TotalCost 
| Current FY Spend: $ 25,000 | -- CurrentFYSpend 
+------------------------------+ 
在下一个( Detail)来看,我有一个重复表 FYSpending当用户需要打出来的项目的 TotalCost超过任意数量的会计年度。 FYSpending表有一个 YearlyCost字段,该字段包含当年的估计支出。在重复表下我有 RunningTotalRemaining字段。 RunningTotal的默认值为 sum(YearlyCost); Remaining的默认值为 TotalCost - sum(YearlyCost);它们一起向用户显示已经占用了多少,还有多少还需要进入财政年度。
 
+--------------------------------+ 
| 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) 
+--------------------------------+ 

当用户添加了一个新的财政年度行,我想:

当我们第一次进入Detail来看,FYSpending重复表格的第一行的YearlyCost领域应与CurrentFYSpend值填充新行的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 | 
+--------------------------------+ 

我有麻烦,因为两个预先填充彼此并出现牛逼的动作冲突o创造竞争条件。我试图在SummaryCurrentFYSpend字段上设置规则来设置值FYSpendingYearlyCost,然后在YearlyCost字段上设置默认值以设置Value: TotalCost - sum(YearlyCost)。当我保存表单,我收到以下错误:

An error occurred in the form's code. The number of calls to the Changed event for a single update in the data exceeded the maximum limit.

(感谢,InfoPath中,这种特定的错误消息多少钱,我需要付费才能获取触发事件的对象的名称,或你试图更新?)

无论如何,任何人都可以描述一种技术来完成这个?综上所述,

  1. 填充第一行的YearlyCost从之前的CurrentFYSpend
  2. 允许覆盖第一排的YearlyCost,并填充随后添加的行YearlyCost默认值TotalCost - sum(YearlyCost)

回答

0

而在上infopathdev.com forums从麦Riche的另一种技术:

CurrentFYSpend具有规则,设置YearlyCost = .

RunningTotal具有sum(YearlyCost)一个默认值,当公式recalc'd更新。 Remaining的默认值为TotalCost - RunningTotal,在重新计算公式时更新。

最后,在重复表的YearlyCost字段具有

(Remaining) * (Remaining > 0)一个默认值,当公式recalc'd不更新。 (整洁的把戏,呵呵?)

这很好用,虽然YearlyCost的公式是这个,不明显。但是,我发现许多XPath就是这样 - 你必须找到非常明显的解决方案来解决那些在命令式语言中很简单的问题。无论如何,这个工作,所以我正在实施它。

0

OK,我来自Alec Pojidaev的回答,谁是InfoPath专家。他说:

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

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

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

后,我做了这些变化,形式所需的工作。

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