Infopath Repeating Tableで合計されたフィールドを事前に入力する方法
質問
ブラウザで使用することを意図したいくつかのビューを持つInfopath 2007フォームがあります。特定の値から始めて、フォーミュラ由来のデフォルト値を使用して、繰り返しテーブルでフィールドを事前に住むのに問題があります。
に Summary
見て、プロジェクトをお願いします TotalCost
そして現在の会計年度の予測支出(CurrentFYSpend
):
+------------------------------+ | Project Summary | +------------------------------+ | Total Cost: $100,000 | -- TotalCost | Current FY Spend: $ 25,000 | -- CurrentFYSpend +------------------------------+次の(
Detail
)表示、繰り返しテーブルがあります FYSpending
ユーザーがプロジェクトを発生させる必要がある場所 TotalCost
任意の数の会計年度にわたって。 FYSpending
テーブルには YearlyCost
その年の推定支出を保持するフィールド。私が持っている繰り返し表の下に RunningTotal
と Remaining
田畑。 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、そのような特定のエラーメッセージについてありがとう!イベントを起動したオブジェクトの名前を取得するために、または更新しようとしたオブジェクトの名前を取得するためにいくら支払う必要がありますか?)
とにかく、誰かがこれを達成するためのテクニックを説明できますか?要約すれば、
- 最初の行を入力します
YearlyCost
前のビューからCurrentFYSpend
- 最初の行をオーバーライドすることを許可します
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の根底にあるものに細心の注意を払う必要があると思います。