XFA 查询节点集合
JavaScript 与 FormCalc 事件可以检视作用域内的节点 occurrence,并跨运行时事件保留独立的查询列表
const siblings = xfa.record.amount.all;
const retained = siblings.clone();
retained.remove(retained.item(0));
retained.insert(siblings.item(0), null);
retained.item(0).rawValue = "42";
Occurrence 属性
node.all 返回新的有序查询列表,包含作用域内同字面名称的节点;未命名节点改用其类名
node.classAll 返回新的有序查询列表,包含作用域内同类的节点,其他名称的节点也包括
node.index 与 node.classIndex 返回各自作用域内从零开始的 occurrence 序号
未命名的非属性容器对具名作用域查找是透明的,包括正负相对 SOM occurrence;属性容器保留自己的作用域
#field、* 和 Unicode 名称这类字面名称按编写名称被这些属性匹配
独立列表操作
| 成员 | 行为 |
|---|---|
length | 当前列表条目数 |
item(index) | 被引用节点,负数、非整数或越界索引返回 null |
namedItem(name) | 第一个该字面名称的被引用节点,无匹配时为 null |
clone() | 新的独立条目存储,引用同样的节点 |
append(node) | 在末尾添加同一存活节点引用,重复引用也可以 |
insert(node, before) | 在第一个匹配引用之前插入存活节点引用;null 等价于追加 |
remove(node) | 移除第一个匹配引用;引用不存在时抛出错误 |
resolveNodes、all 和 classAll 返回的列表使用独立条目存储;改动该存储不动表单与数据树,而写被引用的节点改的是真实节点
表单与属性的 node.nodes 集合暴露存活子视图;其 clone() 方法返回独立查询列表,见XFA 存活子集合
Data DOM 的 node.nodes 也提供独立的 clone();其既有的 append、insert、remove 方法保留原生结构行为,见事务化 XFA Data DOM 结构
数组迭代、索引读取和枚举暴露被引用节点;直接赋值、删除、属性重定义、原型变更和阻止扩展都会在改动查询列表之前抛出错误
持久化与稳定身份
脚本对象可以跨事件保留查询列表或克隆;每个操作使用当前事件解析器和事务限制
查询到的 instance manager 句柄在跨事件保留或克隆时把操作路由到当前事件图
重命名或重排存活节点会保留其留存列表身份;移除重复表单实例后,经该被移除引用的读写会失败,而不是改选替换实例
独立列表可以克隆其存储的引用,并移除先前留存的已移除节点引用,而无需解引用该节点
查询列表存储属于运行时脚本状态;保存 XDP 持久化原生节点值与结构,新的运行时开启新的脚本对象会话
事务与限制
非法节点与成员引用在该列表操作改动存储之前失败;被捕获的错误让同一事件中先前合法的操作保持可用
未捕获的事件错误、操作预算或超时失败会一并恢复查询列表变更、原生值、重复实例、留存脚本对象状态和 journal 状态,同一运行时可以重试
TXFAFormScriptLimits.MaxArrayItems 约束每个留存列表长度,并单独约束一次事件内累计的列表对象与新建条目;设为零时使用事件上下文默认值 65,536
空克隆消耗对象预算,非空克隆还消耗条目预算,留存列表在多次独立成功事件间保持有界
FormCalc 与 PDF 消费
output = Concat(Sum(xfa.datasets.data.main.amount.all), ":",
xfa.datasets.data.main.amount.all.length, ":",
xfa.datasets.data.main.amount[1].classIndex)
FormCalc 对字面 xfa.form、xfa.datasets 和 xfa.record 路径的 occurrence 选择使用原生 SOM 解析;集合属性之后的列表索引对该集合索引
把运行时字节保存为 XDP 并交给 HPDFXFAWriteHeadlessPDF,即可从提交的值生成真实的原生字段与外观,包括经留存的存活重复实例引用做出的编辑
TXFAHeadlessPDFOptions.Editable = False 创建带外观的只读原生字段,而不是压平它们
覆盖范围
本接口提供独立查询列表和 occurrence 元数据;通用 template/表单节点创建与克隆、更多节点类脚本、schema 校验和外部媒体仍是独立工作