動的 FormCalc Eval

Eval(source) は、動的に供給された計算をネイティブ FormCalc コンパイラーでコンパイルし、EnableJavaScript が有効なときに汎用イベントホストを通じて実行します

ソースには、式、条件分岐、ループ、変数宣言、ローカル宣言された関数、フィールドの変更を含められます。最後の式が結果となり、組み込み名は大文字小文字を区別しません

var source = "target + other"
target = Eval(source)
target = Eval("var n=2 for i=1 upto 4 do n=n*i endfor n")

スコープとオブジェクト

Ref と参照代入は評価される計算の中でも使え、呼び出し元イベントと同じ明示ハンドルおよび通常の値コピー規則に従います

評価される計算ごとに、独自の変数と関数を持ちます。呼び出し元の計算が宣言した変数や関数を読むことはできません

現在のフィールド、相対フォームオブジェクト、$form、$host、$event は引き続き利用できます。Eval(null) は null を返し、その他のスカラー引数はソーステキストになります

SOM 述語の中では、候補が現在のフィールドまたはサブフォームコンテキストを供給し、ネストした Eval がそのコンテキストを継承します

たとえば、secret という名前のフォームオブジェクトがなければ var secret=9 Eval("secret+1") は失敗し、一方 Eval("var secret=2 secret+1") は 3 を返します

トランザクションとリプレイ

ソースの最初の使用時には実行が一時停止し、ネイティブコンパイラーが JavaScript を生成できるようにします。ホストはイベント前のスクリプト状態を復元し、コンパイル済み応答を供給して、計算を再試行します

記録されたトランスポート応答とロケール応答は再試行中に消費されるため、ネストしたコンパイルが外部トランスポートコールバックを繰り返すことはありません

スクリプトジャーナルに入るのは最終的に成功した評価だけです。構文エラー、ランタイムエラー、予算失敗では、ランタイムトランザクションを通じてフィールド値、インスタンス状態、スクリプト状態が復元されます

Eval は、実際の計算フィールドやバリデーションスクリプトの中でも動作します。SaveToBytes はコミット済みドキュメント値を保持します

予算

各イベントは、異なる動的ソース 64 個、ネストした Eval 呼び出し 8 回、動的ソースとコンパイル済み応答バイトの合計 2 MiB までを許します。これらの上限は、設定されたスクリプト入力、操作、メモリ、スタック、ジャーナル、経過時間の各上限と並んで適用されます

設定されたスタック上限や経過時間上限は、専用のネスト上限やリクエスト上限より先に失敗することがあります。コンパイルの再試行はイベントのデッドラインを共有します

カスタム JavaScript エバリュエーターは、ネイティブ動的コンパイル要求に応答できません。同梱の QuickJS 実行パスを使ってください

関連 API

HPDFXFACompileFormCalcEvent、HPDFXFAExecuteJavaScriptEvent、FormCalc 関数、インタラクティブ XFA ランタイム