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.
Showing posts with label ILE. Show all posts
Showing posts with label ILE. Show all posts

Tuesday, August 30, 2016

Directorio de Enlace Que es y como se usa. Micro 4/4 Programacion ILE- RPG


                                                     
 Que es un Directorio de Enlace  y como se usa.
Todo en 30 segundos.
 
                                                   

                                                                                                                                                                                                                                                               




                                                                                                                                                                                                                                                                  

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

Tuesday, August 16, 2016

Micro 2/4 ¿Que es un Módulo en ILE?


                                                     
                 El segundo de una serie de cuatro videos.

Qué es un Módulo en ILE
Cómo se crea un módulo
Cómo se ejecuta 
 

 No te lo pierdas, aclararas muchas cosas.
                                                   

                                                                                                                                                                                                                                                               




                                                                                                                                                                                                                                                                  

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

Tuesday, August 9, 2016

Rpg-ILE Conceptos y Funcionalidades 1/4 Micros


                                                     
ILE RPG   (1 de 4)
Conceptos y funcionalidades para aprovechar
ILE en el Desarrollo de Aplicaciones                                                 

                                                                                                                                                                                                                                                               




                                                                                                                                                                                                                                                                  

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

Thursday, April 26, 2012

PROGRAMAS DE SERVICIO- ILE_RPG - Primera Parte










Lo que en ILE se llama Programa de Servicio ha sido concebido en principio, para codificar, en un mismo programa, las utilidades de uso común por parte de los demás programas del sistema. La ventaja de este sistema centralizado es que todas las  versiones y actualizaciones de las utilidades son mucho mas sencillas de controlar.

Un programa de servicio en su concepto fundamental esta constituido por un conjunto de subprocedures que son declarados en el programa. El programa de servicio típico no tiene cuerpo principal. Se coloca en la hoja ‘H’ la plabra clave *NOMAIN para que el sistema operativo entienda que el contenido del código contiene declaraciones y programación de subprocedures.

Por ejemplo las clásicas utilidades desarrolladas en  programas o rutinas en RPG tradicional se han desarrollado tales como:

“Monto Escrito” (para escribir en letras una cantidad en número),
“Días laborables”
“Encriptamiento/Desencriptamiento”
“Impresión de Chequeras”

Pueden ser colocados en un solo programa de servicio como un subprocedure cada uno.

Cada Subprocedure debe tener la declaración de su prototipo PR para los parámetros de entrada y sus respectivos PI para esos mismos parámetros. Sin embargo, la declaración de los PR y PI se realizan en distintas partes del programa.

La declaración de Prototipos o PR permite al sistema operativo crear un punto de entrada o ENTRY POINT de acceso al programa de servicio  por cada PR declarado.
Esto significa que, el subprocedure que tiene un PR o prototipo asociado, puede ser el proceso arranque de un conjunto de programas enlazados y además puede ser invocado por programas y módulos externos.

Sin la declaración del Prototipo PR,  el subprocedure sería solo de uso local dentro del programa que esta declarado y no podría ser accedido por otros programas o módulos. Es importante aclarar esto puesto que muchos programadores no entienden por qué hay que utilizar PR y PI es decir, declarar los parámetros de entrada "dos veces" para cada subprocedure (es un tema mas extenso para una próxima vez).

En el RPG tradicional no existía la posibilidad de multiples ENTRY_POINT para un programa. El RPG tiene un solo conjunto de parámetros de entrada definidos.


En un programa de servicio cada subprocedure puede ser llamado en forma independiente aún cuando este declarado en el mismo programa. Por tanto, hay múltiples puntos de entradas ( o grupo de parámetros de acceso) por la cual se puede acceder al programa de servicio.

Un programa de servicio sin cuerpo principal - como es este caso-no puede ser invocado a través de un CALL, solo se pueden invocar los subprocedures que están codificados internamente.


