Select from file
select_one_from_file та select_multiple_from_file завантажують варіанти динамічно із зовнішнього CSV або XML файлу, прикріпленого до форми.
select_one_from_file та select_multiple_from_file працюють як select_one та select_multiple, але замість визначення варіантів у таблиці choices, варіанти завантажуються з зовнішнього CSV або XML файлу, прикріпленого до форми. Це корисно, коли ваш список варіантів дуже довгий, часто змінюється або потребує оновлення без перебудови всієї форми.
Базова специфікація XLSForm
| type | name | label |
|---|---|---|
| select_one_from_file health_facilities.csv | facility | Select the health facility |
| select_multiple_from_file crops.csv | crops | Which crops does the household grow? |
Назва файлу після назви типу повинна відповідати назві файлу, який ви прикріплюєте під час завантаження форми.
Формат 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 безпосередньо за їх назвою стовпця (без ${}):
| type | name | label | choice_filter |
|---|---|---|---|
| select_one districts.csv | district | Select district | |
| select_one_from_file health_facilities.csv | facility | Select facility | district = ${district} |
У цьому прикладі показуються лише заклади у вибраному районі. district у choice_filter посилається на стовпець district у CSV файлі; ${district} посилається на поле форми з назвою district.
Використання
Питання select-from-file зазвичай використовуються для:
- Довгих списків варіантів — заклади охорони здоров’я, школи, села, списки видів (сотні або тисячі елементів)
- Часто оновлюваних списків — коли основний список змінюється між раундами опитування, оновлюйте лише CSV без перебудови форми
- Спільних довідкових даних — один CSV файл використовується в кількох формах
- Фільтрованих каскадних виборів — завантажте всі регіони/райони/села в один файл, потім фільтруйте за батьківським вибором
Прикріплення файлу
Коли ви завантажуєте форму до rtSurvey, прикріпіть CSV файл як медіа-вкладення. Назва файлу у визначенні форми повинна точно відповідати назві файлу вкладення.
Назви файлів чутливі до регістру. Health_Facilities.csv та health_facilities.csv розглядаються як різні файли.
Використання choice-label() з from-file
Для відображення мітки обраного варіанту в полі note або calculate:
| type | name | label | calculation |
|---|---|---|---|
| select_one_from_file health_facilities.csv | facility | Select facility | |
| calculate | facility_label | choice-label(${facility}, ${facility}) | |
| note | summary | Selected facility: ${facility_label} |
Найкращі практики
- Тримайте CSV файли до 5 000 рядків для хорошої продуктивності на мобільних пристроях.
- Завжди включайте стовпці
nameтаlabel— додаткові стовпці необов’язкові. - Для каскадних виборів використовуйте один CSV з батьківським стовпцем та фільтруйте за допомогою
choice_filter. - Версіонуйте ваші CSV назви файлів (наприклад,
facilities_v3.csv) при внесенні змін, що порушують структуру стовпців. - Ретельно тестуйте вирази фільтрації — помилка друку в
choice_filterмовчазно показуватиме жодних варіантів.
Обмеження
- Дуже великі CSV файли (10 000+ рядків) можуть уповільнити завантаження форми, особливо на пристроях нижчого класу.
- CSV файли повинні завантажуватися разом з формою — їх неможливо отримати з URL під час виконання (використовуйте
search()абоpulldata()для динамічних пошуків). select_multiple_from_fileменш поширено підтримується в різних клієнтах — перевіряйте сумісність перед використанням.
Порівняння з search()
select_one_from_file | Appearance search() | |
|---|---|---|
| Джерело варіантів | Прикріплений CSV/XML файл | Серверний запит до бази даних |
| Працює офлайн | Так (файл в комплекті) | Потребує підключення |
| Кількість варіантів | Обмежена пам’яттю пристрою | Необмежена (з пагінацією) |
| Дані в реальному часі | Ні | Так |
Для великих, часто змінюваних або серверних наборів даних дивіться Динамічний пошук.