En este tema se describe cómo se implementa un bucle registrado en el flujo registrado en el caso iterativo, es decir, cuando selecciona el recuadro de selección Extraer datos cada iteración del bucle en la ventana Seleccionar variable.
La implementación que se describe en este tema se realiza además de la implementación que se describe en el tema Bucle registrado: Caso no iterativo.
La variable de índice de bucle (a diferencia de la variable de bucle que se describe en el tema Bucle registrado: Caso no iterativo) impide que un bucle While se ejecute en más iteraciones que el número de instancias de una variable Extraer.
El registrador del bucle (el editor de host) crea la variable de índice de bucle cuando selecciona Extraer datos cada iteración del bucle en la ventana Seleccionar variable. El tipo de datos de la variable de índice de bucle es un entero. El nombre se forma añadiendo el sufijo _index al nombre de la variable de bucle que ha especificado, por ejemplo, LoopVar_index.
En el nodo Init, se añade una segunda correlación para inicializar la variable de índice de bucle en 0 (consulte la sección Nodo Init, nodo While y nodo Parse).
(v_Dfh0xs1_Exmenu_Exmenu.strLoopVar = 'TRUE') AND (v_Dfh0xs1_Exmenu_Exmenu.strLoopVar_index < 8)El valor del número máximo de iteraciones es el valor que se especifica en el campo Número máximo de iteraciones de la ventana Seleccionar variable (consulte la sección Número máximo de iteraciones).
En el nodo Parse, se añade otro terminal de salida (como primer terminal de salida) para manejar el caso en el que el nodo While termina el bucle porque se excede el número máximo de iteraciones.
El flujo de control sale del nodo Parse por este terminal de salida si la pantalla reconocida es la pantalla Iniciar bucle. (El motivo de este diseño es que si el bucle While termina y se muestra la pantalla Iniciar bucle, en lugar de la pantalla Salir de bucle, el nodo While debe terminar el bucle porque se ha excedido el número máximo de iteraciones).
Como existe una condición de error (el bucle se termina porque se ha excedido el número máximo de iteraciones), la conexión del primer terminal de salida pasa directamente al nodo Reply, o al nodo Assign inmediatamente anterior al nodo Reply, si existe (como en la Figura 1).
Se realizan los siguientes cambios en el flujo invocado:
v_Dfh0xs1_Exmenu_Exmenu_33.strLoopVar_index
("EndPage"."INQ2-DESC" IS NOT NULL) AND ("v_Dfh0xs1_Exmenu_Exmenu_43"."variable0_index" <= 8)Por lo tanto, en el tiempo de ejecución, la acción Extraer de la pantalla Salir de bucle no se ejecutará si el valor de la variable de índice de bucle es demasiado grande.
La correlación de extracción se almacena en el terminal de salida del nodo Parse que se conecta al terminal de entrada del nodo de operación de pantalla Invoke de la pantalla Salir de bucle. (La correlación para implementar una acción Extraer se almacena en la rutina de correlación de un terminal de salida del nodo Assign o el nodo de operaciones de pantalla Invoke anterior; consulte el tema Implementación de acciones Extraer y acciones Insertar.)