/
Скриптование вопросов

Скриптование вопросов

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

Общая информация

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

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

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

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

Доступные объекты

history // массив кодов показанных вопросов ["Q1", "Q2", ...] question // объект текущего вопроса answer // объект ответа (если есть) media // массив медиа [{'name': 'имя файла', 'type': 'Image|Video|Audio'}, ...] cycle // информация о цикле {'index': 1, 'length': 5, 'option': 'label', 'native': 4} или null memory // объект для передачи данных между скриптами version // версия движка (с 2.5.3)

 

Для отладки и сообщениях об ошибках используются функции console.log, console.warn, console.error.
Сообщения типа log и warn показывается только при тестировании шаблона, error - при любом заполнении.

Объект question

Общие свойства

Свойство

Описание

Свойство

Описание

Code

Код вопроса ("Q1")

Label

Текст вопроса

RichLabel

Текст с HTML (<p>Сколько <strong>вам</strong> лет?</p>)

Comment

Комментарий для респондента

RichComment

Комментарий с HTML (<p><strong>не бойтесь эта информация не будет сохранена</strong></p>)

Специфичные свойства в зависимости от типа вопроса

Текстовый вопрос

  • Min (integer) — минимальная длина ответа

  • Max (integer) — максимальная длина ответа

  • RegexpEnabled (boolean) — включена ли проверка регулярным выражением

  • Regexp (string) — регулярное выражение

  • RegexpMessage (string) — сообщение об ошибке

Выбор вариантов, Уточняющий

  • Min (integer) — минимальное количество вариантов

  • Max (integer) — максимальное количество вариантов

  • Options (object) — словарь вариантов, ключ - строка с числом кода ответа, значение - объект с описанием варианта:

    • Label (string)— название варианта

    • PreChecked (boolean) — выбран по умолчанию

    • Other (boolean) — поле «Другое»

    • OtherNumber (boolean) — тип поля «Другое» (текст/число)

    • OtherNotEmpty (boolean) — требуется ввод текста

    • OtherMin (integer) — минимальная длина текста

    • OtherMax (integer) — максимальная длина текста

    • ShowRespondent (boolean) — видимость для респондента

    • Excluder (boolean) — исключающий вариант

    • Finisher (boolean) — завершает опрос

Сетка

  • Rows — массив строк:

    • Native (string)— ID строки

    • Label (string)— название строки

    • Min(integer) — минимальное количество колонок

    • Max(integer) — максимальное количество колонок

    • Other (boolean) — поле «Другое»

    • OtherNumber (boolean) — тип поля «Другое»

    • OtherMin (integer) — минимальная длина текста

    • OtherMax(integer) — максимальная длина текста

    • Values (array) — массив значений

    • Media (array) — медиа-файлы

  • Columns — массив столбцов:

    • Label (string)— название столбца

    • Other (boolean) — поле «Другое»

    • OtherNumber (boolean) — тип поля «Другое»

    • OtherMin(integer) — минимальная длина текста

    • OtherMax(integer) — максимальная длина текста

    • Media (array) — медиа-файлы

Диапазон

  • Options (object) — словарь ответов, ключ - строка с числом кода ответа, значение - объект с описанием варианта:

    • Label (string)— название варианта

    • From (integer)— нижняя граница допустимого значения

    • To (integer)— верхняя граница допустимого значения

    • Exact(boolean) — вариант ответа для ввода точного значения

    • Decline(boolean) — вариант ответа для отказа

    • ShowRespondent (boolean) — видимость для респондента

    • Finisher (boolean) — завершает опрос

Ранг

  • Percent (boolean)— используется ли распределение по процентам

  • Options (object) — словарь ответов, ключ - строка с числом кода ответа, значение - объект с описанием варианта:

    • Label (string)— название варианта

    • ShowRespondent (boolean) — видимость для респондента

Шкала

  • ScaleType (string) — тип шкалы (normal/extended)

  • Min (integer)— нижняя граница шкалы

  • Max (integer)— верхняя граница шкалы

  • LabelMin (string) — подписи к ключевым точкам шкалы

  • LabelMax (string) — подписи к ключевым точкам шкалы

  • LabelM1 (string) — подписи к ключевым точкам шкалы

  • LabelM2 (string) — подписи к ключевым точкам шкалы

  • LabelM3 (string) — подписи к ключевым точкам шкалы

Число

  • AllowNegative(boolean) — разрешены ли отрицательные числа

  • DecimalPlaces (integer)— количество знаков после запятой

  • Min (decimal)— нижняя граница диапазона

  • Max (decimal)— верхняя граница диапазона

  • Units (string) — единицы измерения

Раздел

  • Order (array)— массив кодов вопросов в порядке их отображения в раздела

  • Show (boolean)— определяет, отображается ли заголовок раздела в интервью

  • Rotations (array)— массив настройки ротаций

    • Random (boolean) — если true, порядок вопросов определяется случайным образом

    • Order (array) — фиксированный порядок вопросов внутри данной ротации

Цикл

  • Order (array)— массив кодов вопросов в порядке их отображения в цикле

  • Show (boolean)— определяет, отображается ли заголовок цикла в интервью

  • Rotations (array)— массив настройки ротаций

    • Random (boolean) — если true, порядок вопросов определяется случайным образом

    • Order (array) — фиксированный порядок вопросов внутри данной ротации

 

Объект answer

Общие свойства

Свойство

Описание

Свойство

Описание

Locale

язык ответа

Специфичные свойства в зависимости от типа вопроса

Текстовый вопрос

  • Value (string) — текст ответа

Выбор вариантов, Уточняющий

  • Order (array) — порядок выбора вариантов

  • Options (object) — словарь вариантов, ключ - строка с числом кода ответа, значение - объект с описанием варианта:

    • Name (string)— название варианта

    • Value (string) — значение поля другое

Сетка

  • Cells — массив объектов, содержащих информацию о строке, столбце и значении

    • RowName (string)— текстовое название строки

    • ColumnName (string)— текстовое название столбца

    • RowNativeName (string) — код строки

    • Cell (integer) — значение выбранной ячейки

    • Other (string) — дополнительное значение (если ячейка предполагает ввод "другое")

Дата

  • Value (string) — ответ в формате ДД.ММ.ГГГГ

Диапазон

  • Native (string)— код выбранного диапазона

  • RangeNative (string)— код выбранного диапазона

  • Exact(boolean) — задано ли точное значение

  • Value (integer) — числовой ответ

Ранг

  • Options (object) — словарь ответов, ключ - строка с числом кода ответа, значение - объект с описанием варианта:

    • Name (string) — текст варианта ответа

    • Value (integer) — порядковый номер или количество процентов

Шкала

  • Value (integer) — выбранное значение шкалы

Число

  • Value(decimal) — введенное число

  • Units (string) — единицы измерения

Доступные функции:

makeSubstitution(message) - вычислить подстановку

getAnswer(questionCode) - получить ответ по коду вопроса

getQuotas(questionCode) -получить массив квот (работает только в SF 2.0)

getAppliedQuotas() -получить применяемые квоты (работает только в SF 2.0)

Команды

задаются в формате:

  • commands.question.push({...}) — управление текущим вопросом.

  • commands.interview.push({...}) — управление анкетой в целом.

Управление анкетой

  • {'command': 'answer', 'forceValidation': 'false'} // ответить и перейти {'command': 'skip'} // пропустить вопрос {'command': 'flc'} // после ответа {'command': 'flc', 'message': 'текст ошибки'} {'command': 'finish', 'type': 'Section'} // доступен только в секции after: type = 'Section' - перейти к концу раздела type = 'Interview' - закончить интервью type = 'Cycle' - выйти из цикла

Управление вопросом

Все типы вопросов:

  • {'command':'setLabel', 'value':'text', 'plainValue':'text', 'html': false} - установка текста вопроса value - может включать html разметку plainValue - не обязательное поле, обычный текст html - не обязательное поле, если false значит html теги не используются {'command':'setComment', 'value':'text', 'plainValue':'text', 'html': false} - установка комментария {'command':'clearAnswer'} - очистить текущий ответ {'command':'hideMedia', 'name':'file.name'} - скрыть медиа-файл приложенный к вопросу

