HPDFXFAExecuteJavaScriptEvent

ユニット: HPDFXFAEventScript

宣言

function HPDFXFAExecuteJavaScriptEvent(const Script: AnsiString;
  const Bindings: TXFAEventBindings; SelfIndex: Integer;
  const Options: TXFAFormScriptOptions; out Actions: TXFAEventActions;
  out Operations: Integer; out Diagnostic: string;
  Session: TXFAJavaScriptSession= nil;
  HostTransaction: TXFAHostTransaction= nil;
  LocaleProvider: TXFALocaleDataProvider= nil;
  HostModel: PXFAHostModelState= nil): Boolean;

動作

ライブな仮想フォーム DOM に対してイベントを実行し、呼び出し元のドキュメントを変更せずに検証済みの変更レコードを返します

Bindings がホストコンテキストを供給し、SelfIndex が this を選択します。Options.EnableJavaScript は True でなければなりません

Script と生のバインディングテキストは UTF-8 バイトで、OS の ANSI コードページで解釈されるのではなく、JavaScript ソースと引用コンテキスト用に明示的にデコードされます。ギリシャ文字リテラル、補助スカラー、Unicode の行区切りは正確な値を保ちます

同梱の上限付き QuickJS エンジンか Options.JavaScriptEvaluator を使用し、スクリプト、コンテキスト、メモリ、スタック、割り込み、時間、操作、出力の各予算を設けます

エンジン実行と出力検証の両方が成功したときだけ True を返します。失敗した実行は Actions をクリアし、Diagnostic を報告します

TXFAWidgetRuntime は自身のスナップショットトランザクション内でアクションを検証・リプレイします。直接呼び出す側は同等のトランザクション処理を用意してください

ネイティブエンジンは再利用可能なイベントサポートコードをセッションエンジンごとに 1 回コンパイルし、呼び出しごとに現在のバインディングベクトル、イベント本体、上限、記録済みのホスト・ロケール・計算・XML 応答を供給します。別セッションと繰り返しのスクリプトオブジェクトは独立した状態を保ちます

サポートの初期化、イベント実行、サスペンション再試行、ロールバック再構築は元の経過時間期限を共有します。カスタムの JavaScriptEvaluator コールバックは完全なスタンドアロンラッパーを受け取ります

呼び出し間でスクリプトオブジェクトとレキシカル状態を保持するには、所有する TXFAJavaScriptSession を渡します。nil のセッションはその呼び出し専用の分離エンジンを作ります

明示的なアプリケーション効果のためには、所有する TXFAHostTransaction を渡します。サスペンション再試行はセッションのチェックポイントを復元し、完了済みリクエストを再実行せずに記録済み応答を消費します

下位レベルの呼び出し側は、ドキュメントの結果でホストトランザクションを確定させなければなりません。ホスト効果には同梱エンジンが必要で、JavaScriptEvaluator は使えません

LocaleProvider は読み取り専用のロケールメタデータを供給します。nil なら Windows のロケールデータを使い、TXFAWidgetRuntime はシステムフォールバック付きで現在のドキュメント localeSet を供給します

最も近い空でない Locale バインディングがアンビエントロケールを供給します。継承されたロケールが空なら現在のユーザーロケールが選ばれます

計算されたロケール名はネイティブ実行を中断し、セッションチェックポイントを復元して、記録済みメタデータで再試行します。コミット済みのリプレイはプロバイダを再呼び出しせずにそのメタデータを消費します

呼び出しごとに、名前付きロケールリクエストは最大 64 回、識別子あたり 256 UTF-16 コードユニット、ロケールメタデータは 2 MiB までで、スクリプトの経過時間期限を共有します。カスタムの JavaScriptEvaluator コールバックは、ネイティブ検索を要求せずに供給されたロケールデータを消費しなければなりません

HostModel はアプリケーションメタデータ、ページ、フラグ、タイトル、フォーカスの読み取り専用スナップショットを供給します。nil なら TXFAHostModelState.Default が使われ、返された host/focus/reset アクションは呼び出し側によるネイティブのトランザクション適用を必要とします

動的 FormCalc Eval はネイティブコンパイルのために中断し、同じ期限の中で記録済みコンパイル応答を使って再試行します。カスタムの JavaScriptEvaluator コールバックはこれらのリクエストを処理できません

ポインタは同期的に読まれ、保持も書き込みもされません。TXFAWidgetRuntime は現在の状態を渡し、ドキュメントのスナップショットトランザクション内で変更を適用します

実行中のバインディングの EventActivity が xfa.event.name を供給し、下位レベルのフォールバックとして event が使われます

ライブ SOM 解決はバインディング階層と現在の出現順序を使い、クラスセレクタ、子孫セレクタ、候補述語に対応します。インデックス省略時は推論または既定の出現を 1 つ選びます

Data DOM バインディングは datasets ツリーを構築し、DataIdentity 経由でフォーム値を接続し、データ書き込みと保持されたネイティブデータハンドルに対応します。直接呼び出す側は両ドメインと仮想識別子アクションをトランザクション的に適用します

Property DOM バインディングは宣言されたプロパティの子と Attributes/DefaultAttributes を公開します。直接呼び出す側は、プロパティの生値アクションと属性アクションを対応するネイティブフォーム出現に適用します

名前付きフィールドのエイリアスは外側のイベントスコープから見えます。イベント本体の中でのローカルな const、let、class、function、var 宣言は通常の JavaScript のレキシカル規則に従います

イベント本体は先頭の use strict ディレクティブ、フォームノードの this コンテキスト、明示的な戻り値を保持します。レキシカルや strict モードの失敗は同じネイティブトランザクションを棄却します

シャドーイングと永続化の動作はJavaScript イベントスコープを参照してください

関連 API

インタラクティブ動的 XFA ウィジェットランタイム、FormCalc 関数、XFA パケット DOM