Contenido


Desde archivos .csv
Cuando las listas de selección son muy largas o cambian con frecuencia, KONTROLID provee una manera más eficiente de hacerlo y es a través de la definición de dichas lista de opciones desde un archivo csv precargado. Hay una ventaja adicional en este método y es que los valores almacenados pueden contener espacios o caracteres especiales.
El proceso es el siguiente:
1- Establecer el archivo fuente que contiene la lista de selección: Generalmente los archivos que se usan, provienen de exportaciones desde el ERP o de otros sistemas tales como Maestros de Clientes / Puestos / Productos / Empleados, etc y se encuentran como archivos de Excel, en forma tabular como tablas o bases de datos con una fila de campos o cabeceras y los registros en cada fila.

2- Eliminar información innecesaria y ajustar encabezados a una sóla palabra sin caracteres especiales: Generalmente hay que hacer algunos ajustes de edición en los archivos antes de usar para que puedan ser utilizados. Los ajustes más comunes son asegurar que los nombres de los campos o cabeceras no contengan espacios ni caracteres especiales. En el ejemplo de arriba, Dirección y Teléfono deben eliminarse las tildes. También es importante hacer limpieza de espacios innecesarios (Puede usar funciones en excel como +espacios() y/o +limpiar().
También se debe verificar si todas las columnas del archivo original son necesarias, dependiendo del uso a dar, podría obviar algunas columnas.
Otro aspecto a considerar es que todas las columnas deben tener su correspondiente campo o cabecera.

3- Convertir el archivo a CSV UTF-8 para que sea usable: Finalmente el archivo debe guardarse como .csv (CSV = Comma Separated Values o valores separados por comas) con codificación UTF-8 . En Excel 365 la conversión es inmediata. En otras versiones de excel puede requerir otros procesos o incluso usar otros programas tipo Notepad ++

Así luce el archivo en formato csv visto con Notepad++:

Se puede verificar o convertir sí es otra versión de excel a UTF-8 en Notepad++ con Codificación:

4- El archivo tipo csv se sube a Recursos Compartidos, de manera similar a las imágenes:

Y así queda listo para usar en las preguntas de selección que lo requieran.
Nota: La subida o carga de los archivos a recursos compartidos también puede hacerse a través del API para subir datos a recursos compartidos.
Al estar en Recursos Compartidos, el archivo csv estará disponible en el dispositivo móvil si y sólo sí un formulario contiene alguna pregunta que lo requiera.
Cuando se sincronizan los formularios, también se sincronizan y descargan los archivos csv que hayan tenido cambios.
Nota: Tenga en cuenta que los archivos .csv quedan descargados y almacenados en cada dispositivo, por lo tanto para efectos de confidencialidad de información debe tomar las medidas que considere necesaria y/o consultar las alternativas online.
La ruta de almacenamiento es local -> Android-> data -> org.smap.smapTask.android.kontrolid -> files-> Nombre del formulario
Cómo se usa (visualiza)

En Dispositivo móvil:
La visualización en el móvil de una pregunta de selección dinámica o desde archivo externo es similar a la selección estática con opciones en el formulario, aunque puede contener más elementos tales como: Campos adicionales (Aparecen entre paréntesis con el nombre del campo), Campos estáticos (Adicionales a los del archivo csv) que pueden incluso ser formateados con etiquetas HTML (ver ejemplo abajo en rojo):

En Form web:

Nota: El orden en que aparece la lista de selección es el mismo orden en que se encuentra el campo en el archivo csv. Sí requiere un orden diferente debe asegurarse de ordenar el archivo en Excel antes de convertirlo a csv o en su defecto agregar una columna adicional llamada sortby que establezca el orden.

Cómo se usa (visualiza) – En Dispositivo móvil y web con orden modificado con columna sortby

Advertencia: Si usa un campo que contiene valores con espacios en una selección múltiple le genera una advertencia, ya que esos espacios internos no podrán ser diferenciados de los espacios entre valores. Por eso en selecciones múltiples debe escoger campo con valores sin espacios. Ej: Maria la bandida Lola Flórez

Cómo se diseña (define en un formulario):
En Editor Web:
Si ya ha completado la carga del archivo csv en Recursos compartidos sólo tiene que escoger en la pregunta de selección en apariencia lo siguiente:
Buscar , Fuente CSV y en acceso seleccione Offline y Online:

Luego seleccione el archivo

En la lista de selección va como opción el campo a capturar y en la etiqueta de selección, el campo a mostrar. En el editor web, en apariencia, van apareciendo opciones a medida que va escogiendo. Así una vez escogido el nombre del archivo CSV por ejemplo: EjemploCSV.csv se puede escoger como Opción alguno de los campos del archivo csv. Este será el valor que se almacene como respuesta.

Luego como etiqueta de selección escoge alguno de los campos del archivo csv. Este será el valor visible al usuario cuando vaya a seleccionar:

El resultado se ve así:

En la lista de selección va como nombre el campo a capturar y en la etiqueta el campo a mostrar. Es posible agregar más campos a mostrar incluyendo otros manualmente separados por comas. Los campos deben escribirse tal cual están en las cabeceras del archivo csv.
También se pueden incluir campos estáticos (o sea como las listas de selección normales) colocando como nombre (opción) un valor numérico. Este valor puede ir antes o después de la lista dinámica. Ver ejemplo siguiente:

En Plantilla Excel:
En la pestaña survey en la columna appearance coloque en la función search() y entre comillas simples el nombre del archivo csv sin la extensión:

En la pestaña choices coloque en la columna Name el campo que va tener la respuesta y en label el(los) campo(s) que va a visualizar:

Para incluir campos estáticos debe colocar como nombre (opción) un valor numérico. Este valor puede ir antes o después de la lista dinámica.
Nota: Todos los valores que devuelve las preguntas de selección desde archivos externos son considerados como TEXTOS independiente de que luzcan como números. Por eso deberá usar funciones de conversión sí necesita tratarlos como números.
Datos externos con filtro


Puede incluir filtros en los archivos csv para mostrar una lista de opciones más reducida. Para esto hay dos modos de realizarse:
1- Con filtro simple.
2- Con filtro simple más extendido.
1- Con filtro simple:
En apariencia se debe agregar en la función search lo siguiente:
search(‘nombrearchivo’,’criterio de coincidencia’,’nombre campo’,’valor’)
criterio de coincidencia: Define el modo como se filtran los valores y son:
- ‘matches’ : (Coincidencia Exacta) Cuando se necesita coincidencia EXACTA (Este es el criterio más usado)
- ‘in’: (En – Pertenece a) Cuando el valor está contenido en un subgrupo
- ‘not in’: (No pertenece) Cuando el valor NO está contenido en un subgrupo
- ‘contains’ : (Contiene) Cuando el valor contiene el texto
- ‘startswith’: (Empieza con) Cuando el valor empieza por el texto
- ‘endswith’: (Finaliza con) Cuando el valor termina por el texto
- ‘eval’ (requiere versión móvil 6.505 and versión del servidor 21.09)
Nota: En formularios web solo funcionan ‘in’ y ‘not in’.
Ejemplo:
Usando el archivo csv siguiente, vamos a usar un filtro para desplegar como opciones sólo los registros de la Ciudad de Barranquilla.

Ejemplo 2: uso de ‘in’
En este ejemplo usaremos primero una selección múltiple y luego una selección única que muestre los ítems únicamente contenidos en la selección múltiple. Para esto hemos incluido un campo adicional en el archivo csv de ejemplo ya que no podemos usar los nombres por los espacios que contiene.

Cómo se usa (visualiza)
En Dispositivo móvil:
Ejemplo:

Cómo se diseña (define en un formulario):
En Editor Web:
En el Editor Web ahora es más fácil incluir filtros en las selecciones dinámicas, ya que éstos aparecen como selecciones (opcionales) cuando se incluye apariencia.
Seleccione la columna por la cual va a filtrar:

Selecciona el tipo de filtro:

Y luego la variable o valor a filtrar. Sí es un valor estático, simplemente coloca éste como valor de filtro:

El resultado que ve es éste:

En caso de ser un valor dinámico, contenido como resultado de una pregunta, entonces se escoge la pregunta, y automáticamente se construye ésta:

El resultado se ve así:

En Plantilla Excel:
Ejemplo 1 y 2


El siguiente video muestra el diseño y funcionamiento completo del ejemplo 2:
Criterio ‘eval’:
Para el uso del criterio eval, es decir, para el uso de expresiones en el caso particular de search se debe mantener el número de parámetros, por ejemplo para un filtro simple de cuatro parámetros estos deben mantenerse, de forma tal que la sintaxis es:
search('fuente', 'eval',"expresion",'eval')
Ejemplo
search('producto', 'eval', "cast(#{edad} as integer) > ${min_edad} and cast(#{edad} as integer) < ${max_edad}", 'eval')
este ejemplo devuelve todas las personas cuya edad se encuentre entre los valores seleccionados en las preguntas min_edad y max_edad.
2- Con filtro extendido:
En apariencia se puede agregar un segundo filtro en la función search. Este filtro sólo actúa con criterio coincidencia exacta ‘matches’ y sólo requiere definirse la otra columna y el otro valor.
search(‘nombrearchivo’,’criterio de coincidencia’,’nombre campo’,’valor’,’nombre campo 2’,’valor2’)
Cómo se usa (visualiza)
En Dispositivo móvil:
En el siguiente ejemplo veremos solo las personas de Barranquilla que tengan como dirección Calle 5.

Cómo se diseña (define en un formulario)
En Editor Web:

El valor del filtro puede ser igual que el principal estático colocando el valor en el cuadro de texto o seleccionando una pregunta sí será dinámico basado en la respuesta a una pregunta anterior.

En Plantilla Excel:
En apariencia definimos este segundo filtro:

Advertencia: Si bien por lo general es una buena práctica y además una recomendada y frecuente que si dos o más preguntas de selección hacen referencia a la misma lista solo es necesario colocar una lista de opciones. Esto solo aplica cuando las opciones de la lista son estáticas, es decir, cuando se colocan directamente en el formulario.
Cuando las opciones de las listas son dinámicas es decir, se emplea la apariencia search o lookup_choices, por el contrario, se recomienda que cada pregunta tenga su propia lista, incluso si las opciones de la lista son las mismas, de lo contrario pueden presentarse errores.
Por ejemplo si usted tiene el siguiente formulario:


Si bien ambas preguntas usan el mismo recurso compartido y ambas tienen las mismas opciones, existe una lista Ciudad y una Ciudad2 para evitar conflictos y errores.
Criterio ‘eval’:
También es posible aplicar el criterio’eval’ con filtros avanzados, y de igual forma se debe mantener el número de parámetros, ya que para este caso es 6 la sintaxis es:
search('fuente', 'eval',"expresion",'eval','nombre campo 2','valor2)
Ejemplo
search('producto', 'eval', "cast(#{edad} as integer) > ${min_edad} and cast(#{edad} as integer) < ${max_edad}", 'eval', 'region', ${region})
Este ejemplo es similar al filtro simple, pero esta vez solo devuelve las personas cuyas edades coinciden y también están en la región seleccionada. Sin embargo, este no es un caso muy util ya que es posible remplazar este formato de “filtro extendido” con una única evaluación como: search (‘producto’, ‘eval’, “# {edad}> $ { min_edad } y # {edad} <$ { max_edad } y $ {region} = # {region} “, ‘eval’)
Ejemplos:
| Filtro | Appearance | Comentarios |
|---|---|---|
| matches | search(‘ubicaciones’, ‘matches’, ‘region_v’, ${region} | Busca en el archivo de ubicaciones todas las filas donde la columna region_v es la misma que la respuesta a la pregunta “region” |
| in | search(‘producto’, ‘in’, ‘categoria’, ${categoria}) | Devuelve todos los productos cuya categoría se encuentra en la lista de categorias que se seleccionan en la pregunta de selección múltiple “categoria”. |
| eval | search(‘producto’, ‘eval’, “cast(#{edad} as integer) > ${minimo} and cast(#{edad} as integer) < ${maximo}”, ‘eval’) | Devuelve todas las personas cuya edad se encuentra entre los valores seleccionados en las preguntas minimo y maximo. #{nombre} se refiere a una columna en los datos que está buscando. El cuarto parámetro se ignora para un filtro de evaluación, por lo que simplemente se configura en ‘eval’ nuevamente en este ejemplo. |
| eval and matches | search(‘producto’, ‘eval’, “cast(#{edad} as integer) > ${minimo} and cast(#{edad} as integer) < ${maximo}”, ‘eval’, ‘region’, ${region}) | Similar al ejemplo de eval anterior, pero esta vez solo devuelve personas cuyas edades coinciden y también están en la región seleccionada. Siempre puede reemplazar este formato de “doble filtro” con una sola evaluación como: search(‘producto’, ‘eval’, “#{edad} > ${minimo} and #{edad} < ${maximo and $ {region} = #{region}”, ‘eval’) |
