ライブ XFA SOM パス解決
EnableJavaScript を有効にした通常実行では、ノードレベルの resolveNode/resolveNodes、xfa.resolveNode/xfa.resolveNodes、FormCalc アクセッサのすべてに、同じライブフォームリゾルバが提供されます
解決はインスタンスの挿入・削除・移動の直後でも現在の繰り返し出現に追従し、成功したランタイムトランザクションは選択されたフィールドへの書き込みをネイティブのデータターゲットと保存済み XDP に永続化します
パスと出現
| パス | 選択結果 |
|---|---|
row[1].cell | 2 番目の行と、そこで選択されるセル |
row[*].cell | すべての行で選択されるセル |
$form.main.row.cell | 絶対パスによる 1 番目の行と 1 番目のセル |
row[-1].cell | 推論された出現の前の行 |
row[+1].cell | 推論された出現の後の行 |
main..cell[*] | 最初の子孫ブランチにある一致する兄弟セル |
main.* | ドキュメント順のすべての直接の子 |
main.#field[name='target'] | 名前プロパティの述語で選択されるフィールド |
main.#subform[*].#field | クラス名で照合し、各サブフォームの下で選択されるフィールド |
main.part\.name | ノード名にエスケープされたピリオドを含む JavaScript リゾルバパス |
インデックスを省略すると 1 つの出現が選択されます。絶対パスは出現 0 を使い、スコープ付きパスは構造に繰り返し兄弟がある場合、対応する祖先やコンテナのインデックスを借用します
インデックス推論は、ソースと宛先のノード名が異なっていても対応する階層レベルに追従します。クラスセレクタは対応するクラス出現インデックスを借用します
単一出現のターゲットは、呼び出し側がインデックスを指定しなくても選択できます。推論した出現が見つからない場合は、別のスコープを黙って選ぶのではなく、空リストや null を返します
相対インデックスは装飾なしの推論出現からのオフセットで、絶対パスでは無効です。FormCalc のインデックス式なら実行時に出現を計算できます
名前のないコンテナは名前付き子の検索に対して透過です。親による限定や rawValue、name、className、index、presence、access といったサポート対象プロパティが利用でき、スクリプトオブジェクトのレキシカルエクスポートも FormCalc パス経由で解決・代入できます
条件
const rows = xfa.resolveNodes("main.row[*].(Number(this.cell.rawValue)>15)");
const selected = xfa.resolveNodes("main.row[*].[cell ge 20].cell");
target = Sum($.resolveNodes("row.[cell ge 20].cell"))
row[1].cell = 25
var p = Ref(row[1].cell)
p = 30
JavaScript の述語は .(expression) を使い、候補を this として実行します。FormCalc の述語は .[expression] を使い、その候補を基準に相対フィールドを解決します
述語は [*] を省略しても一致する兄弟を選択します。JavaScript の述語は候補スコープ内の素のフィールド名も解決します。FormCalc ソース中の述語パスは、引用符付きリゾルバ文字列として渡す必要があります
子孫検索は、残りのパス要素を満たすブランチをドキュメント順に探します。接尾辞が一致しないブランチがあっても、後続の完全一致が隠されることはありません
出現インデックスは一致した兄弟グループ内でローカルです。範囲外のインデックスはその子孫検索を終了させるため、最初の行にセルが 1 つしかない場合、main..cell[1] が別の行のセルを選ぶことはありません
先行するワイルドカードは選択されたコンテキストごとに子孫検索を独立に評価し、絶対ルート直後のワイルドカードはルートの子を選択します
JavaScript の述語は現在のイベントの xfa と event オブジェクトを受け取ります。候補相対の参照、述語の例外、ネイティブ書き込みは外側のトランザクションを共有します
ネストした Eval は述語の候補を引き継ぎ、分離された計算変数と関数を使います。ネイティブコンパイル応答とトランザクションリプレイは外側のイベントと共有します
Exists(missing) や存在しないインデックス出現へのアクセッサは、Exists 経由では 0 を返します。未解決の FormCalc オブジェクトを普通に使うとエラーになります
予算と移行
パスは最大 128 要素、65,536 UTF-16 コードユニットまでです。インデックスは安全な整数である必要があり、走査、述語、動的コンパイル、インスタンス操作はイベント実行予算を共有します
パーサーエラー、述語の例外、予算超過はイベントを中断し、TXFAWidgetRuntime がネイティブのフィールド値、出現順序、スクリプト状態を復元します
以前の通常 resolveNodes は省略されたインデックスをすべての繰り返し祖先に展開していました。すべての行とセルを意図する場合は main.row.cell[*] を main.row[*].cell[*] に置き換えてください
対応範囲
リゾルバはイベントバインディングが供給するライブフォームオブジェクト、つまりフィールド、サブフォーム、ドロー、除外グループ、エリア、スクリプトオブジェクト、$data と $record から参照できるネイティブ Data DOM、そして実効属性を持つ宣言済みテンプレートプロパティノードを対象に動作します
リゾルバ文字列は JavaScript の名前エスケープに対応します。FormCalc ソースの識別子はコンパイラの識別子文法に従います
関連 API
HPDFXFACompileFormCalcEvent、HPDFXFAExecuteJavaScriptEvent、動的 Eval、FormCalc リファレンス、インタラクティブ XFA ランタイム