Contenido
Uso de llaves y parámetros para visualizar datos anteriores
Política de llaves en subformularios
Las llaves en los subformularios o grupos de repetición tienen gran importancia pues tienen relación directa con el comportamiento de los datos con respecto a la llave principal del formulario y por lo tanto pueden emplearse de diversas formas entre ellas la visualización de datos anteriores.
Primero indicar que la política de llaves en los subformularios sólo tiene sentido si la llave del formulario (main) es Combinar (merge) o Reemplazar (replace). Esto ya que, si el formulario no tiene llave, todos los registros se adicionan sin modificar los grupos de repetición.
La política de llaves en subformularios se usa para determinar un comportamiento distinto al de la tabla principal (main). La llave del subformulario es el número de repetición o ciclo respectivo.
Para aplicarlos, se define en parámetros la política de llave así. En el editor web:


En la plantilla XLS va así:

Las políticas llaves que aplican a los subformularios son:
- replace: Reemplazar. Cada registro del subformulario es progresivamente reemplazado por los nuevos registros.
key_policy=replace
2. merge: Combinar. Cada registro previamente almacenado es combinado con nuevos registros. A diferencia de replace, si el nuevo registro tiene una pregunta sin responder, entonces se mantiene el registro anterior de esa pregunta.
key_policy=merge
3. append: Anexar. Los nuevos registros del subformulario se agregan a los existentes.
key_policy=append
Cuando usar políticas de llave: Cómo se indicó arriba depende del comportamiento esperado. Por ejemplo si tiene subformularios para entrega de inventarios quizás espera que se mantengan siempre los mismos registros o se reemplacen. Pero si tiene subformularios para mantenimiento de equipos quizás desee que los nuevos registros se anexen a los anteriores.
Ejemplos: Este formulario tiene 2 preguntas q1 y q2 y un subformulario GrupoRep1 con política de llave key_policy = append.

El formulario tiene como llave q1 y política = merge definido en setttings

Si agregamos dos registros que tengan el mismo texto en q1 y el primer registro agrega 2 ciclos de repetición y el segundo 1, entonces en la tabla principal se verá que los registros se combinan, es decir si hay alguna pregunta sin responder en un registro, pero en otro si tiene datos, éste se agrega:

En el subformulario se anexan (suman) quedando 3:

Veamos que pasa si cambiamos la política del subformulario a key_policy = merge:
Si agregamos otro registro que tengan el mismo texto en q1 y no ingresamos ningún dato, entonces en la tabla principal se verá que los registros se combinan, es decir como la pregunta q2 no se respondió quedan con la respuesta anterior.

En el subformulario se combina quedando los mismos 3 anteriores:

Veamos que pasa si cambiamos la política del subformulario a key_policy = replace
Si agregamos otro registro que tengan el mismo texto en q1 e ingresamos sólo un dato en el subformulario entonces, en la tabla principal se verá que los registros se combinan, es decir como la pregunta q2 no se respondió quedan con la respuesta anterior.

En el subformulario al responder sólo un primer ciclo con datos. Entonces por la política de reemplazar deja sólo 1 repetición reemplazando los anteriores.

Política de llave por defecto
Si no se especifica una poIítica de llaves de un subformulario, entonces se aplica el valor por defecto. Este valor por defecto depende de si corresponde a una tarea o es una actualización simple de un registro existente.
En respuesta a una tarea y dado que explícitamente se está actualizando un registro y el usuario tiene acceso a los registros del subformulario, el valor por defecto será replace y los registros serán reemplazados con los nuevos datos.
Cuando se está actualizando un registro existente, por ejemplo ingresando la misma llave principal, probablemente el usuario no tiene acceso a los datos anteriores del subformulario. En este caso es razonable mantener key_policy = append y asegurar los datos existentes.
Parámetros en subformularios
Adicional a la política de llaves, existen varios parámetros que le permiten controlar la forma como se visualizan o puede acceder a subformularios lo cual le da una gran flexibilidad por ejemplo cuando tenga tareas activadas con datos preexistentes y quiera acceder a los subformularios sin poder modificar los anteriores o sólo visualizando el último etc.
Los parámetros disponibles son:
- ref: Subformulario de referencia. Esto indica que el subformulario hace referencia a otro subformulario dentro del mismo formulario. Esto permite acceder a datos existentes en modo sólo lectura.
ref=nombre_del_grupo_de_repetición
Los datos se acceden con el mismo nombre del subformulario referido anteponiendo como prefijo _ (Raya al piso) y como preguntas tipo texto. No se usa calculate porque los cálculos se realizan en los dispositivos y cuando hacemos referencia, estamos haciendo consultas a datos. En el ejemplo más adelante se entiende mejor el uso.
2. instance_order: Orden de registros. Define como se muestran los registros del subformulario. Puede ser forward (Adelante quiere decir del primero al último) o reverse (Reverso o sea del último al primero).
Instance_order=reverse
3. instance_count: Número de registros o repeticiones a mostrar. Cuando se define, permite limitar el número de repeticiones que verá el usuario al acceder a datos existentes. Por ejemplo, si cada visita es un registro de un subformulario y sólo queremos acceder a 1 entonces
Instance_count=1
En el editor web se define así:

Ejemplo
Se tiene un formulario Form1(Descargar aquí) igual al referido en la política de llaves.

Adicionalmente, se ha definido un grupo de tareas sencillo que usando los datos existentes de Form1 dispara un Form2

El formulario Form2 (Descargar Aquí) comparte datos con Form1. Tiene las siguientes características que le dan un efecto interesante:

Entre la fila 8 y 11 Hay un subformulario GrupoRep0 (Datos existentes) que hace referencia (consulta datos en modo lectura) del subformulario de la Fila 12 a 15. Por eso en Parámetros tiene ref=GrupoRep1, adicional tiene instance_count=1 e instance_order=reverse lo que significa que consultará los datos del subformulario trayendo sólo 1 registros y del último al primero. O sea, consultará sólo el último registro. La columna repeat_count o sea el número de veces de este grupo se ha establecido en 0, esto con el fin de que no aparezca + en Form. Web o en móvil no pregunte para adicionar más registros.
Dentro de este subformulario hay 2 preguntas tipo texto que empiezan por _ y son la referencia a los datos respectivos del GrupoRep1. Como son usadas simplemente para visualizar se han definido como de sólo lectura. El efecto entonces es que se traen los últimos datos del subformulario a manera de consulta.
En la fila 12 el Subformulario GrupoRep1 (Nuevos Datos) es el mismo original del formulario con los datos existentes Form1, pero se le han agregado estos parámetros instance_count = 0 y key_policy=append. La columna repeat_count está vacía. El efecto es que no mostrará ningún dato anterior, pero permite agregar más registros los cuales se adicionaran a los existentes.