La declaración de los prototipos de los subprocedures se coloca al principio del programa, uno tras otro. Es decir,  se declara el prototipo de “Monto Escrito”, seguidamente el prototipo de “Dias laborales” y luego el prototipo de “Encriptamiento” , etc, y al culminar con los prototipos se declaran seguidamente cada subprocedures con su código interno correspondiente y su PI.

El comando para crear un programa de servicio es CRTSRVPGM.


En  próximas entregas, continuaremos detallando el tema de los programas de servicio.



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.


Publicado por: Ing. Liliana Suárez

Saturday, March 10, 2012

CALL, CALLB, CALLP ¿Significan lo mismo?






  

 CALL, CALLB, CALLP      


CALL

Esta conocida instrucción se utiliza para invocar un programa tradicional en OPM o un programa RPGLE, CLP, CLLE. No es necesario explicar mucho más de este comando.

Cabe destacar que en RPGLE utilizando la facilidad de declarar los programas o procedures externos en la hoja ‘D’, no es necesario utilizar CALL cuando estamos programando en FREE. Con el nombre del procedure declarado en la hoja ‘D’, es suficiente invocar el nombre del programa en el cuerpo del programa se puede omitir el CALL:

PROGRAMA MODELO

DPGMNAME         PR        EXTPGM(‘PGMNAME’)
D                                           10 A
D                                           20 A

/Free

PGMNAME(PARM1:PAMR2);

*inlr = *ON

//End-Free

El código expuesto anteriormente corresponde a una “llamada dinámica”. Puede llamarse un Procedure o Programa sin que hayan sido enlazados previamente mediante un CRTPM.
PGMNAME se refiere al nombre del programa que queremos invocar desde este Programa Modelo.


CALLB

Se utiliza para llamar a un módulo que ha sido enlazado (Binded) con el programa llamador. Con el comando CRTPGM se crea  un programa en ILE que puede ser enlazado con uno o varios módulos (programas a quienes se les ha aplicado el CRTRPGMOD). Estos módulos enlazados pueden ser llamados con un  CALLB.

Puntos a tomar en cuenta:

Ø      El segundo factor del CALLB, debe ser un módulo enlazado con el programa “llamador”. Tambien puede ser un Subprocedure dentro del programa llamador.

Ø      El segundo factor debe ser: una constante, un literal o un apuntador a un procedure. Ejemplo:
     CALL ‘PGM1’. NO Puede ser una variable ni el campo de un archivo.

CALLP

Se utiliza para llamar a un procedure o subprocedure con prototipo en Ile o programa Externo OPM.
UN procedure con “prototipo” tiene en su hoja ‘D’ una línea que tiene estas características.

PROGRAMA MAIN

DMAIN         PR       
D                10 A
D                20 A


El programa MAIN no tiene *entry para declarar sus parámetros de entrada o Entry Points.
La declaración del prototipo hace que el compilador reconozca que se trata de un procedure “prototyped”.
En un nivel elemental,  Programa o Procedure es lo mismo. Hay sin embargo diferencias:
 En el Procedure, la declaración del prototipo y su enlace con módulos (o su capacidad de ser enlazado con módulos) es lo que lo distingue de un programa “normal”.  Cuando se enlazan varios módulos, la declaración del prototipo hace posible que el procedure pueda ser un modulo de entrada o “programa principal” de todo el conjunto de procedures enlazados.



Puntos a tomar en Cuenta:

Ø      El CALLP puede utilizarse para llamar a un programa, o a un procedure o subprocedure.

Ø      Si el procedure retorna un valor no puedes utilizar CALLP. Debe llamarlo como se llama  a las funciones Built-In en Ile-Rpg.

Ø      Usa el CALLP(E) para llamar a un programa o procedure  cuando quieras monitorear el error en la llamada con if %error



CALLP es el operador más amplio de los tres operadores de llamadas que hemos visto en este artículo. Puede utilizarse para llamar programas, procedure y subprocedures. Además tiene código extendido E para monitoreo de errores de llamada.


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











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
     P                 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.