TXFADataStructure Class
HPDFXFADataStructure で宣言される TXFADataStructure は、既存のネイティブ XFA ノードツリーに対する上限付きの構造編集を維持し、グラフを通じて作成・クローン・削除された、分離された要素ツリーを所有します
CreateDataNode は Data DOM 要素を扱い、CreateElement は TXFAFormStructure が使うモデル要素構築もサポートします
コンストラクタは Root を借り受け、返る前に既存ツリーを TXFADataStructureLimits に対して検証します。グラフは、借り受けたルートの所有者より前に破棄されなければなりません
すべての公開 AnsiString の名前、名前空間 URI、テキスト値は UTF-8 バイトを含みます
Graph := TXFADataStructure.Create(DatasetsRoot, Limits, OnTick);
try
Graph.BeginOperation(OnTick);
try
Node := Graph.CreateDataNode('dataValue', 'amount');
Graph.SetValue(Node, '42');
Graph.Append(RecordNode, Node);
finally
Graph.EndOperation;
end;
finally
Graph.Free;
end;
操作スコープ
BeginOperation(OnTick) はスコープを開始し、ネストしたスコープを拒否します。EndOperation は保存されたコールバックを解放し、クリーンアップ中でも安全です
コンストラクタは自身のプリフライトスコープを実行し、返る前にコンストラクタコールバックを解放します。後続のメソッドは新しいアクティブスコープを要求します
OnTick は、TXFADataStructureTick 型の Delphi 匿名プロシージャか FPC ネストプロシージャです。呼び出し側の期限や操作カウンタを強制するために例外を送出して作業をキャンセルできます
メソッドは、最終キャンセル検査と構造変更の前に、割り当て、所有容量、必要な名前空間宣言を準備します。個々の編集が拒否されても、既存のドキュメントグラフは保持されます
直接グラフ呼び出しの連続的な成功は、後の呼び出しが失敗しても自動的にはロールバックされません。スクリプティングランタイムが完全なイベントトランザクションを供給し、ドキュメント、分離グラフ、スクリプト ID、字句状態、ジャーナルを一緒に復元します
作成とクローン
CreateDataNode(ClassName, Name, NamespaceURI = '') は dataGroup か dataValue を受け付け、新しい分離要素を作成し、明示的なデータノードクラスメタデータを記録します
CreateElement(ClassName, Name, NamespaceURI) は、XML ローカル名が ClassName の分離モデル要素を作成します。オプションの XFA name 属性と、明示的なデフォルト名前空間宣言が伴います
CreateElement は、XML 構文、スカラー値、予約済み名前空間 URI、グラフ容量を検証します。より高レベルのフォームファクトリが、サポートされる XFA クラススキーマを検証します
Name は、XML ローカル名か、空でない接頭辞が供給された空でない名前空間 URI を持つ修飾名であって構いません。予約済みの xml・xmlns バインディングは検証されます
空の名前は、分離構築ステップでは許可されます。取り付けの前に Rename で有効な名前を設定してください
Clone(Node, Recursive = True) は、新しいネイティブ ID を持つ分離コピーを作成します。浅いコピーは、要素自身の値、属性、名前空間宣言を保持しつつ子ノードを除外します
継承された名前空間宣言は、クローンや移動の前に実体化されるため、接頭辞付き属性は以前の祖先スコープの外でも元の名前空間を保持します
所有編集
Append(Parent, Node) は同じノードを親の順序付き子の末尾へ移動します。InsertBefore(Parent, Node, Before) は既存の直接の子の前に移動し、Before = nil は append と等価です
Remove(Parent, Node) は既存の直接の子を分離し、その所有権をグラフへ移します。オブジェクト、子孫、ネイティブ ID は、グラフ破棄または分離スナップショット復元まで有効です
外部グラフ、サイクル、借り受けたルートの移動、名前なし取り付け、無効な兄弟参照、ノード・深さ・バイトのオーバーフローは EHPDFXFAError を送出します
値と名前の編集
Rename(Node, Name) は、接頭辞、名前空間 URI、位置、子孫、ネイティブ ID を保持したまま、要素のローカル XML 名を変更します。取り付けられた要素は、空でない有効な XML 名を要求します
SetValue(Node, Value) は、UTF-8 と XML のスカラー値を検証し、通常のテキスト子を置き換え、コメントと処理命令を保持します。空のテキストは通常のテキスト子を削除します
SetAttribute(Node, Name, Value) は、修飾名構文、UTF-8 値、投影バイト予算を検証した後に属性を追加または置き換えます。空の値は明示的な空属性のままです
SetNamespace(Node, NamespaceURI) は要素の展開名前空間を変更し、現在の接頭辞の宣言を更新します。予約済みバインディングを検証します
DeclareNamespace(Node, Prefix, NamespaceURI) は、要素の展開名を変えずに名前空間宣言を追加または置き換えます。要素自身の接頭辞に対する競合する宣言は拒否します
直接グラフの呼び出し側は、接頭辞付き属性を名前空間宣言と調整し、複合編集を自身のロールバックトランザクション内に保ちます
バイト・ノード予算には、要素の合計値と、実際に所有するテキストノードが含まれ、テキストの 1 表現だけを課金するのではありません
XML インポートプリフライト
ValidateImport(Node, Incoming, Overwrite, OnTick) は、呼び出し側が所有する入力 XML 子のリストをインポートする前に、投影されたグラフ合計を検査します
Overwrite が true のとき、投影サイズは、ターゲットの置換される子と合計値を除外します。そうでなければ既存の子が予算に残ります
このメソッドは入力リストとドキュメントを変更せず、アクティブなスコープがないときにだけ一時的な操作スコープを作成します
分離スナップショット
CaptureDetached は、テキスト、CDATA、コメント、処理命令、属性、名前空間宣言を含む、すべての分離ルートと子孫の値スナップショットを返します
RestoreDetached(Snapshot) は、所有権を入れ替える前に、置換用の分離フォレストを検証・準備します。返されるノード配列はスナップショット順に従い、呼び出し側の再マッピング用の新しいネイティブ ID を含みます
レコードフィールドと ID 規則については TXFADataStructureSnapshot を参照してください
検査
Root は借り受けたルートを、DetachedRoots はグラフ所有のルートを検査用に公開します。所有と予算を一貫させるため、変更にはグラフメソッドを使ってください
トランザクション的な Data DOM スクリプティング · トランザクション的なフォームツリースクリプティング · TXFANode