Досить часто зустрічаються анкети, логіку роботи яких неможливо реалізувати простими засобами, такими як дії або умови показу питань. Для цього в SURVEY STUDIO є можливості запуску програм на мові JavaScript , За допомогою яких можна реалізувати логіку роботи анкети практично будь-якої складності. Більш того, скриптами можна повністю створити анкету (питання і варіанти відповідей), не використовуючи редактор питань анкети .
Кожен скрипт являє собою функцію, яка отримує в якості параметра питання, виробляє якусь обробку і повертає результат. Існують глобальні для анкети скрипти, в які питання в якості параметра не передається. Таким чином, використовуючи синтаксис JavaScript, будь написаний в SURVEY STUDIO скрипт в результаті виглядає приблизно так:
function Q1_BeforeShow (Q) {return skip; }
При цьому в SURVEY STUDIO не потрібно описувати саму функцію для скрипта - це виконується системою, тобто в цьому прикладі тільки рядок return skip; повинна бути написана в вікні редагування скрипта.
типи скриптів
В анкеті є глобальні скрипти, не пов'язані з якимось конкретним питанням, а також скрипти для питань. Редактор глобальних скриптів можна відкрити, вибравши необхідний пункт в меню у верхній правій частині редактора питань анкети:
Підготовка Цей скрипт викликається на самому початку, один раз при підготовці анкети для запуску, а також при кожній вивантаженні масиву. Використовується для створення питань, зміни їх порядку (рандомізація / ротація), установки прапорів і т.д. Тобто в цьому скрипті можна тільки формувати макет анкети. Не можна виконувати дії, що впливають на логіку. Наприклад, приховувати / показувати або випадковим чином додавати варіанти відповіді, оголошувати глобальні змінні, від яких залежатимуть переходи між питаннями - для всього цього потрібно використовувати інші скрипти. Обробка Даний скрипт викликається після завершення анкети, безпосередньо перед записом інтерв'ю в базу даних. Тут можна провести аналіз всіх відповідей в інтерв'ю і виконати якісь розрахунки, виправлення та інші дії. Перед показом Глобальний скрипт перед показом викликається для кожного питання перед його показом. Скрипт може повернути результат, який змусить пропустити питання, перейти на якийсь інший питання, завершити інтерв'ю, або просто підготувати варіанти відповіді до показу (наприклад приховати не потрібні, і т.д.). Як параметр цей скрипт отримує змінну Q, яка вказує на питання, для якого запускається скрипт. Після відповіді Глобальний скрипт після відповіді викликається для кожного питання після відповіді на нього (після проведення базової перевірки коректності відповіді). Цей скрипт, так само як і скрипт перед показом, може повернути результат, який змусить перейти на якийсь інший питання, завершити інтерв'ю або, перевіривши відповідь, повідомити про помилку. Як параметр цей скрипт отримує змінну Q, яка вказує на питання, для якого запускається скрипт. Під час показу Даний скрипт виконується під час показу кожного питання в браузері, а не на сервері, і не має доступу до питань і API системи. CSS стилі Стилі не мають відношення до скриптів, але прописуються для всієї анкети в цілому. Приклади використання можна подивитися в цьому розділі .
Глобальні скрипти перед показом, після відповіді і під час показу виконуються перед такими ж скриптами, зазначеними безпосередньо в самому питанні. В властивості питання для редагування скриптів використовується кнопка:
Локальні скрипти аналогічні відповідним глобальним скриптів, тільки виконуються для питання, в якому вони написані.
Результат виконання скрипта
Будь-скрипт повинен повернути в якості результату спеціальне значення. Передбачений набір допоміжних функцій і глобальних змінних, які допомагають сформувати результат в необхідному форматі:
return ok;
Повернення значення ok є звичайним для будь-якого скрипта і не має на увазі виконання системою якихось додаткових дій. Те ж саме станеться, якщо скрипт не поверне взагалі ніякого значення.
return skip;
Повернення значення skip використовується в скриптах перед показом питання і змушує систему скинути стан поточного питання (аналогічно reset () ) І перейти до наступного по порядку.
return answered;
Повернення значення answered так само використовується в скриптах перед показом питання і позначає питання як отвеченних, без виведення на екран. Тобто відповідь на нього повинен бути зроблений так само скриптом. Система перевірить правильність відповіді, так само як це відбувається в звичайному випадку. Якщо відповідь не пройде перевірку - питання буде показаний з повідомленням про помилку. Якщо питання виявиться без відповіді - він буде виведений на екран.
return error ( 'Текст повідомлення про помилку');
Такий метод повернення результату використовується в скриптах після відповіді, коли необхідно показати питання заново з повідомленням про помилку. Якщо в функцію error () не передана повідомлення, яке необхідно показати - буде показано стандартне.
return question (123);
Повернення номера питання, на який необхідно здійснити перехід. Може використовуватися як в скриптах перед показом (в цьому випадку поточне питання буде пропущено зі скиданням стану як при поверненні skip), так і після відповіді на питання.
return exit ( 'Текст прощального повідомлення');
Примусове завершення інтерв'ю. Якщо в функцію exit () не передана повідомлення, яке необхідно показати - буде показано стандартне.
return exitAndRedirect ( 'Текст прощального повідомлення', 'http://www.rbc.ru/');
Також виконується завершення інтерв'ю, але після його збереження проводиться перехід на вказаний другим параметром адресу.
return exitAndRestart ( 'Текст прощального повідомлення'); (Поки не реалізовано)
Виконується завершення інтерв'ю, після чого проводиться повторний запуск для введення наступного інтерв'ю в цей же проект.
Читайте далі: глобальні об'єкти, функції і змінні .