Výběr ze souboru
select_one_from_file a select_multiple_from_file načítají volby dynamicky z externího CSV nebo XML souboru připojeného k formuláři.
select_one_from_file a select_multiple_from_file fungují jako select_one a select_multiple, ale místo definování voleb v listu choices jsou volby načítány z externího CSV nebo XML souboru připojeného k formuláři. To je užitečné, když je váš seznam voleb velmi dlouhý, často se mění nebo potřebuje být aktualizován bez přestavění celého formuláře.
Základní specifikace XLSForm
| type | name | label |
|---|---|---|
| select_one_from_file health_facilities.csv | facility | Vyberte zdravotnické zařízení |
| select_multiple_from_file crops.csv | crops | Které plodiny domácnost pěstuje? |
Název souboru za názvem typu musí odpovídat názvu souboru, který připojíte při nahrávání formuláře.
Formát CSV souboru
Váš CSV soubor musí mít alespoň dva sloupce: name (uložená hodnota) a label (zobrazený text). Můžete přidat libovolný počet dalších sloupců pro filtrování.
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
Filtrování voleb
Použijte sloupec choice_filter pro zobrazení pouze voleb odpovídajících aktuálnímu kontextu. Odkazujte sloupce CSV jejich názvem přímo (bez ${}):
| type | name | label | choice_filter |
|---|---|---|---|
| select_one districts.csv | district | Vyberte okres | |
| select_one_from_file health_facilities.csv | facility | Vyberte zařízení | district = ${district} |
V tomto příkladu se zobrazují pouze zařízení ve vybraném okrese. district v choice_filter odkazuje na sloupec district v CSV souboru; ${district} odkazuje na pole formuláře pojmenované district.
Použití
Otázky select-from-file se běžně používají pro:
- Dlouhé seznamy voleb — zdravotnická zařízení, školy, vesnice, seznamy druhů (stovky nebo tisíce položek)
- Často aktualizované seznamy — když se hlavní seznam mění mezi cykly průzkumu, aktualizujte pouze CSV bez přestavění formuláře
- Sdílená referenční data — jeden CSV soubor používaný napříč více formuláři
- Filtrované kaskádové výběry — načtěte všechny regiony/okresy/vesnice do jednoho souboru, pak filtrujte podle výběru nadřazeného
Připojení souboru
Při nahrávání formuláře do rtSurvey připojte CSV soubor jako mediální přílohu. Název souboru v definici formuláře musí přesně odpovídat názvu souboru přílohy.
Názvy souborů jsou citlivé na velikost písmen. Health_Facilities.csv a health_facilities.csv jsou považovány za různé soubory.
Použití choice-label() s from-file
Pro zobrazení popisku vybrané volby v poznámce nebo výpočtovém poli:
| type | name | label | calculation |
|---|---|---|---|
| select_one_from_file health_facilities.csv | facility | Vyberte zařízení | |
| calculate | facility_label | choice-label(${facility}, ${facility}) | |
| note | summary | Vybrané zařízení: ${facility_label} |
Osvědčené postupy
- Udržujte CSV soubory pod 5 000 řádky pro dobrý výkon na mobilních zařízeních.
- Vždy zahrňte sloupce
namealabel— další sloupce jsou volitelné. - Pro kaskádové výběry použijte jeden CSV s nadřazeným sloupcem a filtrujte pomocí
choice_filter. - Verzujte názvy CSV souborů (např.
facilities_v3.csv) při provádění zásadních změn struktury sloupce. - Pečlivě testujte výrazy filtrování — překlep v
choice_filterbude tiše zobrazovat žádné volby.
Omezení
- Velmi velké CSV soubory (10 000+ řádků) mohou zpomalit načítání formuláře, zejména na zařízeních nižší třídy.
- CSV soubory musí být nahrány spolu s formulářem — nemohou být načteny z URL za běhu (pro dynamická vyhledávání použijte
search()nebopulldata()). select_multiple_from_fileje méně běžně podporováno napříč klienty — před použitím ověřte kompatibilitu.
Srovnání se search()
select_one_from_file | Vzhled search() | |
|---|---|---|
| Zdroj voleb | Připojený CSV/XML soubor | Databázový dotaz na straně serveru |
| Funguje offline | Ano (soubor je přibalen) | Vyžaduje připojení |
| Počet voleb | Omezen pamětí zařízení | Neomezený (stránkovaný) |
| Data v reálném čase | Ne | Ano |
Pro velké, často se měnící nebo serverové datové sady viz Dynamické vyhledávání.