Шаблон. Скриптование вопросов

Шаблон. Скриптование вопросов

ВНИМАНИЕ! Использование скриптов может привести к “непроходимой анкете“. Тщательно тестируйте шаблоны перед отправкой в работу.

Введение

В систему встроена возможность управления поведением анкет с помощью JavaScript.
Скрипты позволяют динамически изменять текст вопросов, скрывать или показывать элементы, устанавливать ответы, валидировать ввод и управлять переходами внутри анкеты.

Назначение:

  • динамическое изменение текста и комментариев вопросов;

  • скрытие и отображение вопросов или вариантов ответов;

  • изменение порядка и структуры вопросов в секции или цикле;

  • установка и проверка ответов;

  • адаптация анкеты под ответы респондента.


Чтобы задать скрипт необходимо в конструкторе шаблонов в редактировании вопроса нажать соответствующую иконку:

image-20251009-151154.png

К каждому вопросу можно указать JS-скрипты:

  • До показа: перед отображением вопроса пользователю (команды: applyAnswer, skipQuestion)

  • После ответа: анализ ответа и управление логикой (команды: showError, finish)

Скрипт влияет только на вопрос, к которому привязан. Рекомендуется минимизировать количество скриптов в цепочке вопросов для снижения нагрузки.

image-20251009-151342.png

Где исполняются скрипты

Код выполняется внутри контекста вопроса анкеты, до показа вопроса пользователю или после ответа на вопрос.
В момент выполнения доступны объекты:

  • question — текущий вопрос и его свойства

  • answer — ответ на вопрос, если он уже есть

  • history — массив кодов показанных пользователю вопросов

    • ["Q1","Q2","Q3","Q4","Q5","Q6","Q7","Q8","Q9","Q10"]

  • media — массив прикрепленных к вопросу медиа (изображения, видео, аудио)

    • [{'name':'имя файла', ‘type': ‘Video’|'Image'|'Audio'}, …]

  • cycle — информация о цикле, если вопрос в цикле, иначе null

    • {'index':1,'length':5,'option':'label', 'native': 4}

  • memory — объект для передачи данных между разными запусками скрипта внутри одного заполнения

  • locale — язык заполнения для мультиязычных анкет

  • version — строка с версией системы заполнения


Взаимодействие с заполнением

Скрипты не изменяют анкету напрямую.
Вместо этого все действия добавляются в специальную очередь команд commands.push,
которая выполняется после завершения скрипта.

🔹 Принцип работы

  1. Скрипт выполняется

  2. Каждая команда добавляется в очередь через commands.push

  3. После завершения скрипта система обрабатывает очередь и применяет все изменения.

🔹 Пример

Такой скрипт перед показом вопроса пользователю изменит текст вопроса и скроет три варианта ответа:

commands.push.setLabel("Выберите известные вам марки"); commands.push.hideOptions(['3','4','5']);

Функции

  • makeSubstitution(message)— выполнить подстановки в тексте

  • getAnswer(questionCode)— получить объект ответа на вопрос по его коду

  • getQuotas(questionCode)— получить значение квоты (только на МУ)

  • getAppliedQuotas()— Получить в какие квоты заполняется анкета

  • getLocales()— Доступные для заполнения язвки в шаблоне

функция getQuotas(questionCode) возвращает массив объектов с информацией по квотам, формат объекта:

Свойство

Тип

Описание

Свойство

Тип

Описание

name

string

название квоты в заданном вопросе

amount

integer

остаток по квоте, который необходимо заполнить на устройстве

localAmount

integer

всего заполнено на данном устройстве

totalAmount

integer

всего назначено по квоте

initialAmount

integer

всего назначено на заданном вопросе

currentAmount

integer

всего заполнено на других устройствах (либо забраковано) по данным сайта

flex

boolean

флаг, является ли квота гибкой (т.е. эта квота будет расходоваться при достижении заданного количества любой из квот в вопросе)

  • ВНИМАНИЕ! название квоты может не совпадать с текстом ответа и нет возможности соотнести код ответа по квотному вопросу и непосредственно назначенную квоту.

Отладка

  • console.log— отладочные сообщения, будут выводится только в режиме тестирования шаблона

  • console.warn— отладочные сообщения, будут выводится только в режиме тестирования шаблона

  • console.error— сообщения об ошибках будут показаны при любом заполнении


Типы вопросов

От типа вопроса зависят доступные свойства и команды, а так же тип ответа.


Список команд