Транзакционная структура 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) перемещают тот же объект в children владельца; insert(node, null) добавляет в конец
nodes.remove(node) отсоединяет прямого ребёнка, оставляя его объект и поддерево доступными удерживаемым алиасам и повторному присоединению позже
xfa.record возвращает текущую первую запись под data-корнем Data DOM и обновляется после структурных правок
Идентификаторы, XML и привязки
Скриптовый объект может удерживать узел, потомка или владеющую коллекцию детей между событиями; живые алиасы разрешаются в те же нативные объекты после присоединения, отсоединения, переименования и отката
loadXML и saveXML работают над новыми и перемещёнными элементами, включая потомков, импортированных и затем перемещённых в том же событии
Стабильные нативные идентификаторы не дают импортированным алиасам потомков молча разрешаться в другого ребёнка после позиционных изменений
Унаследованные пространства имён атрибутов, явные сбросы пустого пространства имён по умолчанию, комментарии, инструкции обработки, CDATA и значения Unicode переживают клон, перемещение, сохранение и перезагрузку
Привязки форм обновляются после структурных изменений, а значения, записанные через новые присоединённые data-узлы, доходят до соответствующего повторного экземпляра формы, не трогая другие экземпляры
Транзакции и лимиты
Невалидные классы, XML-имена, ссылки на соседей, циклы и чужие узлы падают до того, как конкретная операция изменит живой скриптовый граф
Неперехваченная ошибка скрипта, неудача нативного применения, отмена, потолок операций или лимит прошедшего времени восстанавливают событие целиком, включая присоединённые и отсоединённые узлы, значения привязок, удерживаемые алиасы, лексическое состояние скриптовых объектов и состояние журнала; затем тот же runtime может повторить попытку
Структурные узлы и отсоединённые деревья делят нативные потолки узлов, глубины и байтов UTF-8; исходный дедлайн скриптовой транзакции применяется к JavaScript и нативным изменениям вместе
Потребление PDF
Сохраните runtime в XDP и передайте эти байты в HPDFXFAWriteHeadlessPDF, чтобы создать настоящие нативные PDF-поля и appearance из изменённых привязок данных
TXFAHeadlessPDFOptions.Editable = False создаёт нативные поля только для чтения с appearance; эта настройка их не сплющивает
Текущее покрытие
Этот структурный интерфейс покрывает Data DOM; общее создание и клонирование узлов template/form, независимая мутация списков запросов и полноценный скриптинг классов узлов остаются отдельной работой по реализации
Нативный структурный API графа · Runtime виджетов XFA
Независимые коллекции узлов запросов · Нативный структурный графовый API · Runtime виджетов XFA