2

I try to submit job, and all is good, when i hard coding. But I want to use params.

//REPORTS   EXEC PGM=IKJEFT01,**PARM='SDSFINFO FTPSRV01 * hiqual'**
//SYSEXEC   DD DSN=rexx.is.here,DISP=(SHR,PASS)                 
//SYSTSPRT  DD SYSOUT=A,HOLD=YES                               
//SYSTSIN   DD DUMMY                                           

I write my JCL as Procedure. Is it real to describe parameters in the procedure invoice ? Like this:

  //stepxx  exec myproc,hiqual=hiqual,owner=*...

1 Answers1

5

There are two kinds of procedure, cataloged procedure and in-stream procedure.

A cataloged procedure is stored in a library member separate from the execution JCL. This separate library is located by the system searching through a list of such libraries defined to it in SYS1.PARMLIB. This list can be overridden with the JCLLIB statement in the execution JCL. Your shop likely has a standard location where cataloged procedures are stored.

In-stream procedures are located in the same library member as your execution JCL. The PROC statement must be between your jobcard and the EXEC statement that executes the named proc. The in-stream procedure must end with a PEND statement.

It is common to use symbolic parameters with procedures, making them more flexible.

You're headed in the right direction...

[jobcard is here]
//MYPROC    PROC 
//REPORTS   EXEC PGM=IKJEFT01,PARM='SDSFINFO FTPSRV01 &OWNER &HIQUAL'
//SYSEXEC   DD DSN=[rexx.is.here],DISP=(SHR,PASS)
//SYSTSPRT  DD SYSOUT=A,HOLD=YES
//SYSTSIN   DD DUMMY
//          PEND
//*
//MYSTEP    EXEC PROC=MYPROC,HIQUAL=ABC,OWNER=XYZ

...where the stuff in square brackets must be supplied by you. This will result in MYPROC being executed as if you had hardcoded...

//REPORTS   EXEC PGM=IKJEFT01,PARM='SDSFINFO FTPSRV01 XYZ ABC'
//SYSEXEC   DD DSN=[rexx.is.here],DISP=(SHR,PASS)
//SYSTSPRT  DD SYSOUT=A,HOLD=YES
//SYSTSIN   DD DUMMY

Sometimes procs are coded with default values for symbolic parameters...

//MYPROC    PROC ENV='PROD'
//REPORTS   EXEC PGM=IKJEFT01,PARM='SDSFINFO FTPSRV01 &OWNER &HIQUAL'
//SYSEXEC   DD DSN=&ENV..REXX,DISP=(SHR,PASS)
//SYSTSPRT  DD SYSOUT=A,HOLD=YES
//SYSTSIN   DD DUMMY

...and sometimes the default value is documentation...

//MYPROC    PROC ENV='SPECIFY_PROD_OR_TEST_OR_QA'
//REPORTS   EXEC PGM=IKJEFT01,PARM='SDSFINFO FTPSRV01 &OWNER &HIQUAL'
//SYSEXEC   DD DSN=&ENV..REXX,DISP=(SHR,PASS)
//SYSTSPRT  DD SYSOUT=A,HOLD=YES
//SYSTSIN   DD DUMMY

...forcing the execution JCL to provide a value or suffer a JCL error at run time.

Note that with the SET statement you can use symbolic parameters without needing a procedure, cataloged or in-stream. This...

[jobcard is here]
//  SET HIQUAL=ABC
//  SET OWNER=XYZ
//*
//REPORTS   EXEC PGM=IKJEFT01,PARM='SDSFINFO FTPSRV01 &OWNER &HIQUAL'
//SYSEXEC   DD DSN=[rexx.is.here],DISP=(SHR,PASS)
//SYSTSPRT  DD SYSOUT=A,HOLD=YES
//SYSTSIN   DD DUMMY
//*

...will give the same results as the first example, without using a proc.

There are usually shop standards to which you will be expected to adhere. Often mainframe shops have a dedicated group whose function is to run production job streams, scheduling hundreds or thousands of such job streams per day.

cschneid
  • 10,237
  • 1
  • 28
  • 39
  • Officially what you have described as _replaceable parameters_ are called **symbolic parameters**. Not to be confused with JCL parameters (positional and Keyword) and also not to be confused with parameters passed to programs written to read the PARM field of a PGM statement. – MikeT Jun 12 '16 at 07:40
  • 1
    @MikeT thanks, I've modified the answer per your comment. – cschneid Jun 13 '16 at 15:03