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.

Friday, February 22, 2013

Algunos códigos fuentes simples y útiles en RPGLE-FREE



 

 
 
 
 
 
 
Algunos códigos fuentes simples y  útiles en RPGLE-FREE
Para ejecutar comandos:

En la hoja D, declaramos:

d clpstm          s            300
d@runsyscmd       pr                  extpgm('QCMDEXC')
d cmd                          200a   options(*varsize) const
d cmdlen                        15p 5 const


Monitoreamos la sentencia para que el programa no falle estrepitosamente en caso de que haya un error de ejecución del comando.

En este ejemplo estamos haciendo un chkobj de un objeto. Si el objeto no existe, el error que arroja el sistema operativo es CPF9801 con La sentencia monitor y la operación  on-error, enviamos el mensaje al usuario sin que el programa deje de estar operativo.

monitor;
        clpstm = 'chkobj obj(' + %trim(libreria) +
                 '/' +  %trim(archivo) +
                ') objtype(*file)';
                @runsyscmd(clpstm : %size(clpstm));
                on-error;
                  Dsp_error = 'Archivo solicitado no existe';
    endmon;


Simplificando la Validando de Fechas

En la hoja D:

d  Wrk_Fecha        s               D   datfmt(*eur)

En el Ejemplo trabajamos la fecha en formato *EUR (DD.MM.AAAA), por lo que a nivel de programación esperamos que el usuario haya colocado la fecha en  formato *Eur o que la fecha venga de un archivo generado con ese formato. Sin embargo, cabe destacar que este ejemplo es aplicable a cualquier formato con el que se desee trabajar.

Detectamos que la fecha es inválida pero no especificamos la razón (si es por el día, el mes o el año) cada programador puede refinar el código si así lo desea.

monitor;                               
  Wrk_fecha = %date(Fecha:*EUR);       
  on-error;                             
  dsp_error = 'Fecha  Inválida';
Endmon;


 Campos con fecha en pantalla          

Podemos tener campos tipo D (Fecha) en el archivo que no podemos colocar en la pantalla. Para eso recurrimos a las variables alfanuméricas.

Solicitamos al usuario la fecha (siendo la fecha un campo alfabético), luego que validamos según el ejemplo anterior, una vez que el campo tiene una fecha correcta, grabamos en el archivo:

Fecha_archivo = %date(Fecha_pantalla:*Eur);
Cuando vamos a mostrar en pantalla lo que está grabado en el archivo:

Fecha_pantalla = %char(Fecha_archivo:*Eur);

Es importante tener en cuenta declarar en la hoja H esto:

hDatFmt    (*EUR)

En este ejemplo es *EUR. (Puede ser *ISO o lo que necesiten).Si no declaran esto, aun cuando llenan la fecha de la pantalla con el %char y la especificación  *eur, prevalece la  especificación de la JOBD.

Si la jobd tiene fecha *ISO, prevalece el formato ISO y lo que se muestra en pantalla va a tener este aspecto: DDMM-AA-AA es decir el día y el mes son representados como el año de la fecha y el año es descompuesto visualmente en mes y día.

 

Buscando el máximo valor de un campo

En algunos procesos, debemos generar en forma automática el número de documento que debe grabarse en el archivo. Generalmente los números se generan en forma consecutiva y cada documento utiliza ese número como campo clave. Cuando trabajamos con RPG sin el uso de SQL embebebido debemos hacer un SETGT con la clave en *HIVAL, luego un READP, revisar si el indicador de fin de archivo se encendió o no (o un %found) y acceder al último número utilizado. Un ejemplo sencillo de cómo hacerlo es el siguiente.

exec sql                   
 select max(NroDoc)         
 into :Ult_Documento  from Archivo       
 If sqlcode =  0;           
    Nro_Documento  = Ult_Documento + 1;   
 else;                      
    Nro_Documento   = 1;            
 Endif;     

 

Si te pareció interesante, reenvíalo 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

 

No comments: