Транзакционная структура 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