Коллекции узлов запросов XFA
События JavaScript и FormCalc могут осматривать вхождения узлов в области видимости и удерживать независимые списки запросов между событиями runtime
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";
Свойства вхождений
node.all возвращает свежий упорядоченный список запросов узлов в области видимости с тем же литеральным именем; безымянный узел использует вместо него имя своего класса
node.classAll возвращает свежий упорядоченный список запросов узлов в области видимости того же класса, включая узлы с другими именами
node.index и node.classIndex возвращают вхождение с нуля в соответствующих областях
Безымянные контейнеры, не являющиеся свойствами, прозрачны для поиска именованной области, включая положительные и отрицательные относительные SOM-вхождения; контейнеры свойств сохраняют собственную область
Литеральные имена вроде #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
node.nodes Data DOM также предоставляет независимый clone(); его существующие методы append, insert и remove сохраняют своё нативное структурное поведение, как описано в Транзакционной структуре Data DOM XFA
Итерация массива, индексированные чтения и перечисление открывают узлы, на которые ссылаются; прямое присваивание, удаление, переопределение свойств, изменения прототипа и предотвращение расширений возбуждают ошибки до изменения списка запросов
Сохраняемость и стабильные идентичности
Script-объекты могут удерживать список запросов или клон между событиями; каждая операция использует текущий разрешитель событий и пределы транзакции
Дескрипторы менеджеров экземпляров, полученные запросом, направляют операции в текущий граф событий, когда удерживаются или клонируются между событиями
Переименование или переупорядочивание выжившего узла сохраняет его удерживаемую идентичность списка; удаление повторяющегося экземпляра формы делает чтения и записи через эту удалённую ссылку сбойными вместо выбора замещающего экземпляра
Независимый список может клонировать свои сохранённые ссылки и удалить ранее удерживаемую ссылку на удалённый узел без разыменования этого узла
Хранилище списков запросов — это состояние скрипта runtime; сохранение XDP сохраняет нативные значения и структуру узлов, а новый runtime начинает новую сессию script-объектов
Транзакции и пределы
Недопустимые узлы и ссылки членства дают сбой до того, как операция списка изменит хранилище; перехваченная ошибка оставляет более ранние валидные операции того же события доступными
Неперехваченная ошибка события, бюджет операции или сбой прошедшего времени восстанавливает мутации списков запросов, нативные значения, повторяющиеся экземпляры, удерживаемое состояние script-объектов и состояние журнала вместе, позволяя тому же runtime повторить попытку
TXFAFormScriptLimits.MaxArrayItems ограничивает длину каждого удерживаемого списка и отдельно — накопительные объекты списков и заново выделенные записи за одно событие; его нулевое значение использует default контекста события 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 использует нативное разрешение SOM; индексация списка после свойства-коллекции индексирует эту коллекцию
Сохраните байты runtime в XDP и передайте их в HPDFXFAWriteHeadlessPDF, чтобы сгенерировать фактические нативные поля и внешние виды из зафиксированных значений, включая правки через удерживаемые ссылки на выжившие повторяющиеся экземпляры
TXFAHeadlessPDFOptions.Editable = False создаёт нативные поля только для чтения с внешними видами, а не сплющивает их
Покрытие
Этот интерфейс поставляет независимые списки запросов и метаданные вхождений; общее создание и клонирование узлов шаблонов/форм, дополнительный скриптинг классов узлов, проверка схем и внешние носители остаются отдельной работой