Valg fra fil
select_one_from_file og select_multiple_from_file indlæser valgmuligheder dynamisk fra en ekstern CSV- eller XML-fil vedhæftet formularen.
select_one_from_file og select_multiple_from_file fungerer ligesom select_one og select_multiple, men i stedet for at definere valgmuligheder i regnearket choices indlæses valgmulighederne fra en ekstern CSV- eller XML-fil vedhæftet formularen. Dette er nyttigt, når din valgliste er meget lang, ændres hyppigt, eller skal opdateres uden at genopbygge hele formularen.
Grundlæggende XLSForm-specifikation
| type | name | label |
|---|---|---|
| select_one_from_file health_facilities.csv | facility | Vælg sundhedsfacilitet |
| select_multiple_from_file crops.csv | crops | Hvilke afgrøder dyrker husstanden? |
Filnavnet efter typenavnet skal matche navnet på den fil, du vedhæfter, når du uploader formularen.
CSV-filformat
Din CSV-fil skal have mindst to kolonner: name (den gemte værdi) og label (den viste tekst). Du kan tilføje et vilkårligt antal ekstra kolonner til filtrering.
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
Filtrering af valgmuligheder
Brug kolonnen choice_filter til kun at vise valg, der matcher den aktuelle kontekst. Referer til CSV-kolonner direkte med deres kolonnenavn (ingen ${}):
| type | name | label | choice_filter |
|---|---|---|---|
| select_one districts.csv | district | Vælg distrikt | |
| select_one_from_file health_facilities.csv | facility | Vælg facilitet | district = ${district} |
I dette eksempel vises kun faciliteter i det valgte distrikt. district i choice_filter refererer til kolonnen district i CSV-filen; ${district} refererer til formularfeltet med navnet district.
Anvendelser
Vælg-fra-fil-spørgsmål bruges typisk til:
- Lange valglister — sundhedsfaciliteter, skoler, landsbyer, artsister (hundreder eller tusinder af elementer)
- Hyppigt opdaterede lister — når masterlisten ændres mellem undersøgelsesrunder, opdateres kun CSV’en uden at genopbygge formularen
- Delte referencedata — én CSV-fil brugt på tværs af flere formularer
- Filtrerede kaskadevalg — indlæs alle regioner/distrikter/landsbyer i én fil, filtrer derefter efter det overordnede valg
Vedhæftning af filen
Når du uploader din formular til rtSurvey, vedhæftes CSV-filen som en medievedhæftning. Filnavnet i formulardefinitionen skal nøjagtigt matche filnavnet på vedhæftningen.
Filnavne er versalfølsomme. Health_Facilities.csv og health_facilities.csv behandles som forskellige filer.
Brug af choice-label() med from-file
For at vise labelen for et valgt valg i en note eller et beregningsfelt:
| type | name | label | calculation |
|---|---|---|---|
| select_one_from_file health_facilities.csv | facility | Vælg facilitet | |
| calculate | facility_label | choice-label(${facility}, ${facility}) | |
| note | summary | Valgt facilitet: ${facility_label} |
Bedste praksis
- Hold dine CSV-filer under 5.000 rækker for god ydelse på mobilenheder.
- Inkluder altid en
name- oglabel-kolonne — yderligere kolonner er valgfrie. - Til kaskadevalg bruges en enkelt CSV med en overordnet kolonne og filtrering med
choice_filter. - Versionér dine CSV-filnavne (f.eks.
facilities_v3.csv) ved brudsændringer i kolonnestrukturen. - Test filtreringsudtryk omhyggeligt — en tastefejl i
choice_filterviser tavst ingen valg.
Begrænsninger
- Meget store CSV-filer (10.000+ rækker) kan sænke formularindlæsningen, især på lavspecifikke enheder.
- CSV-filer skal uploades sammen med formularen — de kan ikke hentes fra en URL ved kørselstid (brug
search()ellerpulldata()til dynamiske opslag). select_multiple_from_fileunderstøttes ikke så bredt på tværs af klienter — verificer kompatibilitet inden brug.
Sammenligning med search()
select_one_from_file | search()-appearance | |
|---|---|---|
| Valgkilde | Vedhæftet CSV/XML-fil | Serverside-databaseforespørgsel |
| Fungerer offline | Ja (fil er bundtet) | Kræver forbindelseskvalitet |
| Antal valg | Begrænset af enhedshukommelse | Ubegrænset (pagineret) |
| Realtidsdata | Nej | Ja |
For store, hyppigt skiftende eller serverside-datasæt, se Dynamisk søgning.