Выражения форм

Вы можете использовать выражение в опросе для управления поведением ответов по умолчанию. Вопрос или группу вопросов можно скрывать и показывать, в зависимости от предыдущих ответов, используя выражения в столбце 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})

Более подробную информацию о регулярных выражениях см. в разделе Формулы.