Seleccionar desde archivo
select_one_from_file y select_multiple_from_file cargan opciones dinámicamente desde un archivo CSV o XML externo adjunto al formulario.
select_one_from_file y select_multiple_from_file funcionan como select_one y select_multiple, pero en lugar de definir las opciones en la hoja de trabajo choices, las opciones se cargan desde un archivo CSV o XML externo adjunto al formulario. Esto es útil cuando su lista de opciones es muy larga, cambia con frecuencia o necesita actualizarse sin reconstruir todo el formulario.
Especificación básica de XLSForm
| type | name | label |
|---|---|---|
| select_one_from_file health_facilities.csv | facility | Seleccione el establecimiento de salud |
| select_multiple_from_file crops.csv | crops | ¿Qué cultivos produce el hogar? |
El nombre del archivo después del nombre del tipo debe coincidir con el nombre del archivo que adjunta al cargar el formulario.
Formato del archivo CSV
Su archivo CSV debe tener al menos dos columnas: name (el valor almacenado) y label (el texto mostrado). Puede agregar cualquier número de columnas adicionales para filtrado.
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
Filtrado de opciones
Use la columna choice_filter para mostrar solo las opciones que coincidan con el contexto actual. Referencie las columnas del CSV directamente con su nombre de columna (sin ${}):
| type | name | label | choice_filter |
|---|---|---|---|
| select_one districts.csv | district | Seleccionar distrito | |
| select_one_from_file health_facilities.csv | facility | Seleccionar establecimiento | district = ${district} |
En este ejemplo, solo se muestran los establecimientos en el distrito seleccionado. El district en choice_filter hace referencia a la columna district en el archivo CSV; ${district} hace referencia al campo del formulario llamado district.
Usos
Las preguntas de selección desde archivo se usan comúnmente para:
- Listas de opciones largas — establecimientos de salud, escuelas, pueblos, listas de especies (cientos o miles de elementos)
- Listas actualizadas frecuentemente — cuando la lista maestra cambia entre rondas de encuestas, actualice solo el CSV sin reconstruir el formulario
- Datos de referencia compartidos — un archivo CSV usado en múltiples formularios
- Selecciones en cascada filtradas — cargar todas las regiones/distritos/pueblos en un archivo, luego filtrar por la selección padre
Adjuntar el archivo
Cuando cargue su formulario a rtSurvey, adjunte el archivo CSV como un archivo adjunto multimedia. El nombre del archivo en la definición del formulario debe coincidir exactamente con el nombre del archivo adjunto.
Los nombres de archivo distinguen mayúsculas de minúsculas. Health_Facilities.csv y health_facilities.csv se tratan como archivos diferentes.
Uso de choice-label() con from-file
Para mostrar la etiqueta de una opción seleccionada en una nota o campo de cálculo:
| type | name | label | calculation |
|---|---|---|---|
| select_one_from_file health_facilities.csv | facility | Seleccionar establecimiento | |
| calculate | facility_label | choice-label(${facility}, ${facility}) | |
| note | summary | Establecimiento seleccionado: ${facility_label} |
Mejores prácticas
- Mantenga sus archivos CSV con menos de 5,000 filas para buen rendimiento en dispositivos móviles.
- Incluya siempre una columna
nameylabel; las columnas adicionales son opcionales. - Para selecciones en cascada, use un solo CSV con una columna padre y filtre con
choice_filter. - Versione los nombres de sus archivos CSV (p. ej.,
facilities_v3.csv) al hacer cambios importantes en la estructura de columnas. - Pruebe cuidadosamente las expresiones de filtrado; un error tipográfico en
choice_filtermostrará silenciosamente sin opciones.
Limitaciones
- Los archivos CSV muy grandes (10,000+ filas) pueden ralentizar la carga del formulario, especialmente en dispositivos de gama baja.
- Los archivos CSV deben cargarse junto con el formulario; no se pueden obtener desde una URL en tiempo de ejecución (use
search()opulldata()para búsquedas dinámicas). select_multiple_from_filees menos comúnmente compatible entre clientes; verifique la compatibilidad antes de usarlo.
Comparación con search()
select_one_from_file | Apariencia search() | |
|---|---|---|
| Fuente de opciones | Archivo CSV/XML adjunto | Consulta de base de datos del servidor |
| Funciona sin conexión | Sí (archivo incluido) | Requiere conectividad |
| Conteo de opciones | Limitado por memoria del dispositivo | Ilimitado (paginado) |
| Datos en tiempo real | No | Sí |
Para conjuntos de datos grandes, que cambian frecuentemente o del lado del servidor, consulte Búsqueda dinámica.