XFA JavaScript イベントスコープ
ユニット: HPDFXFAEventScript、HPDFXFARuntime 経由で統合
名前付きエイリアスとローカル宣言
イベントホストは、対象となる名前付きフォームノードを外側のイベントスコープへ解決します。input がアクセス可能な名前付きフィールドなら、イベントは引き続き input.rawValue を使えます
ユーザーイベント本体は独自の JavaScript 関数スコープを持つため、const、let、class 宣言がホスト生成の変数宣言と衝突せずにフィールドエイリアスをシャドーできます
const input = xfa.resolveNode("main.input");
input.rawValue = "saved";
ローカルの var と function 宣言も通常の JavaScript スコープ規則に従います。明示的なローカルバインディングは外側のエイリアスをシャドーし、レキシカルバインディングは初期化前には使えません
ホスト予約名と無効な識別子は、自動フィールドエイリアスの対象から引き続き除外されます。それらの名前には xfa.resolveNode が明示的なルックアップを提供します
実行コンテキストと strict モード
イベント本体の this は実行中のフォームノードのままで、明示的な戻り値は引き続き calculate/validate の完了処理へ流れます
先頭の use strict ディレクティブは、ユーザー本体のディレクティブとして扱われるようになりました。未宣言変数への代入は、グローバルバインディングを作る代わりに例外を投げます
"use strict";
const local = "value";
xfa.resolveNode("main.input").rawValue = local;
トランザクションとライフタイム
構文エラー、TDZ(temporal dead zone)の ReferenceError、strict モードの ReferenceError はイベントを中止し、ランタイムエラー前に実行された書き込みを含めて、ネイティブ form/datasets スナップショットを復元します
成功したネイティブ書き込みは、保存済み XDP の再読み込みを越えて生き残ります。ローカルイベント変数はその呼び出しに属し、variables スクリプトオブジェクトは確立済みの永続レキシカル状態とクロージャー動作を保ちます
ネストしたスコープはホストトランスポート呼び出しを追加せず、スクリプト・メモリー・操作・リプレイの各予算も変えません
関連 API
HPDFXFAExecuteJavaScriptEvent、インタラクティブ XFA ランタイム、ネイティブ欠落プロパティ生成