Создание и редактирование дерева форм XFA
TXFAWidgetRuntime поддерживает транзакционное создание, клонирование и редактирование живого дерева форм через JavaScript с помощью xfa.form и коллекций узлов
Живое дерево форм имеет независимые нативные идентичности и может сохраняться как XDP-пакет формы без изменения авторского шаблона
Создание и вставка поля
var row = xfa.resolveNode("row[1]");
var field = xfa.form.createNode("field", "additional");
row.nodes.append(field);
field.w = "160pt";
field.h = "24pt";
field.ui.getElement("textEdit");
field.font.typeface = "DejaVu Sans";
field.rawValue = "Additional value";
createNode(className, name, namespaceURI) возвращает отсоединённый узел, с пустым именем и namespace модели, используемыми, когда необязательные аргументы опущены
Принимаемые классы включают field, subform, draw, area, exclGroup и классы свойств, распознаваемые схемой свойств времени выполнения
Создание узла не вставляет его в форму и не создаёт видимый виджет, пока он не присоединён с обязательными свойствами UI и значения
Операции коллекций и клонирование
| Операция | Поведение |
|---|---|
parent.nodes.append(node) | Перемещает отсоединённый или присоединённый узел в конец живой коллекции потомков родителя |
parent.nodes.insert(node, before) | Перемещает узел непосредственно перед существующим потомком того же родителя |
parent.nodes.remove(node) | Отсоединяет потомка, сохраняя его script-идентичность для последующего повторного использования |
node.clone(true) | Возвращает отсоединённый глубокий клон с отдельными нативной и script-идентичностями |
node.clone(false) | Возвращает отсоединённый поверхностный клон без узлов-потомков и скопированного значения поля |
Порядок коллекции, parent, поиск свойств и поддерживаемое разрешение SOM отражают успешные правки немедленно внутри события
Ссылки, удерживаемые script-объектами, продолжают указывать на свои узлы после зафиксированной правки или отката события, включая отсоединённые глубокие и поверхностные клоны
Цикл, узел-ссылка из другого родителя или узел модели данных, переданный операции формы, возбуждают исключение до того, как эта недопустимая операция изменит дерево
Корень модели формы может содержать заново созданные subform-ы и поля, но сам корень модели нельзя перемещать или клонировать
Повторяющиеся области и начальные экземпляры
Фактические экземпляры формы сохраняют отдельные идентичности, даже когда их авторские имена равны, их контексты данных различаются или пакет datasets отсутствует
Пустое слияние использует явный счётчик occur.initial, или occur.min, когда initial отсутствует, а отсутствующий max по умолчанию равен min
Для пустого слияния начальный счётчик вне минимума и максимума допускается, включая ноль начальных копий
Вложенные и безымянные subform-ы сохраняют свои пути вхождений, и материализация этих экземпляров не синтезирует пакет datasets
Эти правила вхождений следуют XML Forms Architecture 3.3, печатные страницы 339–345
Фиксация, откат и вывод
Успешное событие применяет свой структурный журнал, перестраивает нативные виджеты и делает отредактированную форму доступной для SaveToBytes и автоматического нативного создания PDF
Неперехваченное исключение скрипта, сбой нативной фиксации или исчерпание бюджета события восстанавливает исходный документ, идентичности виджетов и удерживаемое состояние скрипта, так что последующее событие может повторить попытку
Существующие бюджеты операций, узлов, глубины, байтов, виджетов и прошедшего времени также применяются к структурной подготовке и фиксации
Сохранённые экземпляры формы можно перезагрузить и передать в HPDFXFAWriteHeadlessPDF, чтобы создать реальные поля PDF и потоки внешних видов с предоставленными байтами шрифтов
Область действия
Эти API редактируют живую модель формы и её поддерживаемую схему свойств
Общее редактирование xfa.template, полная обработка choice subform-set-ов, полная схема классов XFA и произвольные комбинации селекторов связывания остаются отдельными возможностями