Passing parameters between CL (Control Language) and RPG (Report Program Generator) programs in IBM i is a common requirement when you need to integrate these two languages. Here's how you can achieve this:
1. Defining Parameters in RPG:
Example :
**FREE
ctl-opt dftactgrp(*no) actgrp(*caller);
dcl-s Name char(20) ;
dcl-s Age zoned(3) ;
dcl-s Salary packed(7:2);
dcl-pi *n
Name like(Name) ;
Age like(Age) ;
Salary like(Salary) ;
end-pi;
// ... rest of your RPG program logic ...
In this example :
Name
is a character parameter of length 20.Age
is a zoned numeric parameter of length 3.Salary
is a packed numeric parameter with 7 digits and 2 decimal places.2. Calling the RPG Program from CL:
CALL
command to invoke the RPG program.PARM
parameter of the CALL
command.PARM
list must match the order of the parameters defined in the RPG program.Example :
PGM /* CL program to call the RPG program */
DCL VAR(&NAME) TYPE(*CHAR) LEN(20) VALUE('John Doe')
DCL VAR(&AGE) TYPE(*CHAR) LEN(3) VALUE('30')
DCL VAR(&SALARY) TYPE(*CHAR) LEN(9) VALUE('000500.00')
CALL MYLIB/MYRPGPGM PARM(&NAME &AGE &SALARY)
ENDPGM
In this example :
&NAME
, &AGE
, and &SALARY
and assign values to them.MYLIB/MYRPGPGM
and pass these variables as parameters using the PARM
parameter.Important Considerations:
%BIN
or %DEC
built-in functions in CL to ensure that the values are passed correctly.PARM
list of the CALL
command.Best Practices: