mgo
OS/400 Edition
Volume 2, Number 86 -- November 8, 2002

Omitting Parameters in RPG Programs and Modules


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
inFORM Decisions iDocs™ 'Suite'

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
www.inFORMDecisions.com
or call (800) 858-5544


THIS ISSUE
SPONSORED BY:

ASC
inFORM Decisions


BACK ISSUES

TABLE OF
CONTENTS

Odds and Ends

Omitting Parameters in RPG Programs and Modules

Reader Feedback and Insights: Overlooking the Obvious



Editors
Howard Arner
Joe Hertvik
Ted Holt
David Morris

Managing Editor
Mari Barrett

Publisher and
Advertising Director

Jenny Thomas

Advertising Sales Representative
Kim Reed

Contact the Editors
Do you have a gripe, inside dope or an opinion?
Email the editors:
editors@itjungle.com



Last Updated: 11/08/02
Copyright © 1996-2008 Guild Companies, Inc. All Rights Reserved.