TXFAFormStructure

HPDFXFAFormStructure 為以 template 為基礎的表單 instance 提供原生的準備與身分映射

該類別借用其 TXFADocument,擁有自己的結構圖與分離候選,從不釋放借用的文件

constructor Create(Document: TXFADocument;
  const Limits: TXFADataStructureLimits;
  const OnTick: TXFADataStructureTick);
procedure BeginOperation(const OnTick: TXFADataStructureTick);
procedure EndOperation;
function PrepareUnboundModel: TXFANode;
function EnsureInstance(Definition, DataNode: TXFANode): TXFANode;
function PrepareMaterialization(Definition, Instance: TXFANode;
  out Aliases: TXFAFormStructureAliases): TXFANode;
function ReplaceInstance(Instance, Prepared: TXFANode): TXFANode;
procedure DiscardPrepared(Node: TXFANode);
property Graph: TXFADataStructure;

操作作用域

結構性工作之前呼叫 BeginOperation,並在 finally 區塊中呼叫 EndOperation

提供的 callback 會在設限走訪、複製與圖預檢全程被呼叫,可以拋出例外取消操作

Graph.DetachedRoots 暴露圖的擁有集合供觀察與協同快照還原;呼叫端不得自行釋放仍歸該集合所有的節點

準備與接納

PrepareMaterialization 從 template 定義與一個選用的既有 instance 組合出分離的表單候選,並在 TXFAFormStructureAliases 中回傳來源到候選的配對

TXFAFormStructureAlias.Source 與 Target 是借用的節點參照,用於在釋放先前 instance 之前重映射外部身分

ReplaceInstance 接納準備好的候選,並把先前 instance 作為分離的圖自有節點回傳

對回傳的先前 instance 呼叫 DiscardPrepared 之前,請先重定向依賴參照

DiscardPrepared 釋放同一圖擁有的分離候選,不會移除已附著的存活 instance

初始 instance 與稀疏 instance

PrepareUnboundModel 為空合併回傳分離的表單模型,保留撰寫的 template 內容,並把受支援的 subform occurrence 展開成獨立的原生節點

EnsureInstance 回傳既有的存活表單節點,或為 template 定義及其存活資料上下文建構所需的稀疏 instance 路徑

EnsureInstance 可能更動多個存活節點,因此複合操作的 rollback 屬於呼叫端外圍的文件交易

TXFAWidgetRuntime 為公開腳本事件提供該交易,包含原生文件與分離身分的還原

輔助函式

函式用途
HPDFXFAEmptyMergeCount驗證 occurrence 宣告並回傳其空合併計數,使用明確 initial 或最小值
HPDFXFAIsMaterializedFormNode在明確走訪預算下檢查帶命名空間限定的物化標記
HPDFXFAResolveMaterializedDefinition為定義與資料上下文解析生效的表單節點,並回報物化模型是否權威
HPDFXFAResolveActualFormScope解析實際重複表單 instance 的存活資料作用域,而不重複其 template 宣告

儲存的標記使用 urn:hotpdf:xfa:form-structure:1 與防衝突前綴,而原生 form 節點使用 XFA form 命名空間

獨立的原生呼叫端必須在類別生命週期內保留文件,並在取消或其他失敗需要還原先前成功步驟時,為複合圖操作提供 rollback