A la hora de implementar procesos interactivos en sistemas as400, una de las desventajas, por decirlo de alguna manera, es que no gozan de muy buena acogida por parte de los usuarios, actualmente acostumbrados a las interfaces graficas que ofrece las cómodas y amigables ventanas de los sistemas operativos como Windows, Linux, etc.
Particularmente, esto no es tan cierto, puesto que los upgrade al software del sistema operativo de iseries permiten mejorar y optimizar las funcionalidades de las pantallas verdes. Si se tiene el concepto de que las interfaces interactivas hechas en as400 no son amigables al usuario y que resultan para muchos “obsoletas”, es un concepto muy equivocado.
En base a mi experiencia, he percibido que en la construcción de pantallas no se aprovecha al máximo las funcionalidades y mejoras que ofrecen las versiones actuales del iseries.
Por ejemplo, se puede hacer uso del mouse para controlar teclas de función (botones), enlaces a páginas web (Links), mover un registro Windows, etc. Colocar inclusive títulos en los bordes de las ventanas, etc. Pero esto solo puede ser posible con un poco de dedicación e investigación de parte nuestra como programadores que somos. Los usuarios de Windows no crean las ventanas que utilizan.
Como ejemplo de lo que estamos tratando en este post vamos a realizar el refresh automático. Esta funcionalidad sería muy bien aprovechada si se desea implementar pantallas que nos muestren información estadística on línea, o tal vez un visor para control transaccional, o de repente controlar interactivamente el acceso de usuarios, control de fraudes, etc.
Podremos implementar esta funcionalidad haciendo uso de cola de datos, o ejecutando el comando DLYJOB, etc. pero a mi parecer me parece un poco artesanal. Una manera mas conveniente y practica de hacerlo lo muestro a continuación.
Este es un pequeño ejemplo de cómo realizar un refresh a una pantalla hecha en un archivo de pantalla (DSPF). El ejemplo es sencillo, vamos a mostrar la fecha y hora del sistema en la pantalla y el programa deberá actualizar y mostrar la hora cada 3 segundos.
Fuentes del Archivo de Pantalla:
MILIBRERIA/QDSPSRC/PANTREF
A DSPSIZ(24 80 *DS3) A CA03 A R SCREEN A INVITE A 12 24'Fecha' A 12 30DATE A EDTCDE(Y) A COLOR(YLW) A 12 39'Hora' A 12 44TIME A COLOR(YLW) A 10 24'WWW.ISERIES-PERU.BLOGSPOT.COM' A COLOR(BLU) A 14 24'F3=Salir' A COLOR(BLU) |
En el momento de compilar la pantalla solicitamos al SDA incluir parámetros para la compilación pulsando F10.
Salvar DDS - Crear Archivo de Pantalla Teclee opciones, pulse Intro. Salvar fuente de DDS . . . . . . . . . . Y Y=Sí Archivo fuente . . . . . . . . . . . . QDSPSRC F4 para lista Biblioteca . . . . . . . . . . . . . MILIBRERIA Nombre, *LIBL ... Miembro. . . . . . . . . . . . . . . . PANTREF F4 para lista Texto. . . . . . . . . . . . . . . . . Crear archivo de pantalla . . . . . . . Y Y=Sí Solicitud de parámetros . . . . . . . Y Y=Sí Archivo de pantalla . . . . . . . . . PANTREF F4 para lista Biblioteca . . . . . . . . . . . . . MILIBRERIA Nombre, *CURLIB Sustituir archivo existente . . . . . Y Y=Sí Someter creación de trabajo por lotes . Y Y=Sí Especificar opciones adicionales de salvar o crear . . . . . . . . . . Y=Sí F3=Salir F4=Solicitud F12=Cancelar El miembro PANTREF y Archivo PANTREF existen y se sustituirán. + |
O si estas editando la pantalla desde SEU, compilamos con opción 14 + F4
Estando en la pantalla “Crear archivo de pantalla (CRTDSPF)” pulsamos F10 para agregar parámetros adicionales.
Crear archivo de pantalla (CRTDSPF) Teclee elecciones, pulse Intro. Archivo . . . . . . . . . . . . FILE > PANTREF Biblioteca . . . . . . . . . . > MILIBRERIA Archivo fuente . . . . . . . . . SRCFILE > QDSPSRC Biblioteca . . . . . . . . . . > MILIBRERIA Miembro fuente . . . . . . . . . SRCMBR > PANTREF Nivel gravedad generación . . . GENLVL > 20 Nivel gravedad señalización . . FLAG > 00 Dispositivo de pantalla . . . . DEV *REQUESTER + para más valores Datos DBCS especif usuario . . . IGCDTA *NO Caracteres ampliados DBCS . . . IGCEXNCHR *YES Texto descriptivo . . . . . . . TEXT *SRCMBRTXT F3=Salir F4=Solicitud F5=Renovar F10=Parámetros adicionales |
Nos vamos a la segunda página y en el parámetro WAITRCD colocamos el numero de segundos que la pantalla hará el refresh automático. En nuestro caso consideraremos 3 segundos.
Crear archivo de pantalla (CRTDSPF) Teclee elecciones, pulse Intro. Parámetros adicionales Opciones de listado fuente . . . OPTION + para más valores Máximo de dispositivos . . . . . MAXDEV 1 Pantalla mejorada . . . . . . . ENHDSP *YES Restaurar pantalla . . . . . . . RSTDSP *NO Diferir grabación . . . . . . . DFRWRT *YES Identificador de caracteres: CHRID Juego de caracteres gráficos *DEVD Página de códigos . . . . . . Formato decimal . . . . . . . . DECFMT *JOB Texto SFLEND . . . . . . . . . . SFLENDTXT *MSG Tiempo máximo espera archivo . . WAITFILE *IMMED Tiempo máximo espera registro . WAITRCD 3 F3=Salir F4=Solicitud F5=Renovar F12=Cancelar F13=Cómo utilizar esta pantalla F24=Más teclas |
Y listo, eso sería todo con respecto a la pantalla. A continuación el fuente del programa.
Fuentes del programa:
MILIBRERIA/QRPGLESRC /REFRESH
Fpantref cf e WorkStn maxdev(*file) C DoW Not *InKC C Write screen C Read pantref 9999 C EndDo C Eval *Inlr = *on |
No será necesario incluir ningún parámetros adicionales al compilar el programa.
Como todo buen programador que mira a ambos lados antes de cruzar una calle de un solo sentido, hay que prevenir los posibles errores de nuestro programa, por mas sencillo que nos parezca. Que sucedería si en el preciso momento que el sistema actualiza la pantalla (n segundos) el usuario pulsa F3 para salir?
El sistema arrojará el siguiente error:
Información Adicional de Mensaje ID de mensaje . . . . : RNQ1299 Gravedad . . . . . . . : 99 Tipo de mensaje . . . : Consulta Fecha envío . . . . . : 02/13/11 Hora envío . . . . . . : 19:24:39 Mensaje . . . . : Se ha detectado un error de E/S CPF4737 en el archivo PANTREF (C G D F). Causa . . . . . : El procedimiento RPG REFRESH en el programa MIUSUARIO/REFRESH ha recibido el mensaje CPF4737 en la sentencia 7 mientras efectuaba la operación de E/S WRITE sobre el archivo PANTREF. El archivo real es MIUSUARIO/PANTREF. Recuperación . : Busque más información sobre la causa del error y póngase en contacto con la persona responsable del mantenimiento de programas. Respuestas posibles al mensaje . . . . . . . . . . . . . . : D -- Obtener una salida impresa del almacenamiento del sistema con formato RPG. S -- Obtener una salida impresa del almacenamiento del sistema. Más... Pulse Intro para continuar. F3=Salir F10=Visualizar mensajes de anotaciones trabajo F12=Cancelar F24=Más teclas |
Solo es cuestión de consistenciar nuestro programa monitoreando la excepción con un indicador en la sentencia WRITE. Eso se los dejo a criterio de cada uno.