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

No comments: