Infopath Repeating Tableで合計されたフィールドを事前に入力する方法

StackOverflow https://stackoverflow.com/questions/1590703

  •  22-09-2019
  •  | 
  •  

質問

ブラウザで使用することを意図したいくつかのビューを持つInfopath 2007フォームがあります。特定の値から始めて、フォーミュラ由来のデフォルト値を使用して、繰り返しテーブルでフィールドを事前に住むのに問題があります。

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);彼らは一緒に、合計のどれだけがすでに説明されているか、そして彼らがまだ会計年度の列に侵入する必要があるかをユーザーに示します。

最初に入るとき 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   |
+--------------------------------+

2つの事前に予備的なアクションが互いに競合し、人種状態を作成しているように見えるため、私は問題を抱えています。私はのルールを設定しようとしました Summary's CurrentFYSpend の値を設定するフィールド FYSpending's YearlyCost, 、次に、デフォルト値をの設定します YearlyCost 設定するフィールド Value: TotalCost - sum(YearlyCost). 。フォームを保存すると、次のエラーが表示されます。

フォームのコードでエラーが発生しました。データの1つの更新の変更イベントへの呼び出し数は、最大制限を超えました。

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

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

  1. 最初の行を入力します YearlyCost 前のビューから CurrentFYSpend
  2. 最初の行をオーバーライドすることを許可します YearlyCost, 、そして、その後に添加された行を入力します」 YearlyCost デフォルト値に TotalCost - sum(YearlyCost)
役に立ちましたか?

解決 2

そして、ジミー・リッチの別のテクニック infopathdev.comフォーラム:

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

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

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

(Remaining) * (Remaining > 0), いいえ フォーミュラが繰り返されたときに更新されます。 (きちんとしたトリック、ハァッ?)

これはうまく機能しますが、フォーミュラです YearlyCost ええと、非自明です。しかし、私はXpathの多くがそのようなものであることがわかっています - あなたは命令的な言語で単純に死んでいるものに対する非明確な解決策を見つけなければなりません。とにかく、これはうまくいくので、私はそれを実装しています。

他のヒント

わかりました、私はから答えを得ました アレック・ポジダエフ, 、インフォパスの専門家は誰ですか。彼は言う:

私が特定することができたいくつかの問題があります。 1つ目は、「式の結果が再計算された場合にこの値を更新する」チェックボックスをチェックしたことです。その一度の操作があるので、あなたはそれを再計算したくありません。

2番目の問題は式自体です。フォーミュラの結果 ../../../my:TotalCost - sum(.) まったく同じです ../../../my:TotalCost - .
sum()関数は、その文脈で意味がありません。

私があなたの意図を理解している場合、正しい式は次のとおりです。../../../my:TotalCost - sum(../../my:FY/my:YearlyCost)

これらの変更を加えた後、フォームは望ましいとおりに機能しました。

sum(.) 式で自動的に生成されました。 XPath式を書くのではなく、ポイントアンドクリックを通してフォーミュラを作成しました。追加したとき sum() 関数と選択 YearlyCost フィールド、フォーミュラエディターが交換されました YearlyCost とともに . 私はそれが何をしているのか知っていると思ったので、私はそれを放った。 Xpathの根底にあるものに細心の注意を払う必要があると思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top