事务化 XFA Data DOM 结构
JavaScript 事件可以创建、克隆、重命名、附着、重排和分离原生 Data DOM 元素,脚本立即可读,并在整个事务范围内原生持久化
const record = xfa.record;
const value = xfa.datasets.createNode("dataValue");
value.name = "amount";
value.value = "42";
record.nodes.append(value);
const retained = value.clone(false);
record.nodes.remove(value);
record.nodes.insert(value, record.nodes.item(0));
受支持的操作
xfa.datasets.createNode(className, name = "", namespace = "") 创建未附着的 dataGroup 或 dataValue;限定名要求非空命名空间 URI
node.clone(recursive = true) 创建带全新身份的未附着 Data DOM 副本;false 排除子节点,保留元素自身元数据和值
node.name 对 Data DOM 元素可写,保留命名空间、兄弟顺序、后代和留存的别名;未命名构造必须在附着前获得合法本地名
node.nodes.length、item(index) 和 namedItem(name) 读取存活的有序元素子节点;无匹配子节点时 item 和 namedItem 返回 null
nodes.append(node) 和 nodes.insert(node, before) 把同一对象转移进拥有者的子节点集合;insert(node, null) 等价于追加
nodes.remove(node) 分离直接子节点,其对象和子树仍可供留存别名使用,之后还能重新附着
xfa.record 返回 Data DOM 数据根下当前的第一个 record,并在结构编辑之后更新
身份、XML 与绑定
脚本对象可以跨事件保留节点、后代或拥有者子集合;存活别名在附着、分离、重命名和回滚之后解析到同一批原生对象
loadXML 和 saveXML 对新建与移动过的元素都可用,包括同一事件内先导入再移动的后代
稳定的原生身份确保导入的后代别名在位置变化后不会悄悄解析到别的子节点
继承的属性命名空间、显式空默认命名空间重置、注释、处理指令、CDATA 和 Unicode 值在克隆、移动、保存和重新加载后仍然存活
表单绑定在结构变更后刷新,经新附着数据节点写入的值会到达对应的重复表单实例,不影响其他实例
事务与限制
非法类、XML 名称、兄弟引用、环和外来节点会在该单个操作改动存活脚本图之前失败
未捕获的脚本错误、原生应用失败、取消、操作上限或超时限制会恢复完整事件,包括附着与分离节点、绑定值、留存别名、词法脚本对象状态和 journal 状态;同一运行时随后可以重试
结构节点与分离树共享原生的节点、深度和 UTF-8 字节上限;原始脚本事务时限同时约束 JavaScript 与原生变更
PDF 消费
把运行时保存为 XDP 并把字节交给 HPDFXFAWriteHeadlessPDF,即可从变更后的数据绑定创建真实的原生 PDF 字段和外观
TXFAHeadlessPDFOptions.Editable = False 创建带外观的只读原生字段;该设置不会压平它们
当前覆盖范围
本页描述 Data DOM 编辑;事务化 form tree 脚本提供受支持的存活表单创建、克隆、插入、移除和原生 PDF 消费
通用 template 编辑、完整的 choice subform-set 处理和完整的 XFA 节点类 schema 仍是独立能力