domingo, 13 de febrero de 2011

Refresh automático en pantalla AS400

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.

No hay comentarios:

Publicar un comentario