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.

Tuesday, July 12, 2022

Recordando Un Viejo Truco. Desarrollo RPGLE. AS400

                           


Vamos a recordar un viejo truco para utilizarlo cuando estamos desarrollando un programa que permita al usuario modificar la data por pantalla.

 Supongamos que tenemos un archivo llamdo MovCuentas conformado por cuatro campos:

  • Fecha  (Key)
  • Cuenta (Key)
  • Monto
  • Moneda

 Luego de mostrar la pantalla al usuario, ejecutando en el programa un EXFMT, debemos validar la data ingresada. Generalmente declaramos los campos en pantalla con nombres distintos a los campos del archivo para no perder los cambios introducidos por el usuario. 

La Secuencia de instrucciones sería algo como esto:

1.-Chain (fecha:Cuenta) MovCuentas

2.-Si el registro existe:

          Movemos los campos del archivo a los campos de pantalla.

     sino

          Mensaje de error

     Endif

3.- El usuario ingresa la data

4.- Chain (fecha:Cuenta) MovCuentas

5.- Movemos los campos de la pantalla al archivo.

6.- Update Movcuentas

El ejemplo anterior es sencillo porque tenemos cuatro campos en pantalla. Sin embargo podemos tener 15 campos o muchos mas. Se vuelve realmente pesado mover los campos de la pantalla al archivo y del archivo a la pantalla y ademas, se genera mucho mas código en el programa del que realmente es necesario.

Para ahorrar código y agilizar nuestro desarrollo podemos hacer lo siguiente:

 

1.-Declarar en la pantalla los campos con los mismos nombres que tienen en el          archivo.

2.-Declarar una estructura de datos que referencie los campos del archivo y que tenga dos ocurrencias.

    Dcl-ds  dsmovcuentas extname('MOVCUENTAS') occurs(2);
    end-ds;

3.-Exfmt pantalla;                           //usuario ingresa Fecha y cuenta

4.-  %occur(dsmovcuentas) = 01;  //posicionarse en la primera ocurrencia

5.-  Con el siguiente chain se guardan los valores del archivo en la primera ocurrencia de la estructura de datos

       chain(n)  (Fecha:Cuenta) Movcuentas;

6.-  If %found(MovCuentas);                            //validamos fecha-cuenta exista
         %occur(dsmovcuentas) = 02;                 //posiciona segunda ocurrencia

        ( El siguiente chain carga valores en pantalla y en la segunda ocurrencia 

          al   mismo tiempo )   

          Chain(n)  (Fecha:cuenta) movcuentas;
     Endif;

7.-Muestra al usuario los datos en pantalla Exfmt.

8.-El usuario realiza las modificaciones. ( Recordar que estamos posicionados en la segunda ocurrencia de la estructura de datos)

9.-Recupero el registro para actualizar el archivo sin perder cambios de pantalla
        %occur(DsMovcuentas) = 01; 

        Chain  (Fecha:Cuenta) DsMovcuentas;     

10.- Recupero los valores editados por el usuario
   %occur(dspersonas) = 02;

11.-Grabo archivo 
   update rmovcuentas;

 

        

     Si te pareció interesante, reenvíalo a un amigo haciendo click en el sobrecito que está al final del artículo o en el enlace de Linkedin que está encima de este mensaje.  El conocimiento es valioso, compártelo. 

    Autor: Ing. Liliana Suárez



3 comments:

Cbc bellorin said...

Buenas tardes liliana. Muy bueno este articulo. Pero tengo una duda al final del proceso. Por qué el chain en posición 2 de la ocurrencia lo haces con las variables $país y dsp_dni, tengo esa duda. Gracias

L Suarez said...

hola Bellorín,
me equivoqué. Ya lo corregí,
Gracias por tu observación.

Cbc bellorin said...

Vale, gracias a ti. Por publicar cosas interesantes de esta plataforma. Muy podederoso este truco a la hora de ahorrar código a la hora de mover campos. Menos enredos.. Jajajaj. Gracias.