Вы можете использовать выражение в опросе для управления поведением ответов по умолчанию. Вопрос или группу вопросов можно скрывать и показывать, в зависимости от предыдущих ответов, используя выражения в столбце relevant. Вопрос, спрятанный в выражении в столбце relevant, не предоставляет данные.
Примечание:
В полевом приложении ArcGIS Survey123 при вводе ответа на вопрос, который позже будет скрыт из-за выражения relevant, ответ будет очищен. Если вопрос снова становится актуальным, необходимо ввести новый ответ. В веб-приложении ответ не очищается, поэтому, если вопрос снова становится актуальным, используется ранее введенный ответ.
Выражения можно применять также и к столбцу readonly, который может отключить ввод в вопрос или группу на основе результата выражения. Обязательный столбец также поддерживает выражения, что позволяет опросу требовать от пользователя ответа на вопрос только при определенных условиях.
Примечание:
В мобильном приложении выражения только для чтения не поддерживаются.
На предыдущие вопросы всегда следует ссылаться в выражениях в формате ${field_name}.
Видимость вопроса
Вы можете скрыть вопрос из просмотра с помощью выражения, используя body::esri:visible. Этот столбец скрывает вопрос, если выражение, которое он содержит, не соответствует истине, но содержимое самого вопроса сохраняется. Например, выражение ${edit_location}='yes' заставляет вопрос отображаться только в том случае, если вопрос edit_location задан как yes.
Это поведение аналогично столбцу relevant, поскольку оба столбца скрывают вопрос, пока выражение в столбце не будет оценено как истинное. Основное отличие заключается в том, что body::esri:visible не очищает значение ответа на вопрос, который сделан выражением невидимым и отправляет имеющееся значение в векторный слой. Используйте столбец relevant вместо body::esri:visible, если хотите, чтобы в вопросе не было вычисляемых или сохраняемых значений, когда оно не релевантно.
При использовании столбцов body::esri:visible и relevant для управления видимостью вопроса, ограничения доступа, настройки по умолчанию, подсказки и обязательный статус вопросов применяются только тогда, когда вопрос является видимым.
Вы также можете контролировать видимость вопросов, используя тип вопроса hidden и оформление hidden, но эти настройки нельзя контролировать с помощью выражения.
Примечание:
Вопросы типа Изображение, Аудио и Файл не поддерживают скрытие столбцом body::esri:visible.
Простые выражения
Лучший способ использования одного их таких выражений – изменить поведение или видимость вопроса, если ранее не был дан конкретный ответ. Например, следующее выражение проверяет, верен ли ответ на предыдущий вопрос:
${previous_question} = 'true'
В следующем примере проверяется, был ли ответ на предыдущий вопрос больше или равен 100:
${previous_question} < 100
Вопрос типа select_multiple хранит значения отличным от других типов вопросов образом: каждый отмеченный ответ вводится в том порядке, в котором он был выбран, ответы разделяются запятыми. Например, выбор ответов A и B именно в таком порядке приведет к получению ответа A,B. Для использования вопроса select_multiple как части выражения необходимо использовать функцию selected. Следующий пример проверяет, ответил ли пользователь на предыдущий вопрос значением А, и работает независимо от других выбранных ответов:
selected(${previous_question}, 'A')
Функция count-selected подсчитывает количество вариантов, выбранных при ответе на вопрос select_multiple, и предоставляет число для использования в качестве оператора. В следующем примере проверяется, было ли в предыдущем вопросе выбрано более двух вариантов ответа:
count-selected(${previous_question}) > 2
Вы можете использовать функцию count-selected как ограничение для вопросов типа изображение и файл с оформлением multiline, чтобы контролировать количество отправленных файлов.
Математические выражения
В следующем примере сочетается несколько операторов и вопросов:
${previous_question} + ${other_previous_question} <= 100
При использовании математических операторов вам может потребоваться преобразование значений в числа. В предыдущем примере предполагалось, что previous_question и other_previous_question являются целыми или десятичными числами, но если типы вопросов являются строками, преобразуйте их следующим образом:
int(${previous_question}) + int(${other_previous_question}) <= 100
Вы, кроме того, можете выполнить математические выражения для вопросов типа дата, сохраняющиеся как Время эры, которое равно количеству миллисекунд, прошедших с 1 января 1970 г. Следующее выражение показывает вопрос, только если ответ на предыдущий вопрос был дан более чем за две недели до сегодняшнего дня:
if( ${previous_question}='',false,today() - ${previous_question} > 1000*60*60*24*15)
Регулярные выражения
Регулярное выражение — это последовательность символов, используемая для сопоставления шаблонов в строках. В Survey123 в случае совпадения шаблона выражение вернет значение true; в противном же случае - когда шаблон не совпадает - выражение вернет false.
Регулярные выражения можно использовать в любом столбце, поддерживающем выражения, чтобы изменять поведение вопроса, если строка, предоставленная другим вопросом, находится в заданном формате. В следующем примере при размещении в столбце relevant вопрос отображается только в том случае, если на другой вопрос был дан ответ буквой:
regex(${question},'[A-Za-z]')
В следующем примере, помещенном в столбец choice_filter вопроса типа select_one для названий улиц, будут показаны только те улицы, которые содержатся в списке citystreets и соответствуют названию города, выбранному в предыдущем вопросе с именем city:
regex(citystreets,${city})
Более подробную информацию о регулярных выражениях см. в разделе Формулы.