Повторы

Форма XLSForm позволяет многократно повторять несколько вопросов. Ниже приведены примеры использования повторов:

  • Получение нескольких ответов на один и тот же вопрос в одном опросе.
  • Получение отдельных, небольших наборов записей, например, имени, возраста и пола всех жителей дома.
  • Получение нескольких вопросов типа Карта в одном опросе.

Повторение для получения нескольких ответов на один и тот же вопрос

При публикации опроса с повторами каждый повтор создается как связанная таблица в вашем векторном слое, или как связанный слой, если повтор содержит геоточку, геотрассировку или геоформу.

Использование повторов

Чтобы повторить набор вопросов для получения нескольких ответов, выполните следующие действия в своей таблице на вкладке опрос:

  1. В строке, с которой вы желаете начать повтор, введите begin repeat в столбце type.
  2. Введите имя для повтора в столбце name.
  3. В строках, располагающихся ниже, укажите вопросы, которые вы хотите включить в повтор.
  4. Сразу после указания вопросов введите end repeat в столбце type.

Это создает в вашем опросе набор вопросов, которые могут быть многократно добавлены к результатам опроса. По умолчанию число повторов вопросов не ограничено.

Местоположения точек из первого в повторе вопроса геоточка можно показать на любой карте в опросе. Более подробно см. Точечные наложения на картах.

Оформление

Если задать столбец оформления вопроса начала повторения как минимальное, повторяющиеся наборы вопросов не будут видны при запуске. Пользователь должен щелкнуть кнопку добавить для просмотра повторяющихся вопросов. Это полезно, если не все повторяющиеся вопросы обязательны к заполнению в опросе. Это оформление задается в вопросе типа начала повторения.

Минимальное оформление для повтора в полевом приложении

Если для повторов задано минимальное, и их число равно нулю, инструменты управления повторами и их подпись не будут видны.

Если задать оформление вопроса начала повторения как компактное, то при запуске повтор появится в свернутом виде, который может быть развернут пользователем. Это очень удобно для больших опросов, которые могут вызвать у пользователя трудности при чтении и перемещении. Это оформление задается в вопросе типа начала повторения.

В отличие от других оформлений, повторы могут использовать одновременно и минимальное, и компактное; для этого нужно задать в качестве оформления минимальное компактное. Вопрос представлен в повторе как свернутым (compact), так и скрытым (minimal).

Если задать табличное оформление начала повтора вопросов, вопросы в повторе будут отображаться в виде таблицы. Для получения дополнительных сведений см. раздел Табличные повторы.

Примечание:

В Survey123 Connect вы также можете задать следующие варианты оформления повторов в опросах, используемых с полевым приложением Survey123 или веб-приложением Survey123:

  • Если в столбце style на листе settings задать значение pages, а в качестве оформления для всех вопросов типа начала повтора задать field-list, то каждый повторяющийся набор вопросов будет отображаться на отдельной странице опроса. Это поведение такое же, как и для group.
  • Если в столбце style листа settings задать значение fixed-grid или dynamic-grid, повторы в вашем опросе можно настроить так, чтобы они отображали содержащиеся в нем вопросы в виде компоновки сетки. Это поведение такое же, как и для group.

Табличные повторы

Примечание:

В этом разделе описываются функции, доступные только в Survey123 Studio и Survey123 Mobile.

В Survey123 Connect, полевом приложении Survey123 и веб-приложении Survey123 табличное оформление и связанные с ним параметры XLSForm игнорируются.

Если задать табличное оформление начала повтора вопросов, вопросы в повторе будут отображаться в виде таблицы. В табличном представлении записи в повторе отображаются в виде строк, а вопросы в повторе — в виде столбцов. Табличный вид позволяет редактировать данные непосредственно в ячейках, а также сортировать и перемещаться по записям в повторе.

Табличное представление показано на следующем изображении:

Табличное представление повтора

Выноски на изображении выше расшифровываются следующим образом:

  1. Нажмите на кнопку меню для каждой строки, чтобы получить доступ к опциям Редактировать в представлении формы, Копировать в новую запись и Удалить.
  2. Значок «только для чтения» указывает на то, что вопрос (столбец) нельзя редактировать в табличном представлении.
  3. Коснитесь заголовка столбца, чтобы отсортировать табличное представление по возрастанию, и, при желании, выполните следующие действия:
    • Нажмите на заголовок столбца еще раз, чтобы отсортировать его по убыванию.
    • Коснитесь заголовка столбца в третий раз, чтобы отключить сортировку (возврат к исходному порядку строк). Или коснитесь заголовка другого столбца, чтобы отсортировать данные в этом столбце.
  4. Коснитесь ячейки, чтобы изменить её значение. В табличном представлении можно редактировать только некоторые типы вопросов.
  5. Коснитесь кнопки очистки в ячейке, чтобы удалить ее значение.

Вы также можете редактировать отдельные записи в представлении формы. В представлении формы отдельные записи повторов отображаются в отдельной, полнофункциональной форме опроса.

Табличный формат можно использовать в сочетании с минимальным и компактным оформлениями.

Для начала работы с табличными повторами выполните в Survey123 Studio следующие действия:

  1. Задайте табличное оформление в вопросе начала повторения.

    Табличное представление остается пустым, пока вы не добавите в него вопросы.

  2. Добавьте один или несколько вопросов в табличное представление, задав showInTabularView=true в столбце body::esri:style для каждого вопроса.
  3. Настройте табличное представление с дополнительными параметрами.

Добавление вопросов в табличное представление

Добавьте один или несколько вопросов в табличное представление, задав showInTabularView=true в столбце body::esri:style для вопросов повтора. В табличном представлении можно редактировать следующие типы вопросов:

  • text
  • integer
  • decimal
  • date
  • time
  • dateTime

Все остальные типы вопросов отображаются в табличном представлении в виде столбцов, предназначенных только для чтения.

Внимание:

При добавлении вопросов в табличное представление следует учитывать следующее:

  • Вопросы в повторе, содержащие выражение (включая yes) в столбце только для чтения, нельзя редактировать в табличном представлении.
  • Вопросы в повторе, содержащие выражение в столбце body::esri:visible или скрытого оформления, не отображаются в табличном представлении.
  • Вопросы в повторе, содержащие выражение в соответствующем столбце, не отображаются в табличном представлении.
  • Вопросы в повторе, содержащие выражение (включая yes) в обязательном столбце или выражение в столбце ограничений, отображаются в табличном представлении. Если одно или несколько обязательных условий или ограничений не соблюдены, над табличным представлением отображается общее предупреждение, а рядом с каждой записью (строкой), содержащей ошибки, — значок предупреждения. Вы не сможете отправить опрос, пока эти проблемы не будут решены. В представлении формы вы можете редактировать записи, чтобы увидеть ограничения и необходимые предупреждающие сообщения для отдельных вопросов. При возникновении ошибок в повторе доступна опция Редактировать в представлении формы, даже если параметр editInFormView св столбце body::esri:style установлен на false.

Опции табличного представления

Вы можете настроить опции, связанные с записями (строками) в табличном представлении, указав параметры в столбце body::esri:style для вопроса начала повтора. Эти необязательные параметры описаны в таблице ниже. Можно добавить несколько параметров, разделяя их пробелами. Ниже приведен пример:

addRecordMode=form copyToNewRecord=false

Если вы зададите табличное оформление вопроса начала повтора и не укажете никаких параметров в столбце body::esri:style для этого вопроса, то опции Редактировать в представлении формы, Копировать в новую запись и Удалить будут доступны в табличном представлении по умолчанию.

ПараметрОписание
addRecordMode

Задайте режим работы кнопки Добавить запись и опцию Копировать в новую запись в табличном представлении. По умолчанию – row. Если значение равно row, новая запись добавляется в табличное представление. Если значение равно form, новая запись открывается в представлении формы.

Значения: row | form

Пример:

addRecordMode=form
editInFormView

Отобразите или скройте опцию Редактировать представлении формы в табличном представлении. По умолчанию – true.

Примечание:

При возникновении ошибок в повторе включена опция Редактировать в представлении формы, даже если для параметра editInFormView задано false.

Значения: true | false

Пример:

editInFormView=false
copyToNewRecord

Отобразите или скройте опцию Копировать в новую запись в табличном представлении. Эта опция позволяет пользователям дублировать запись в повторе. По умолчанию – true. Параметр addRecordMode определяет способ добавления дублирующейся записи.

Значения: true | false

Пример:

copyToNewRecord=true
editInTabularView

Включите и выключите редактирование в представлении таблицы. По умолчанию – true. Если значение равно false, все ячейки в табличном представлении становятся доступными только для чтения.

Значения: true | false

Пример:

editInTabularView=false

Ограничения использования табличных повторов

К табличным повторам применяются следующие ограничения:

  • Табличное оформление не поддерживается для вложенных повторов.
  • Опция Копировать в новую запись не копирует вложения или вложенные повторы в новую запись. Это соответствует поведению, наблюдаемому при копировании записей опроса из папки Отправленные или Входящие в новую запись.
  • При сортировке табличных данных рекомендуется не редактировать значения в столбце, к которому применена сортировка, поскольку сортировка обновляется немедленно при каждом нажатии клавиши.
  • Если повторяющаяся таблица находится внутри группы, имеющей соответствующее выражение, то после того, как группа станет релевантной, ее табличное представление будет пустым.
  • В языках с письмом справа налево последовательность столбцов в табличном представлении не меняется на обратную, и заголовки столбцов не всегда выравниваются по правому краю.

Задание числа повторяющихся записей

Примечание:

В этом разделе описывается функциональность, доступная только в Survey123 Connect и полевых приложениях Survey123. Эта функциональность недоступна в Survey123 Studio или Survey123 Mobile.

Чтобы задать количество повторных записей в повторе, укажите число повторов, выполнив следующие действия:

  1. В строке, с которой вы желаете начать повтор, введите begin repeat в столбце type на вкладке survey.
  2. Укажите числовое значение количества повторов в столбце repeat_count.

    Вы также можете указать название вопроса или вычисление, возвращающее числовое значение.

  3. Введите имя для повтора в столбце name.
  4. В строках, располагающихся ниже, укажите вопросы, которые вы хотите включить в повтор.
  5. В последней строке введите begin repeat в столбце type.

Когда пользователь открывает опрос, количество повторов, заданных в столбце repeat_count, уже будет создано. Пользователи не могут создавать или удалять повторы.

Пользователи должны просмотреть все записи повторов, заданные значением repeat_count, перед отправкой ответа опроса. В противном случае не все повторные записи будут отправлены, поскольку выражения и значения по умолчанию не могут быть применены к повторам, пока пользователи не перейдут к записи. Чтобы убедиться, что все повторы заполнены, можно сделать вопрос в повторе обязательным. Вопросы в повторах, имеющие соответствующее или условно-зависимое выражение, не будут оцениваться при отправке.

Примечание:

Поведение повтора с изменяющимся числом повторов может быть различным, в зависимости от того, создает ли пользователь ответ опроса или редактирует уже данный ранее следующим образом:

  • При создании ответа на опрос в полевом приложении сверху повтора появляется кнопка удаления всех записей свыше нового числа повторов, содержащих данные. Пустые записи будут автоматически удалены. Независимо от того, нажата ли эта кнопка, при отправке ответа на опрос будут отправлены все записи, за исключением пустых.
  • При редактировании существующего ответа на опрос в в верхней части повтора полевого приложения появится сообщение, указывающее на то, что число записей не соответствует количеству повторов. Добавлять новые записи повторов можно только в случае, если для параметра allowAdds задано значение true в столбце bind::esri:parameters. Записи, превышающие количество повторений, не могут быть удалены, поскольку полевое приложение не поддерживает удаление существующих записей повторов. Отредактированные ответы на опрос можно отправлять даже в том случае, если число записей повторов не соответствует количеству повторений.

Функции агрегирования

Примечание:

В этом разделе описывается функциональность, доступная только в Survey123 Connect и полевых приложениях Survey123. Эта функциональность недоступна в Survey123 Studio или Survey123 Mobile.

Вы можете использовать функции агрегирования для возврата значений, полученных из ответов на вопросы в повторах. Чтобы это сделать, вопрос вне повтора должен ссылаться на вопрос внутри повтора. Например, следующая формула рассчитывает количество ответов на один вопрос внутри повторов:

count(${repeated_question})

Вы можете использовать следующие функции для агрегирования ответов:

  • count
  • sum
  • min
  • max
  • join

Эти функции применяются только к ответу текущего опроса. Они не берут в расчет другие записи в векторном слое. Также можно включить вопросы, которые используют sum и count. Однако поскольку значения sum и count будут вычисляться для каждой новой записи, добавленной в повтор, вычисления для предыдущих записей в повторе автоматически обновляться не будут. Эти вычисления можно обновить вручную с помощью кнопки Обновить рядом с вопросом. Использование min и max поддерживается только вне повтора.

Примечание:

При работе в полевом приложении Survey123 функции sum, count и join могут быть расположены внутри или вне повтора. Если sum, count и join используются в веб-приложении Survey123, они должны быть расположены снаружи повтора. Значение sum, count или join, расположенное снаружи повтора, может учитываться в вычислении внутри повтора.

Функция join может использоваться для связывания вопросов, которые возвращают строку. Функцию sum также можно использовать для соединения вопросов типа геоточка внутри повтора вопроса геотрассировка или геоформа за пределами повтора.

Дополнительные сведения об использовании этих функций см. в разделе Формулы.

Возврат индекса записи повтора

Функция position(..) может использоваться для возврата целого числа, отражающего индекс записи в повторе. Например, первая запись в повторе возвратит 1, вторая - 2 и так далее. В следующем примере функция position(..) используется в скрытом целочисленном вопросе в повторе:

Пример функции position (..) в XLSForm

Внимание:

Функция position(..) всегда возвращает 0 в Survey123 Mobile и полевом приложении Survey123 или 1 в веб-приложении Survey123 при использовании вне повтора или внутри группы, находящейся внутри повтора.

Вы также можете использовать функцию position(..) в выражении. В следующем примере функция selected-at() использует position(..) для возврата варианта, выбранного в вопросе select_multiple в том же положении, что и текущая запись повтора, и отображения варианта выбора в повторе в виде примечания. Функция selected-at() начинает отсчет вариантов с нуля, поэтому из position(..) нужно вычесть 1, чтобы следующим образом обеспечить совпадение индексов:

selected-at(${issues}, position(..)-1)

Пример функций position (..) и selected-at () в XLSForm

Вы можете использовать функцию position(..) в сочетании с indexed-repeat() для извлечения значений вопросов из определенных записей повторов.

Использование значений из индексированных повторов

Примечание:

В этом разделе описывается функциональность, доступная только в Survey123 Connect и полевых приложениях Survey123. Эта функциональность недоступна в Survey123 Studio или Survey123 Mobile.

Вы можете использовать функцию indexed-repeat() для возврата значения из определенного вопроса в записи повтора. Для этого необходимо имя вопроса, имя повтора и индексный номер повтора, в указанном порядке. В следующем примере возвращается ответ на вопрос room_no для третьей записи в повторе floor:

indexed-repeat(${room_no}, ${floor}, 3)

Вы можете использовать функцию indexed-repeat() для повторов внутри повторов. При таком использовании она будет получать только значения, доступные из видимого в данный момент родительского повтора.

Внимание:

Функцию indexed-repeat() невозможно использовать внутри повтора на который она ссылается, так как это приведет к циклической ссылке. Например, следующее выражение нельзя использовать для вычисления повтора, названного defects:

indexed-repeat(${defect_type}, ${defects}, 3)

Известные ограничения

При использовании повторов в Survey123 имеются некоторые известные ограничения и неожиданное поведение:

  • Если опрос содержит несколько повторов, и один из них содержит вопрос geopoint, geotrace или geoshape, то часто имена отношений публикуются не по порядку.
  • Вложенные повторы поддерживают только отношение один ко многим, и у каждого дочернего объекта может быть только один родительский.
  • Вложенные повторы с выражением в столбце relevant и выражением в столбце repeat_count удалят все существующие сохраненные данные в первой записи повтора. Чтобы избежать этого, включите релевантное выражение в выражение repeat_count, чтобы не создавать записи повторов, если повторение нерелевантно.
  • Редактирование отдельных ответов в веб-приложении Survey123 или на веб-сайте Survey123 не поддерживается для опросов, содержащих вложенные повторы.