Скриптинг элементов выбора XFA

Модуль: HPDFXFARuntime

Поле с ui.choiceList раскрывает методы элементов выбора во время исполнения нативных событий JavaScript и FormCalc, включая повторяющиеся экземпляры полей и псевдонимы, удерживаемые объектами скрипта

Методы и свойства

ЧленПоведение
lengthКоличество текущих export-элементов, только для чтения
selectedIndexПервый выбранный индекс с нуля или -1, когда ничего не выбрано; присваивание любого отрицательного целого очищает выбор, а значение вне диапазона или нецелое бросает исключение до изменения
getDisplayItem(index)Отображаемый текст по индексу или null при некорректном индексе
getSaveItem(index)Export-текст по индексу или null при некорректном индексе
boundItem(display)Export-текст для первого точного совпадения отображаемого текста или null, если совпадений нет
getItemState(index)Выбран ли элемент; некорректный индекс бросает исключение
setItemState(index, selected)Обновляет выделение элемента; выбор элемента в поле с единственным выбором заменяет предыдущее выделение, а в поле с множественным выбором сохраняет остальные выбранные индексы
addItem(display, bound)Добавляет элемент, не меняя существующие выбранные; без второго аргумента используется пустая export-строка
deleteItem(index)Удаляет элемент и сдвигает последующие индексы, сохраняя идентичность выживших псевдонимов; при некорректном индексе возвращает false
clearItems()Удаляет текущие элементы и очищает выбор; явно пустой runtime-список остаётся пустым после сохранения и перезагрузки
setItems(text, columns)Заменяет текущие элементы из колонок, разделённых запятыми, и очищает выбор; columns по умолчанию 1, строка из одной колонки задаёт и отображаемый, и export-текст, а более длинная строка берёт первую колонку как отображаемый текст и последнюю как export-текст; возвращает false, если число колонок некорректно или не делит число входных полей нацело

Индексы — целые числа и никогда не приводятся из строк; методам элементов нужно документированное число аргументов, необязательный второй аргумент принимают только addItem и setItems

Значения элементов сохраняют Unicode, начальные и конечные пробелы, явные пустые export-значения и переводы строк; недопустимые управляющие символы XML и непарные суррогаты UTF-16 отклоняются до изменения списка

Немедленное состояние и псевдонимы

Новые элементы сразу видны через методы элементов и DOM свойств, а псевдоним удалённого элемента не может перенаправляться на выживший элемент, сместившийся на освободившийся индекс

Замена или очистка списка создаёт новые идентичности; удерживаемые объектами скрипта псевдонимы удалённых элементов ломаются при последующих чтениях и записях, тогда как выжившие псевдонимы продолжают адресовать тот же элемент между исполнениями событий

Прямое присваивание rawValue, запись в Data DOM, публичная фиксация значения виджета или скалярная мутация export-элемента инвалидирует кэшированные явные индексы, включая присваивания, сохраняющие ту же сырую строку

Сохранение и точный выбор

SaveToBytes записывает фактические элементы формы по каждому экземпляру и синхронизированные значения; изменение повторяющегося экземпляра сохраняет остальные экземпляры и их области данных

Дубликаты и пустые export-значения можно выбирать по точным индексам через API элементов; сохранённое поле формы записывает канонические индексы и совпадающее сырое значение в необязательных атрибутах пространства имён urn:hotpdf:xfa:runtime

Стандартные элементы и узлы значений XFA остаются на месте независимо от этих необязательных атрибутов; последующие записи значения инвалидируют атрибуты, чтобы устаревшие индексы не могли выбрать не тот дубликат export-значения

Нативный потребитель PDF записывает совпадающие пары export/display из /Opt, точные индексы /I и строки или массивы /V и строит appearances из выбранных отображаемых подписей

Транзакции и лимиты

Изменения элементов участвуют в существующей транзакции события и журнале скриптов; сбой нативного лимита значения, отмена вызывающего или необработанное исключение события восстанавливают сохранённые XDP, лексическое состояние скрипта и привязки перед повторной попыткой

Выделения узлов, входные колонки, значения UTF-8, XML-полезные нагрузки операций, нативный обход свойств и клонирование сохраняют настроенные бюджеты скрипта и runtime и проверки отмены

Пример

var list = this.parent.choice;
list.clearItems();
list.addItem("Display A", "same");
list.addItem("Display B", "same");
list.selectedIndex = 1;
if (list.getDisplayItem(list.selectedIndex) !== "Display B")
    throw new Error("Unexpected selected label");

Для переменных FormCalc, удерживающих само поле, а не его скалярное значение, используйте var list = Ref($.parent.choice) перед вызовом методов элементов

Словарь методов и аргументы-колонки следуют Adobe Designer Scripting Reference; runtime использует семантику замены для setItems, как описано в поддержке скриптинга HTML5-форм Adobe