TXFAFormStructure

HPDFXFAFormStructure 为基于 template 的表单实例提供原生的准备与身份映射

该类借用其 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

提供的回调会在设界遍历、复制和图预检全程被调用,可以抛异常取消操作

Graph.DetachedRoots 暴露图的拥有集合供观察和协同快照恢复;调用方不得自行释放仍归该集合所有的节点

准备与接纳

PrepareMaterialization 从 template 定义和一个可选的既有实例组合出分离的表单候选,并在 TXFAFormStructureAliases 中返回源到候选的配对

TXFAFormStructureAlias.Source 和 Target 是借用的节点引用,用于在释放先前实例之前重映射外部身份

ReplaceInstance 接纳准备好的候选,并把先前实例作为分离的图自有节点返回

对返回的先前实例调用 DiscardPrepared 之前,请先重定向依赖引用

DiscardPrepared 释放同一图拥有的分离候选,不会移除已附着的存活实例

初始实例与稀疏实例

PrepareUnboundModel 为空合并返回分离的表单模型,保留编写的 template 内容,并把受支持的 subform occurrence 展开成独立的原生节点

EnsureInstance 返回既有的存活表单节点,或为 template 定义及其存活数据上下文构造所需的稀疏实例路径

EnsureInstance 可能改动多个存活节点,因此复合操作的回滚属于调用方外围的文档事务

TXFAWidgetRuntime 为公开脚本事件提供该事务,包括原生文档与分离身份的恢复

辅助函数

函数用途
HPDFXFAEmptyMergeCount校验 occurrence 声明并返回其空合并计数,使用显式 initial 或最小值
HPDFXFAIsMaterializedFormNode在显式遍历预算下检查带命名空间限定的物化标记
HPDFXFAResolveMaterializedDefinition为定义和数据上下文解析生效的表单节点,并报告物化模型是否权威
HPDFXFAResolveActualFormScope解析实际重复表单实例的存活数据作用域,而不重复其 template 声明

保存的标记使用 urn:hotpdf:xfa:form-structure:1 和防冲突前缀,而原生 form 节点使用 XFA form 命名空间

独立的原生调用方必须在类生命周期内保留文档,并在取消或其他失败需要恢复先前成功步骤时,为复合图操作提供回滚