9.3 Looptimes: Opción avanzada

Opciones avanzadas


 
En esta sección encontrarás:

1. Looptimes

La configuración de Looptime permite que una acción en el flujo se ejecute varias veces, por ejemplo, insertando múltiples registros en una tabla con una sola acción.

Funcionamiento del Looptime

El Looptime se configura en acciones de flujo de tipo Evento ("type": "event"). Se añade junto a los objetos id, type y data en la acción, como se muestra en el siguiente ejemplo:
{ "text": "Registra Rechazo - Máquinas y Herramientas - interno", "id": "A4", "type": "event", "loopTimes": "_TRIGGER.control.procesos_probados", "data": {...} }
El valor de loopTimes corresponde a un campo tipo CHECKBOX en el formulario y le indica al programa cuántas veces ejecutar la acción, basado en el número de opciones seleccionadas en el checkbox.
 

Uso del @index@

Una aplicación práctica del loopTimes permite crear un registro individual para cada una de las selecciones se hayan hecho en los campos tipo CHECKBOX, MULTIPLE o TABLE.
Ejemplo: Crear un registro por cada usuario seleccionado en un campo MULTIPLE
Cuando utilizamos un campo de tipo MULTIPLE, debemos tener en cuenta que los datos de estos campos se estructuran de la siguiente manera:
<seccion>.@index@.<key_campo>.key/id/label.
En esta estructura:
  • @index@ actúa como un contador que comienza en 0 y finaliza en el número total de registros seleccionados (.size).
  • Esto permite recorrer cada selección y generar un registro independiente para cada una
 
Configuración en los atributos de "parameters"
Para implementar esta funcionalidad, es necesario definir los atributos dentro de la sección "parameters": [].
A continuación, se presenta un ejemplo donde el campo colab de la sección colaboradores es de tipo MULTIPLE:
"parameters": [ { "value": "#_TRIGGER.colaboradores.colab.@[email protected]#", "key": "USR_RUT" } ]
 

Consideraciones Importantes

El looptimes no puede quedar vacío. Si no se usa, no debe agregarse en el código.
  • loopTimes determina cuántas veces se repetirá la acción o método.
  • Si no se establece, se asume una sola iteración.
  • Si el valor proviene de un dato del formulario, debe ir entre ##.
  • Si el valor es numérico, se utiliza ese valor para iterar.
  • Si el valor no es numérico y contiene tag (#seccion.campo#), se utiliza el valor de la variable.
  • Si el valor no es numérico y no contiene tag, se asume que es el nombre de un objeto MULTIPLE, CHECKBOX o TABLE, iterando sobre sus valores hasta la propiedad .size.
  • No es necesario añadir .size al final del dato cuando el campo del formulario es de tipo MULTIPLE, CHECKBOX o TABLE; se añade automáticamente.
 

2. QueryClones

Es una propiedad que permite en los Formularios mostrar X cantidad de campos dependiendo de X selecciones en algún campo tipo MULTIPLE, MULTIPLE_REORDER, CHECKBOX o TABLE.
Para su correcto funcionamiento se debe configurar en el Formulario y en el Flujo de trabajo correspondiente.
La key de los campos clones creados deben tener la siguiente forma: clone_<indice>_<key_del_campo_madre> por ejemplo: “clone_0_INCL_CRE”.
Para insertar los valores en la BD utilizando la acción del flujo de type : event se debe seguir la siguiente estructura:
{ "key": "INCL_CRE", "value": "#_TRIGGER.componentes.clone_@index@_INCL_CRE#" },
El @index@ se ejecutará la cantidad de veces que el “loopTimes” indique.
 

Ejemplo

En este caso el campo COMPS_RECE es de tipo CHECKBOX.
"loopTimes": "_TRIGGER.general.COMPS_RECE.size",
Para insertar valores en la BD usando los valores de los clones operados matemáticamente puede hacerse de la siguiente manera:
{ "key": "CONS_HR_CRE", "value": "js(#_TRIGGER.general.KG_HORA_RECE# * #_TRIGGER.componentes.clone_@index@_INCL_CRE#)" }, { "key": "KG_X_BATCH_CRE", "value": "js(#_TRIGGER.general.VOL_BATCH_RECE# * #_TRIGGER.componentes.clone_@index@_INCL_CRE#)" }, { "key": "KG_COMP_VACA_CRE", "value": "js(#_TRIGGER.general.KG_V_D_RECE# * #_TRIGGER.componentes.clone_@index@_INCL_CRE#)" },