Omitting Parameters in RPG Programs and Modules
November 8, 2002 Timothy Prickett Morgan
Hey, Ted:
I have a program that can receive four parameters. The first one is mandatory, and the last three are optional. If I call the program and pass parameters 1, 2, and 4 to it, the %parms built-in function tells me that three parameters were passed. How does the program know which three it is getting? Thanks!
|
— Doug
You can’t skip a parameter. If you pass three parameters, they are parameters 1, 2, and 3; number 4 will be undefined.
The only way to skip parameter 3 is to specify OPTIONS(*OMIT) in its D spec. The value *OMIT allows you to pass the special value *OMIT as a parameter value. OPTIONS(*OMIT) is only allowed with parameters that are passed by reference. That includes parameters with the CONST keyword, which are passed by read-only reference.
You can use the *OMIT value along with *NOPASS, but to keep it simple; I do not include *NOPASS in the following example.
Here is the RPG source code for RPG module OMITPARMEE (Omit Parameter Callee):
D calledproc pr extproc('OMITPARMEE') D p1 10a const D p2 12a const D p3 6a const options(*omit) D p4 2a const D calledproc pi D p1 10a const D p2 12a const D p3 6a const options(*omit) D p4 2a const D somevalue s 6 C if %addr(p3) = *null C eval somevalue = *all'*' C else C eval somevalue = p3 C endif C return
Notice that the third parameter has the OPTIONS(*OMIT) keyword. If the caller passes the special value *OMIT, the address of the parameter will be null. For that reason, the module checks for a null address and does not use the value of the third parameter if the address is null.
Here is module OMITPARMER (Omit Parameter Caller):
D calledproc pr extproc('OMITPARMEE') D p1 10a const D p2 12a const D p3 6a const options(*omit) D p4 2a const /free callp calledproc ('ABC': 'DEFG': 'HIJKLM': 'NO'); callp calledproc ('ABC': 'DEFG': *OMIT : 'NO'); *inlr = *on; /end-free
Notice the *OMIT value in the second CALLP.
— Ted
Sponsored By inFORM DECISIONS |
ELIMINATE THE COSTS OF PRE-PRINTED FORMS, LABOR AND POSTAGE WITH iSeries based e-Forms, e-Checks, e-Mail, e-FAX, and Document Retrieval from the Web are available as individual modules or as a complete e-Document processing ‘Suite’. Click to Download the Complete Suite or Individual Modules today |