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.

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











No comments: