select_one_from_file и select_multiple_from_file работают как select_one и select_multiple, но вместо определения вариантов в листе choices варианты загружаются из внешнего CSV или XML файла, прикреплённого к форме. Это полезно, когда список вариантов очень длинный, часто меняется или требует обновления без пересборки всей формы.

Базовая спецификация XLSForm

typenamelabel
select_one_from_file health_facilities.csvfacilityВыберите медицинское учреждение
select_multiple_from_file crops.csvcropsКакие культуры выращивает домохозяйство?

Имя файла после имени типа должно совпадать с именем прикреплённого файла при загрузке формы.

Формат CSV-файла

CSV-файл должен иметь не менее двух столбцов: name (хранимое значение) и label (отображаемый текст). Можно добавлять любое количество дополнительных столбцов для фильтрации.

health_facilities.csv:

  name,label,district,type
HF001,Nairobi Central Clinic,Nairobi,clinic
HF002,Westlands Health Centre,Nairobi,health_centre
HF003,Kisumu District Hospital,Kisumu,hospital
  

Фильтрация вариантов

Используйте столбец choice_filter для отображения только вариантов, соответствующих текущему контексту. Ссылайтесь на столбцы CSV по их именам напрямую (без ${}):

typenamelabelchoice_filter
select_one districts.csvdistrictВыберите район
select_one_from_file health_facilities.csvfacilityВыберите учреждениеdistrict = ${district}

В этом примере отображаются только учреждения в выбранном районе. district в choice_filter ссылается на столбец district в CSV-файле; ${district} ссылается на поле формы с именем district.

Применение

Вопросы с выбором из файла обычно используются для:

  1. Длинных списков вариантов — медицинские учреждения, школы, сёла, списки видов (сотни или тысячи элементов)
  2. Часто обновляемых списков — когда основной список меняется между раундами опроса, обновляйте только CSV без пересборки формы
  3. Общих справочных данных — один CSV-файл используется в нескольких формах
  4. Фильтрованных каскадных выборов — загрузите все регионы/районы/сёла в одном файле, затем фильтруйте по родительскому выбору

Прикрепление файла

При загрузке формы в rtSurvey прикрепите CSV-файл как медиавложение. Имя файла в определении формы должно точно совпадать с именем файла вложения.

Использование choice-label() с from-file

Для отображения метки выбранного варианта в поле note или calculate:

typenamelabelcalculation
select_one_from_file health_facilities.csvfacilityВыберите учреждение
calculatefacility_labelchoice-label(${facility}, ${facility})
notesummaryВыбранное учреждение: ${facility_label}

Лучшие практики

  1. Держите CSV-файлы до 5000 строк для хорошей производительности на мобильных устройствах.
  2. Всегда включайте столбцы name и label — дополнительные столбцы необязательны.
  3. Для каскадных выборов используйте один CSV с родительским столбцом и фильтрацию через choice_filter.
  4. Версионируйте имена CSV-файлов (например, facilities_v3.csv) при внесении изменений в структуру столбцов.
  5. Тщательно тестируйте выражения фильтрации — опечатка в choice_filter молча покажет пустой список вариантов.

Ограничения

  • Очень большие CSV-файлы (10 000+ строк) могут замедлять загрузку формы, особенно на устройствах низкого класса.
  • CSV-файлы должны загружаться вместе с формой — их нельзя получить по URL во время выполнения (используйте search() или pulldata() для динамических поисков).
  • select_multiple_from_file менее широко поддерживается среди клиентов — перед использованием проверьте совместимость.
select_one_from_fileВнешний вид search()
Источник вариантовПрикреплённый CSV/XML файлСерверный запрос к базе данных
Работает офлайнДа (файл включён в пакет)Требует подключения
Количество вариантовОграничено памятью устройстваНеограниченно (с пагинацией)
Данные в реальном времениНетДа

Для больших, часто меняющихся или серверных наборов данных см. Динамический поиск.

Была ли эта страница полезной?