XFA フォームツリーの作成と編集
TXFAWidgetRuntime は、xfa.form とノードコレクションを通じて、生きているフォームツリーの、トランザクション的な JavaScript 作成、クローン、編集をサポートします
生きているフォームツリーは独立したネイティブ ID を持ち、記述されたテンプレートを変更せずに、XDP フォームパケットとして保存できます
フィールドの作成と挿入
var row = xfa.resolveNode("row[1]");
var field = xfa.form.createNode("field", "additional");
row.nodes.append(field);
field.w = "160pt";
field.h = "24pt";
field.ui.getElement("textEdit");
field.font.typeface = "DejaVu Sans";
field.rawValue = "Additional value";
createNode(className, name, namespaceURI) は分離ノードを返します。オプション引数を省略したときは、空の名前とモデル名前空間が使われます
受け付けられるクラスには、field、subform、draw、area、exclGroup、ランタイムプロパティスキーマが認識するプロパティクラスがあります
ノードを作成しても、必要な UI と値のプロパティ付きで取り付けられるまで、フォームへ挿入されず、可視ウィジェットも作られません
コレクション操作とクローン
| 操作 | 動作 |
|---|---|
parent.nodes.append(node) | 分離または取り付け済みのノードを、親の生きている子コレクションの末尾へ移動します |
parent.nodes.insert(node, before) | ノードを、同じ親の既存の子の直前に移動します |
parent.nodes.remove(node) | 子を分離し、後の再利用のためにスクリプト ID を保持します |
node.clone(true) | 別のネイティブ・スクリプト ID を持つ、分離されたディープクローンを返します |
node.clone(false) | 子ノードもコピーされたフィールド値も持たない、分離されたシャロークローンを返します |
コレクション順、parent、プロパティ検索、サポートされる SOM 解決は、イベント内で成功した編集を即座に反映します
スクリプトオブジェクトが保持する参照は、コミットされた編集やイベントロールバックの後も、自身のノードを指し続けます。分離されたディープ・シャロークローンも含みます
サイクル、別の親からの参照子、フォーム操作に渡されたデータモデルノードは、その無効な操作がツリーを変更する前に例外を送出します
フォームモデルのルートは、新しく作成された subform とフィールドを含められますが、モデルルート自体は移動もクローンもできません
繰り返しスコープと初期インスタンス
実際のフォームインスタンスは、記述された名前が等しくても、データコンテキストが異なっても、datasets パケットが存在しなくても、別個の ID を保持します
空マージは明示的な occur.initial 数を使い、initial がなければ occur.min を使い、max がなければデフォルトで min を使います
空マージでは、最小値と最大値の外の初期数が許可されます。初期コピーがゼロも含みます
ネストした名前なし subform は自身の出現パスを保持し、これらのインスタンスの実体化は datasets パケットを合成しません
これらの出現規則は XML Forms Architecture 3.3(印刷ページ 339〜345)に従います
コミット、ロールバック、出力
成功したイベントは構造ジャーナルを適用し、ネイティブウィジェットを再構築し、編集されたフォームを SaveToBytes と自動ネイティブ PDF 作成に利用可能にします
捕捉されないスクリプト例外、ネイティブコミットの失敗、超過したイベント予算は、元のドキュメント、ウィジェット ID、保持されたスクリプト状態を復元します。後のイベントが再試行できます
既存の操作・ノード・深さ・バイト・ウィジェット・経過時間の各予算は、構造準備とコミットにも適用されます
保存されたフォームインスタンスは再ロードでき、HPDFXFAWriteHeadlessPDF に渡すと、供給されたフォントバイトで実際の PDF フィールドと外観ストリームを作成します
スコープ
これらの API は、生きているフォームモデルとそのサポートされるプロパティスキーマを編集します
一般的な xfa.template 編集、完全な選択サブフォームセット処理、完全な XFA クラススキーマ、任意のバインディングセレクタの組み合わせは別の機能です