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