Текст:

  • {'command':'setAnswer', 'value':'text'} - установить ответ

Выбор вариантов, уточняющий:

в качестве value используется код ответа

  • {'command':'checkOption', 'value':'5', 'other': 'Some text', 'required':true} - выбрать ответ. Other - значение поля "Другое". Required - после выбора, блокируется возможность снятия ответа интервьюером. Other, required - не обязательное поле {'command':'uncheckOption', 'value':'11'} - снять выбор с варианта {'command':'hideOptions', 'value':['3','4','5']} - скрыть варианты ответов {'command':'orderOptions', 'value':['3','4','5']} - изменить порядок следования вариантов ответа. Указанные будут первыми в этом порядке, остальные “съедут” не изменив порядок {'command':'updateOption', 'nativeName':'3', 'label':'New name','finisher':false,'excluder':false,'showRespondent':true} - редактировать вариант ответа. Все параметры не обязательны

Сетка:

  • {'command':'check', 'row':'R3', 'value': 3, 'other': 'text'} - выбрать ячейку {'command':'uncheck', 'row':'R3', 'value': 3} - снять выбор с ячейки {'command':'hide', 'rows':['R3', 'R1'], 'columns': [1,5]} - скрыть выбранные строки/столбцы. Columns - индекс, начиная с 1. Rows, columns - не обязательны {'command':'orderRows', 'rows':['R3', 'R1']} - изменить порядок следования строк {'command':'updateRow', 'row':'R3', 'label':'New name'} - редактировать строку {'command':'updateColumn', 'column': 1, 'label':'New name'} - редактировать столбец. Column - индекс, начиная с 1

 

Примеры

Увеличение счетчика

При каждом заходе на вопрос увеличиваем счетчик на 1, пишем в лог и даем команду показать значение в тексте вопроса пользователю

if (memory.counter === undefined) { memory.counter = 0; } memory.counter++; console.log('memory.counter: ' + memory.counter); commands.question.push({'command': 'setLabel', 'value': 'Counter: ' + memory.counter});

Скрытие элементов сетки

Скрыть 2 колонку и стоку с кодом R2

commands.question.push({'command': 'hide', 'rows': ['R2'], 'columns': [2]});

Пример со сбором ответов

Собрать текст с ответами на все уже заданные вопросы и дать команду установить этот текст в комментарий к вопросу, а так же как ответ. Дать команду принять ответ и перейти к следующему вопросу

var text = ''; for(var i in history){ var answer = getAnswer(history[i]); text += history[i] + ':' + JSON.stringify(answer) + '<br />'; } commands.question.push({'command':'setComment', 'value':text}); commands.question.push({'command':'setAnswer', 'value':text}); commands.interview.push({'command':'answer'});

Выбор ячейки в сетке

Скрыть 2 колонку и стоку с кодом R2

commands.question.push({'command':'check', 'row':'R2', 'value': 1}); commands.interview.push({'command':'answer'});

Работа с циклом

Вопрос задается в цикле, ничего не делаем на 5 итерации, иначе скрываем все приложенные картинки кроме одной

if (cycle.index == 5) return; for(var i = 0; i < media.length; i++) { if (i + 1 == cycle.index) { continue; } console.log(media[i]); commands.question.push({'command':'hideMedia', 'value':media[i].name}); }

Операции с вопросом “Выбор вариантов“

Пример операций с вопросом типа Check

commands.question.push({'command':'hideOptions', 'value':['1','2']}); commands.question.push({'command':'updateOption', 'nativeName':'3', 'label':'New name','finisher':false,'excluder':false,'showRespondent':false}); commands.question.push({'command':'orderOptions', 'value':['11','5','4','3']}); commands.question.push({'command':'checkOption', 'value':'3'}); commands.question.push({'command':'checkOption', 'value':'5', 'required':true}); commands.question.push({'command':'checkOption', 'value':'11', 'other': 'Some text'});

Related content