0

ブラウザで使用することを目的とした、いくつかのビューを含むInfopath2007フォームがあります。指定された値から始めて、数式から派生したデフォルト値を使用して、繰り返しテーブルのフィールドに事前入力するのに問題があります。

その観点から、プロジェクトと今年度の予想支出額()Summaryをお願いします。TotalCostCurrentFYSpend

+ ------------------------------ +
| プロジェクトの概要|
+ ------------------------------ +
| 総費用:$ 100,000 |  -  総費用
| 現在の会計支出:25,000ドル| --CurrentFYSpend
+ ------------------------------ +
次の( )ビューでは、ユーザーが任意の会計年度にわたってプロジェクトを分割する必要が Detailある繰り返しテーブルがあります。テーブルには、その年の推定支出を保持するフィールドがあります。繰り返しテーブルの下に、フィールドがあります。デフォルト値は;です。デフォルト値は;です。一緒にそれらは、合計のどれだけがすでに説明されているか、そして彼らがまだ会計年度の行に分割する必要がある量をユーザーに示します。FYSpendingTotalCostFYSpendingYearlyCostRunningTotalRemainingRunningTotalsum(YearlyCost)RemainingTotalCost - sum(YearlyCost)

Detail最初にビューに入るとき、繰り返しテーブルYearlyCostの最初の行のフィールドに次の値が入力されている必要があります。FYSpendingCurrentFYSpend

+ -------------------------------- +
| プロジェクトの詳細|
+ -------------------------------- +
| 総費用:$ 100,000 | <-TotalCost
| |
| 会計年度の支出:|
| + --------------------------- + | <-FYSpending繰り返し表
| | 年度| 年間費用|
| + --------------------------- + | <-FYSpending繰り返し表
| | 2009年| $ 25,000 | | <-YearlyCost [1]、SummaryCurrentFYSpendから
| + --------------------------- + |
| | 会計年度を追加| |
| + ----------------- + |
| |
| 累計:$ 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 |
+ -------------------------------- +

2つの事前入力アクションが互いに競合し、競合状態を引き起こしているように見えるため、問題が発生しています。Summary'sCurrentFYSpendフィールドにルールを設定して'sの値を設定してから、フィールドにデフォルト値を設定して設定しようとFYSpendingしましYearlyCostた。フォームを保存すると、次のエラーが発生します。YearlyCostValue: TotalCost - sum(YearlyCost)

フォームのコードでエラーが発生しました。データの1回の更新に対するChangedイベントの呼び出し数が、最大制限を超えました。

(InfoPath、このような特定のエラーメッセージをありがとう!イベントを発生させたオブジェクト、または更新しようとしたオブジェクトの名前を取得するには、いくら支払う必要がありますか?)

とにかく、誰かがこれを達成するためのテクニックを説明できますか?要約すれば、

  1. YearlyCost前のビューの最初の行にデータを入力しますCurrentFYSpend
  2. 最初の行のオーバーライドを許可し、YearlyCostその後に追加される行のYearlyCostデフォルト値をTotalCost - sum(YearlyCost)
4

2 に答える 2

0

OK、InfoPathのエキスパートであるAlecPojidaevから回答を得ました。彼は言う:

あなたは私が特定することができたいくつかの問題を抱えています。1つ目は、YearlyCostフィールドの[数式の結果が再計算されたときにこの値を更新する]チェックボックスをオンにしたことです。1回限りの操作なので、再計算したくありません。

2番目の問題は数式自体です。数式の結果は、 sum()関数がそのコンテキストで意味をなさないのと../../../my:TotalCost - sum(.)まったく同じです。../../../my:TotalCost - .

私があなたの意図を正しく理解しているなら、正しい式は次のようになります: ../../../my:TotalCost - sum(../../my:FY/my:YearlyCost)

これらの変更を行った後、フォームは希望どおりに機能しました。

数式のsum(.)は自動的に生成されました。XPath式を作成するのではなく、ポイントアンドクリックで数式を作成しました。sum()関数を追加してYearlyCostフィールドを選択すると、数式エディターがYearlyCost.それが何をしているのかを知っていると思ったので、そのままにしておきました。基になるXPathが生成されていることに細心の注意を払う必要があるようです。

于 2009-10-20T18:43:13.100 に答える
0

そして、 infopathdev.comフォーラムのJimmy Richeによる別のテクニック:

CurrentFYSpendを設定するルールがありますYearlyCost = .

RunningTotalデフォルト値はsum(YearlyCost)、数式が再計算されたときに更新されます。 Remainingデフォルト値はTotalCost - RunningTotal、数式が再計算されたときに更新されます。

最後にYearlyCost、繰り返しテーブルのフィールドのデフォルト値は

(Remaining) * (Remaining > 0)、数式が再計算されたときに更新されません。(きちんとしたトリック、ハァッ?)

これはうまく機能しますが、の式YearlyCostは、ええと、自明ではありません。しかし、私は多くのXPathがそのようなものであることに気づいています。命令型言語では非常に単純なものに対する非自明な解決策を見つける必要があります。とにかく、これはうまくいくので、私はそれを実装しています。

于 2009-10-22T21:19:53.987 に答える