Bienvenidos a Iseries Venezuela

Las mejores prácticas, recursos, tips, enlaces, videos y artículos para informáticos relacionados con el Iseries y el As/400 lenguajes de programación RPG, ILE RPG y SQL.

The best practices, resources, tips, links, videoes and articles for computer related to the Iseries and the As/400 languages of programming RPG, ILE RPG and SQL.

Wednesday, August 19, 2009

Barra de Progreso




















No es usual encontrar en RPG algunas pantallas que den en forma de "Barra de progreso" el avance en la ejecución de un requerimiento solicitado por el usuario interactivamente.

Las Barras de Progreso son típicas de Windows y otras plataformas que muestran al usuario una barra horizontal seguida de un porcentaje que indica cuanto falta para que el software o el proceso que esta ejecutándose termine.
En la figura pueden ver la barra de progreso.

En RPG, si queremos hacer una barra de progreso, podemos declarar en la pantalla del SDA una variable alfabética por ejemplo de 50 posiciones. Llamemos a esta variable: GRAFICA. Es decir, declaramos GRAFICA A 50 En el programa RPG declaramos una variable llamada BARRA de 50 posiciones que la inicializamos con algún carácter de relleno, por ejemplo, asterisco (*).

Move '*' *all BARRA.

Si tenemos contabilizado el total de procesos que deben ejecutarse para que termine todo el proceso inicializamos la variable TOTAL con ese valor. Supongamos: move 1000 TOTAL. De manera que, se requiere que se ejecuten 1000 procesos para que la solicitud del usuario sea completada.

Si la barra de avance fue declarada de 50 posiciones y tenemos 1000 procesos hay dos preguntas básicas a responder:

1.- ¿Cómo reflejar el porcentaje de 1000 ejecuciones en una barra de avance de 50?

2.- ¿Cómo actualizar la barra de progreso en la pantalla a medida que más proceso se estén ejecutando?


Para responder estas preguntas, es necesario disponer de una variable que vaya acumulando los procesos ejecutados.
Iniciamos la variable con valor cero: Ejecutados = 0, e incrementamos su valor a medida que un proceso culmine.

Supongamos que han culminado 80 procesos. Queremos reflejar ese valor en la barra de progreso que esta en la pantalla. En nuestro ejemplo, es la variable llamada GRAFICA que es mostrada en la pantalla.

Cantidad de asteriscos que debe contener la barra de progreso en pantalla =
(EJECUTADOS/TOTAL) x 50

Sustituyendo los valores: (80/1000)* 50 = 4 asteriscos, lo guardamos en la variable ASTERISCOS (numérica sin decimales, el programador puede elegir aplicar redondeo en la operación si así lo desea)

Colocamos la siguiente instrucción: ASTERISCOS SUBST BARRA GRAFICA P

Esta instrucción extrae los primero 4 asteriscos de la variable BARRA y los coloca en la variable GRAFICA y rellena con blancos la parte que queda de la variable GRAFICA. Este relleno en blanco lo realiza colocando la letra P en la instrucción, (en la misma columna de la hoja C donde se especifica si hay redondeo de números en la operación aritmética.)

Colocando un lazo de ejecución hasta que el proceso termine y que en ese lazo ademas se incrementen adecuadamente los valores de las variables involucradas en cada iteración, queda actualizar la barra de progreso de acuerdo a las formulas presentadas, y el usuario tendrá una representación grafica en RPG del avance de su solicitud.


Si te pareció interesante, reenvialo a un amigo haciendo click en el sobrecito que está al final del artículo. El conocimiento es valioso, compártelo.


Autor:  Ing. Liliana Suárez