jueves, 17 de febrero de 2011

Colorear fuentes en SEU

Muchas veces me han preguntado como se colorea los comentarios e inclusive el código de los fuentes en el editor SEU.
Asi que aquí les dejo este post para quienes aun no lo han descubierto puedan hacerlo y aplicarlo a sus programas y darles ciertos toques artísticos.
A manera de anécdota...
Trabajé de practicante en una empresa donde los programas eran implementados en el extranjero y la gran mayoría de los programas tenían los comentarios resaltados, subrayados, etc.  Me llamo la atención y por mas que preguntaba y fastidiaba a mis compañeros de trabajo, nadie me daba la solución. Hasta que un buen compañero, uno de aquellos de los que no tenía miedo enseñar, me dijo que le hiciera un DSPPFM al archivo fuente (indicando el miembro) y que luego pulse las teclas de función  F10 + F11 (Para visualizar el valor hexadecimal de la información). Fue ahí donde pude percibir el valor hexadecimal del carácter que permite darle atributos  a los textos.
A veces necesitamos un empujoncito luego el resto depende de nosotros.

==>DSPPFM  FILE(MILIBRERIA/QRPGLESRC) MBR(EXTNAME) 


En la figura del fuente del programa EXTNAME el carácter de valor hexadecimal X’3A’ muestra el texto de color azul.
La explicación es sencilla, existen caracteres que no son visualizables en la pantalla verde del as400 pero que hacen que los textos tengan ciertos atributos como, colores, subrayado, alta intensidad, etc.  Este carácter se antepone al texto de la siguiente manera:
En el ejemplo, para lograr el color azul sería  X'3A'  + Texto 
Pero, ¿y cómo colocamos ese carácter dentro de nuestros fuentes sino son visualizables? y por ende no podemos copiar ni pegar en el editor SEU. Fácil, por medio del valor hexadecimal.
Puedes hacerlo de muchas maneras posible, haciendo un programa, como lo hice al principio, pero una manera rápida de hacerlo es usando SQL.

Como sabemos, los fuentes de los programas también pertenecen a un archivo, en este caso archivo fuente y por tal también puede ser procesado por el gestor de base de datos.
Para trabajar directamente con el programa denominado EXTNAME bastará hacer un OVRDBF.
==>OVRDBF FILE(QRPGLESRC) TOFILE(MILIBRERIA/QRPGLESRC) MBR(EXTNAME) 
Seguidamente ingresamos al SQL y hacemos lo siguiente:

Listo! Hemos agregado el atributo “alta intensidad “ a la línea 4 del fuente


==> SELECT * FROM MILIBRERIA/QRPGLESRC 
Esto lo aplicas tambien en información de archivos de BD.













O inclusive para ayudarte a recordar la ultima versión de tus fuentes.















En internet podemos encontrar todos los valores de cada atributo de pantalla. Te adjunto unas páginas referente a ello.

http://www.mcpressonline.com/tips-techniques/networking/techtip-display-colors-in-a-5250-session.html
http://www.code400.com/colorsource.php

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.