Flow выражения
Flow - это выражение, с помощью которого можно подставить данные на основе ввода респондента (как есть или произведя какие-то операции) в определённые места опроса, для: валидации, вывода этих данных, расчета и т.п.
Выражение Flow может быть использовано везде,
где есть знак 𝑓
.
Например, в описании вопроса можно ввести Flow выражение:
round(${Q1[1]} / 12, 2)
что соответствует следующему:
- взять ответ из вопроса Q1, варианта ответа с ID 1
- разделить на 12
- округлить до 2 знаков после запятой при помощи функции round
Или другой пример, в поле “Максимум” числового варианта ответа записать:
${Q1[1]} + ${Q2[3]}
что соответствует следующему:
- взять значение из варианта ответа с ID 1, вопроса Q1
- прибавить значение из варианта ответа с ID 3, вопроса Q2
- результат выполнения будет использован в качестве проверки на максимальное значение в текущем варианте ответа
Выражение Flow может быть любой длины, использовать скобки для определения приоритетности выполнения.
(${Q1[1]} + ${Q2[3]}) * 2
Сначала значение из варианта ответа 1, вопроса Q1 сложится со значением варианта ответа 3, вопроса Q2. После, результат сложения, умножится на 2.
Типы данных
В Flow существует 5 типов данных:
- число
- строка
- логический
- дата
- время
Числовой тип
1000
- целое число
1.00001
- число с плавающей точкой
Запятая не может использоваться для записи числа с плавающей точкой.
Строка
“строка”
или ‘строка’
Строка записывается в одинарных или двойных кавычках. Любые символы, записанные в одинарных или двойных кавычках являются строкой, в том числе число. Пример: ‘1.001’ - является строкой.
Логический
true
- истина
false
- ложь
При этом регистр значения не имеет. Возможные
записи:true
True
TRUE
false
False
FALSE
Дата
Не может быть записана прямым путем. Дата может быть использована только через подстановки.
Время
Не может быть записано прямым путем. Время может быть использовано только через подстановки.
Подстановки
Подстановки используются для получения значений на основе данных, полученных от пользователя во время прохождения опроса.
Конструкция подстановки выглядит таким образом:
${цель|метод}
Цель
- это то, к чему идет
обращение подстановки.
Метод
- определяет, что именно
требуется получить от цели.
Цель
Возможные записи цели:
Q7
- обращение к вопросу, с ID Q7
Q7[3]
- обращение к варианту ответа
с ID = 3, вопроса c ID = Q7
Q7[2, q]
- обращение к вопросу
матрицы. Q7 - ID вопроса; 2 - ID вопроса
(строки) матрицы; q - указание, что мы
обращаемся именно к вопросу матрицы.
Q7[2, a]
- обращение к варианту
ответа матрицы. Q7 - ID вопроса; 2 - ID варианта
ответа (столбца) матрицы; a - указание, что мы
обращаемся именно к варианту ответа матрицы.
Q7[1][2]
- обращение к ячейке
(пересечению вопроса и варианта ответа) матрицы.
Q7 - ID вопроса; 1 - ID вопроса (строки)
матрицы; 2 - ID варианта ответа (столбца)
матрицы.
Метод
Список доступных методов:
fm_desc_Method | fm_desc_Description | fm_desc_ReturnType | fm_desc_AppSupport |
---|---|---|---|
count
|
fm_getQuestionCount | FlowTypeNumber | + |
sum
|
fm_getQuestionSum | FlowTypeNumber | + |
answertext
|
fm_getQuestionAnswertext | FlowTypeString | + |
id
|
fm_getQuestionId | FlowTypeNumber | + |
answerimage
|
fm_getQuestionAnswerimage | FlowTypeString | + |
answers
|
fm_getQuestionAnswers | FlowTypeNumber | |
minanswers
|
fm_getQuestionMinanswers | FlowTypeNumber | |
minanswersq
|
fm_getQuestionMinanswersq | FlowTypeNumber |
fm_desc_Method | fm_desc_Description | fm_desc_ReturnType | fm_desc_AppSupport |
---|---|---|---|
value
|
fm_getAnswerValue | fm_rt_getAnswerValue | + |
listtext
|
fm_getAnswerListtext | FlowTypeString | + |
description
|
fm_getAnswerDescription | FlowTypeString | + |
image
|
fm_getAnswerImage | FlowTypeString | + |
selected
|
fm_getAnswerSelected | FlowTypeBool | + |
selectedn
|
fm_getAnswerSelectedn | FlowTypeNumber | + |
valuenull
|
fm_getAnswerValuenull | fm_rt_getAnswerValue | + |
answers
|
fm_getAnswerAnswers | FlowTypeNumber |
fm_desc_Method | fm_desc_Description | fm_desc_ReturnType | fm_desc_AppSupport |
---|---|---|---|
description
|
fm_getMtxRowDescription | FlowTypeString | + |
answertext
|
fm_getMtxRowAnswertext | FlowTypeString | + |
id
|
fm_getMtxRowId | FlowTypeNumber | + |
answerimage
|
fm_getMtxRowAnswerimage | FlowTypeString | + |
sum
|
fm_getMtxRowSum | FlowTypeNumber | + |
answers
|
fm_getMtxRowAnswers | FlowTypeNumber |
fm_desc_Method | fm_desc_Description | fm_desc_ReturnType | fm_desc_AppSupport |
---|---|---|---|
description
|
fm_getMtxAnswerDescription | FlowTypeString | + |
image
|
fm_getMtxAnswerImage | FlowTypeString | + |
answers
|
fm_getMtxAnswerAnswers | FlowTypeNumber | |
count
|
fm_getMtxAnswerCount | FlowTypeNumber | + |
fm_desc_Method | fm_desc_Description | fm_desc_ReturnType | fm_desc_AppSupport |
---|---|---|---|
value
|
fm_getMtxCellValue | fm_rt_getMtxCellValue | + |
listtext
|
fm_getMtxCellListtext | FlowTypeString | + |
selected
|
fm_getMtxCellSelected | FlowTypeBool | + |
selectedn
|
fm_getMtxCellSelectedn | FlowTypeNumber | + |
valuenull
|
fm_getMtxCellValuenull | fm_rt_getMtxCellValue | + |
answers
|
fm_getMtxCellAnswers | FlowTypeNumber |
Функции
Функции принимают данные, производят вычисления и возвращают результат.
Функция может принимать несколько параметров. Параметры функции разделяются запятыми.
Пример записи функции round, которая округляет числовое значение с плавающей точкой до заданного количества символов после запятой:
round(100.223113, 2)
round
- название функции;
100.223113
и
2
-
параметры, разделены запятой;
Результат выполнения функции будет: 100.22
Доступные функции:
f_desc_Name | f_desc_Description | f_desc_ReturnTypeAndDesc | f_desc_AppSupport |
date
|
f_desc_date f_desc_Params: 1 (FlowTypeString) - f_param_date_1 2 (FlowTypeString) - f_param_date_2 |
FlowTypeDate - f_return_date | + |
day
|
f_desc_day f_desc_Params: 1 (FlowTypeDate) - f_param_day_1 |
FlowTypeNumber - f_return_day | + |
dayw
|
f_desc_dayw f_desc_Params: 1 (FlowTypeDate) - f_param_dayw_1 |
FlowTypeNumber - f_return_dayw | + |
month
|
f_desc_month f_desc_Params: 1 (FlowTypeDate) - f_param_month_1 |
FlowTypeNumber - f_return_month | + |
year
|
f_desc_year f_desc_Params: 1 (FlowTypeDate) - f_param_year_1 |
FlowTypeNumber - f_return_year | + |
currdate
|
f_desc_currdate f_desc_Params: |
FlowTypeDate - f_return_currdate | + |
subday
|
f_desc_subday f_desc_Params: 1 (FlowTypeDate) - f_param_subday_1 2 (FlowTypeNumber) - f_param_subday_2 |
FlowTypeDate - f_return_subday | + |
addday
|
f_desc_addday f_desc_Params: 1 (FlowTypeDate) - f_param_addday_1 2 (FlowTypeNumber) - f_param_addday_2 |
FlowTypeDate - f_return_addday | + |
dateformat
|
f_desc_dateformat f_desc_Params: 1 (FlowTypeDate) - f_param_dateformat_1 2 (FlowTypeString) - f_param_dateformat_2 |
FlowTypeDate - f_return_dateformat | + |
currtime
|
f_desc_currtime f_desc_Params: |
FlowTypeTime - f_return_currtime | + |
concat
|
f_desc_concat f_desc_Params: 1 - f_param_concat_1 2 - f_param_concat_2 |
FlowTypeString - f_return_concat | + |
round
|
f_desc_round f_desc_Params: 1 (FlowTypeNumber) - f_param_round_1 2 (FlowTypeNumber) - f_param_round_2 |
FlowTypeNumber - f_return_round | + |
pow
|
f_desc_pow f_desc_Params: 1 (FlowTypeNumber) - f_param_pow_1 2 (FlowTypeNumber) - f_param_pow_2 |
FlowTypeNumber - f_return_pow | + |
Операторы
Операторы бывают следующие: !, *, /, %, +, -, <, <=, >, >=, ==, !=, &&, ||
Операторы могут быть применены к определенным типам. При этом типы, для которых применяется оператор должны быть идентичны. Т.е. сравнение числового значения и строки приведет к ошибке, например: “1” == 1 приведет к ошибке “Типы данных для оператора ‘==’ не идентичны”.
Список операторов:
Оператор | Описание | Применяется к типам | Возвращаемый тип | Примеры |
! | Логическая инверсия | Логический | Логический |
!(1==1) Результат: false !true Результат: false |
* | Умножение | Число | Число |
5*20
Результат: 100
|
/ | Деление | Число | Число |
100/5 Результат: 20 |
+ | Сложение | Число | Число |
100+20 Результат: 120 |
- | Вычитание | Число | Число |
100-20 Результат: 80 |
< | Меньше |
Число Дата Время |
Логический |
1 < 100 Результат: true 25.01.2002 <
30.01.2002
*Результат: true 13:30 < 16:00
*Результат: true |
<= | Меньше или равно |
Число Дата Время |
Логический | |
> | Больше |
Число Дата Время |
Логический | |
>= | Больше или равно |
Число Дата Время |
Логический | |
== | Равно |
Число Дата Время Строка Логический |
Логический |
1 == 1 Результат: true 25.01.2002 ==
25.01.2002
*Результат: true 13:30 == 13:30
*Результат: true “а”==”а” Результат: true true==true Результат: true |
!= | Не равно |
Число Дата Время Строка Логический |
Логический | |
&& | Логическое И | Логический | Логический |
true && true Результат: true 1 < 10 && 5 > 3 Результат: true 1 > 0 && 13:30==13:30
*Результат: true |
|| | Логическое ИЛИ | Логический | Логический |
1 > 5 || 5 < 10 Результат: true |
* запись 13:30 или 25.01.2002 в Flow недопустима. Время и дата не могут быть прямо записаны в Flow, для них необходимо использовать подстановки.
Проверка и ошибки
Выражение Flow проверяется на синтаксис на этапе сохранения. Также, в момент сохранения Flow, определяется возвращаемый тип и проверяется, подходит ли данный тип для конкретного поля.
Если Flow используется в полях, где требуется определенный тип, то выражение Flow должно вернуть требуемый тип. Например, для параметра “Минимум” в числовом варианте ответа возвращаемый тип Flow должен быть числовой. В случае, если выражение Flow во время сохранения вопроса вернет другой тип (например “строка”) будет выведена ошибка “Неверный тип вычисления”.
Не все ошибки могут быть проверены на этапе сохранения Flow. Например, логика опроса может быть построена таким образом, что будет пропущен вопрос, ответ на который необходим в выполнении Flow. В данном случае возникнет ошибка “Отсутствует значение”.
Ошибки Flow выводятся в качестве предупреждения во время тестового прохождения опроса. Рекомендуется проверять опрос по тестовой ссылке перед началом прохождения в рабочем режиме.
Если во время прохождения опроса пользователем в выполнении Flow возникает ошибка, то результат вычисления Flow игнорируется, т.е. приравнивается к отсутствующему значению. При этом ошибка нигде не выводится.
Например, если Flow выражение используется в поле “Максимум” варианта ответа типа “Дата” и во время прохождения опроса возникла ошибка, то проверка на максимально введенную дату будет проигнорирована.
Во время проверки или выполнения выражения Flow могу возникнуть следующие ошибки:
- Элемент не может находиться вначале
- Элемент не может следовать после
- Не могу прочитать строку
- Элемент не может находиться в этом месте
- Синтаксическая ошибка в подстановке
- Подстановка не найдена
- Отсутствует значение
- Значение не может быть приведено к ожидаемому типу
- Для подстановки необходимо указать метод
- Метод не существует для подстановки
- Вопрос не может ссылаться на самого себя или на вопросы стоящие после него
- Тип вопроса в подстановке не соответствует реальному типу вопроса
- Для оператора отсутствует или неверный операнд
- Недопустимый тип значения для оператора
- Операторы не могут использоваться в таком виде
- Типы данных не идентичны
- Деление на ноль
- Результат - бесконечность
- Неверный тип вычисления
- Ошибка в функции
- Обязательный параметр для функции отсутствует
- Неверный тип переменной для параметра
- Функция не существует