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.

Sunday, April 25, 2010

Dos Subfiles en Pantalla



                                                                                                  (Click en la imágen para ampliarla)

El uso de varios subfiles en la misma pantalla es recomendable en cierto tipo de aplicaciones donde el usuario debe conciliar o cotejar datos provenientes de distintas fuentes. Tal es el caso de los sistemas de conciliación bancaria, por ejemplo, donde tenemos en un lado de la pantalla los movimientos registrados por el banco y en el otro lado los movimientos que nuestros contadores han registrado.

Dos subfiles en pantalla convenientemente dispuestos pueden facilitar al usuario el reconocimiento visual de las diferencias y las coincidencias de registros de data provenientes de distintos orígenes de datos.

Adjunto dos códigos de programación en RPG “prototipos” del manejo de dos subfiles en pantalla. En los enlaces que están al final de este artículo puedes acceder al código fuente.

El primer prototipo fue realizado por Booth Martin. Este programa despliega en el subfile izquierdo los estados de un país (Venezuela en este caso) y en el subfile derecho las ciudades correspondientes al estado  seleccionado con el doble click del  Mouse.

Otra versión del uso de dos subfiles, desarrollada por mi, tiene en cada subfile movimientos de créditos o débitos. Presionando la tecla de función F8 nos posicionamos en el subfile izquierdo y con la tecla F9 en el subfile derecho.

Cualquiera de las dos versiones puede ser adaptada y mejorada según  la conveniencia de los requerimientos que deben ser cubiertos en la aplicación que desea desarrollarse.






Autor: Ing. Liliana Suárez.

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

Tuesday, April 13, 2010

Procedures en un programa ILE RPG.













Un procedure puede devolver o no un valor. El  código que se presenta  posteriormente fue tomado de este link:

Independientemente de la función de esta programación, cabe destacar algunos aspectos.

1.-Se declara El Procedure MOVER en La hoja ‘D’, ademas se especifica que va a devolver un valor alfabético de 30 posiciones. Este PR le indica al compilador que se está declarando el prototipo del procedure.
 Un prototipo debe tener igual definición que el PI (Procedure Interfase) definido en el procedure. (Ver punto 4 mas adelante).
Esta definición debe ser especificada en cada programa que quiera utilizar el procedure.
Esta declaración al principio del programa le permite al compilador validar contra el Procedure Interfase. En este caso la declaración sería:

     
     DMOVER            PR            30A
     DCHAR30                         30A   VALUE

2.-Luego del Final del programa se declara El Procedure identificando un P seguida el nombre del Procedure.

3.-Se declara con la letra ‘B’ el principio del Procedure.

4.-En el PI, (Procedure Interfase) se define la longitud y el tipo del valor que va a devolver el Procedure.
 Viene a ser como el *Entry del Procedure

5.-La variable local CHAR30B contiene el valor que va a devolver el Procedure.

6.-Para devolver el valor de CHAR30B se coloca el comando RETURN seguido de la variable contentiva del valor a ser retornado al programa principal.

7.-La Letra E al final del código en una linea tipo ‘P’ marca el fin del Procedure.

8.-La palabra VALUE utilizada indica que el valor de la variable del cuerpo principal del programa es transferido a una variable local del Procedure. Los cambios que realice el procedure a esta variable no alteran el valor de la variable el programa principal.
Cuando se especifica Reference, todo cambio realizado en el Procedure altera el contenido de la variable en el programa principal. Es decir, se trata de la misma zona de memoria (como si fuera una variable global).

9.-¿Como llamamos a un Procedure sin éste no devuelve ningún valor? Con  CALLP podemos llamar al Procedure cuando no devuelve ningún valor.


          
     DMOVER            PR            30A
     DCHAR30                         30A   VALUE
      *---------------------------------------------------------------
      * MAIN - Main Code
      *---------------------------------------------------------------
     C                   EVAL      CHAR30 = 'ABCD'
     C                   IF        MOVER(CHAR30) = 'ABCD’ß------------
     C                             
      * whatever
     C                   ENDIF
 
     C                   SETON                                      LR
 
      *---------------------------------------------------------------
 
     PMOVER            B
     DMOVER            PI            30A
     DCHAR30B                        30A   VALUE
     DWRKFLD30A        S             30    INZ(*BLANKS)
     DLEN              S              2  0
     C                   EVAL      LEN = %LEN(%TRIM(CHAR30))
     C                   EVAL      %SUBST(WRKFLD30A:31-LEN:LEN) =
     C                    %TRIM(CHAR30)
     C                   CLEAR                   CHAR30B
     C                   EVAL      CHAR30B = WRKFLD30A
     C                   RETURN                  CHAR30B
                    E



Autor: Ing. Liliana Suárez.

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

Friday, April 2, 2010

Conceptos Ile Rpg Capitulo I














A través de varios artículos vamos a describir lo conceptos  y funcionalidades de Ile RPG. En el artículo anterior describimos la programación estructurada. Si bien es cierto que la programación estructurada es un proceso óptimo de desarrollo de código de programación, también es cierto que está restringida a un programa y a su estructura interna. El concepto de programación estructurada no integra programas que deben interactuar entre si o compartir procedimientos, funciones y rutinas comunes y que por ende, deben ser de uso público para ser accedidos por distintos programas en diferentes instantes de tiempo.

La programación Orientada a Objetos desarrollo el concepto de “componentes” para definir pequeños códigos de programas que realizan funciones muy específicas que son requeridas por una gran cantidad de programas en distintos sistemas, instalaciones y organizaciones. En Java, por ejemplo, con declarar al principio de un programa el nombre del componente que será invocado en la ejecución del programa, es suficiente para utilizar un componente que se ha descargado desde Internet pudiendo ahorrarse horas de programación en generar códigos que pueden compartirse fácilmente, aún cuando el lenguaje de programación sea completamente distinto al lenguaje del programa que invoca el componente.

Para el Iseries, se reproduce el mismo concepto de trabajo con componentes a través de los módulos desarrollados en un ambiente ILE (Integrated Lenguaje Enviroment). Desde un ILE RPG podemos invocar procedimientos en Cobol, Java, C y cualquier otro lenguaje de programación. De hecho para el trabajo con Sockets y programas de envío y recepción de ráfagas de datos desde el Iseries hacia Windows, se invocan procedimientos pre-programados en la librería QSYS del Sistema Operativo del Iseries que están desarrollados en lenguaje C.

Un programa ILE se compone de Módulos que a su vez están conformados por Procedures (Procedimientos). Los procedimientos son un conjunto de sentencias en lenguaje de alto nivel que cumplen con una tarea o función específica. Lo que antes eran rutinas clásicas como el cálculo del día de la semana para una fecha, el cálculo de una curva de Gauss, la validación de una fecha, etc. Pueden ser concebidas como procedures dentro de módulos que son invocados y enlazados con programas ILE, COBOL, C JAVA o cualquier otro. Un módulo está constituido por unos o varios procedures.
Un módulo se compila con el comando CRTRPGMOD, (opción 15 si estas en strpdm), y genera un objeto no ejecutable. Es posible acceder la data, o los procedimientos que tiene un módulo. Las palabras claves EXPORT e IMPORT permiten a los programas “ver” los procedures o variables que conforman el módulo. Cuando en un módulo se define un código como de “exportación” se toma como una definición de acceso público. Cuando se define un código de tipo Import se denomina al código importado como una “referencia”. Es decir el módulo también puede “importar” información de otro módulo.


En este ejemplo la variable VARX es exportable a otro módulo. El espacio de memoria es asignado a tiempo de ejecución en este módulo puesto que aquí se origina su definición.

    d VarX            S              5p 0 Export   Inz(3)
     c     VarX          dsply                   DUMMY               1
     c                   callb     'EXP_IMP1'
     c     VarX          dsply                   DUMMY              
     c                   return

 Fíjense que no estamos pasando la variable VArX como parámetro pero al estar los módulos compilados en forma enlazada el módulo EXP_IMP1, importa la variable como una variable de uso público, cambia su valor y con un dsply podemos ver el valor que retorna luego de la llamada.

En este otro ejemplo la variable VARX es importada de otro módulo. No  se asigna memoria a tiempo de ejecución en este módulo, aunque se declare su tipo y longitud.
Supongamos que este código corresponde al módulo EXP_IMP1 del ejemplo anterior.

     d VarX            S              5p 0 Import
     c     VarX          dsply                   DUMMY               1
     c                   z-add     77            VarX
     c     VarX          dsply                    DUMMY               
     c                   return

La variable DUMMY  es una variable local a cada módulo.

En el siguiente artículo seguiremos hablando de los Módulos, Procedures y su uso.
Pueden consultar este link sobre las recomendaciones  de Bryan Meyer para convertir una programación que no utiliza módulos en una programación con módulos, entre otras cosas.



Autor: Ing. Liliana Suárez.

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