New z/OS shop here...

So I have a cataloged proc 'FJS.PDSE.PROC(DLIBATCH)' that looks like this:
//DLIBATCH  PROC DLIPGM=,DLIPSB=,DBRC=N                 
//DLI       EXEC PGM=DFSRRC00,                          
//            PARM=(DBB,&DLIPGM,&DLIPSB,,,,,,,,,,,&DBRC)
//IMSACB    DD DISP=SHR,DSN=&SYSUID..IMS.ACBLIB         
//          DD DISP=SHR,DSN=SYS4.IMS.ACBLIB             
//IEFRDER   DD DUMMY                                    
//SYSUOUT   DD SYSOUT=*                                 
//          PEND                                        

I can execute it from a job that looks like this:
//FFND05   JOB CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID
//PROCLIBS JCLLIB ORDER=(FJS.PDSE.PROC)                  
//JOBLIBS  INCLUDE MEMBER=JOBLIBS                        
//*------------------------------------------------------
//FFND05   EXEC DLIBATCH,DLIPGM=FFND05,DLIPSB=FFUNDGO    
//CEEOPTS  DD *   **LE RUN-TIME OPTIONS**                
RPTOPTS(ON)                                              
//DFSVSAMP DD *   **IMS VSAM BUFFER OPTIONS, ETC.**      
32768,10                                                 
//FFUNDDB  DD DSNAME=FJS.FFND.IMS.FFUNDDB,DISP=SHR       
//FFUNDIN  DD DSNAME=FJS.FFND.IMS.FFUNDIN,DISP=SHR       
//FFMOTBL  DD DSNAME=FJS.FFND.FFMOTBL,DISP=SHR           
//DRPT     DD SYSOUT=*                                   
//MRPT     DD SYSOUT=*                                   
//                                                       

We don't have IMS in production yet (which is what the DLIBATCH proc is 
for).  Currently we have jobs that execute procs that execute our programs.  
So I'd like to continue this with our IMS (DL/I) jobs.  So I modified the above 
FFND05 to look like this:

//FFND05    JOB CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID
//PROCLIBS  JCLLIB ORDER=(FJS.PDSE.PROC)                  
//JOBLIBS   INCLUDE MEMBER=JOBLIBS                        
//*-------------------------------------------------------
//FFND05    PROC                                          
//FFND05    EXEC DLIBATCH,DLIPGM=FFND05,DLIPSB=FFUNDGO    
//FFUNDDB   DD DSNAME=FJS.FFND.IMS.FFUNDDB,DISP=SHR       
//FFUNDIN   DD DSNAME=FJS.FFND.IMS.FFUNDIN,DISP=SHR       
//FFMOTBL   DD DSNAME=FJS.FFND.FFMOTBL,DISP=SHR           
//DRPT      DD SYSOUT=*                                   
//MRPT      DD SYSOUT=*                                   
//          PEND                                          
//*-------------------------------------------------------
//FFND05    EXEC PROC=FFND05                              
//CEEOPTS   DD *   **LE RUN-TIME OPTIONS**                
RPTOPTS(ON)                                               
//DFSVSAMP  DD *   **IMS VSAM BUFFER OPTIONS, ETC.**      
32768,10                                                  
//

The FFND05 proc would end up being a cataloged proc, of course, but I can't 
even get it to work.  My two DD's in the main JCL (CEEOPTS and DFSVSAMP) 
cause the following errors to be issued:
22 IEFC611I OVERRIDDEN STEP NOT FOUND IN PROCEDURE
23 IEFC611I OVERRIDDEN STEP NOT FOUND IN PROCEDURE

This appears to be "as documented", since the MVS JCL manual says:
"Modifying or additional JCL statements apply to one level of nesting only. You 
can use statements to modify statements in a procedure only for the level of 
nesting at which the EXEC statement for that procedure appears."
http://publibz.boulder.ibm.com/cgi-bin/bookmgr_OS390/BOOKS/iea2b670/5.3.2

I am at a loss what do to.  Our goal was that when testing we would execute 
the production proc and override the DD names to the names of test files.

The following does work:
//FFND05    JOB CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID     
//PROCLIBS  JCLLIB ORDER=(FJS.PDSE.PROC)              
//JOBLIBS   INCLUDE MEMBER=JOBLIBS                    
//*---------------------------------------------------
//FFND05    PROC                                      
//FFND05    EXEC DLIBATCH,DLIPGM=FFND05,DLIPSB=FFUNDGO
//CEEOPTS   DD DUMMY                                  
//DFSVSAMP  DD DISP=SHR,DSN=FJS.PDSE.CNTL(VSAMBUF)    
//FFUNDDB   DD DSNAME=FJS.FFND.IMS.FFUNDDB,DISP=SHR   
//FFUNDIN   DD DSNAME=FJS.FFND.IMS.FFUNDIN,DISP=SHR   
//FFMOTBL   DD DSNAME=FJS.FFND.FFMOTBL,DISP=SHR       
//DRPT      DD SYSOUT=*                               
//MRPT      DD SYSOUT=*                               
//          PEND                                      
//*---------------------------------------------------
//          EXEC PROC=FFND05                          
//                                                    
But as soon as I try to add a line after "EXEC PROC=FFND05" to override a DD 
I get the error.

Any thoughts?  The one thing I can think of, and perhaps this really is the 
way to go, is to not code the DD's directly in to the JCL, but rather to have 
something like this:

//FFND05    PROC                                          
//FFND05    EXEC DLIBATCH,DLIPGM=FFND05,DLIPSB=FFUNDGO    
//DFSVSAMP  INCLUDE MEMBER=DFSVSAMP
//FFUNDDB   INCLUDE MEMBER=FFUNDDB        
//FFUNDIN   INCLUDE MEMBER=FFUNDIN        
//FFMOTBL   INCLUDE MEMBER=FFMOTBL
//DRPT      DD SYSOUT=*                                   
//MRPT      DD SYSOUT=*                                   
//          PEND                                          

The production job might look like this:
//FFND05    JOB CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID     
//PROCLIBS  JCLLIB ORDER=(PROD.PDSE.PROC)              
//JOBLIBS   INCLUDE MEMBER=JOBLIBS                    
//          EXEC PROC=FFND05                          

Whereas a test job could look like this:

//FFND05    JOB CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID     
//PROCLIBS  JCLLIB ORDER=(FJS.PDSE.PROC,PROD.PDSE.PROC)              
//JOBLIBS   INCLUDE MEMBER=JOBLIBS                    
//          EXEC PROC=FFND05                          

(I added my private proclib to the JCLLIB card.)

This might be useful for other reasons.  But it still does not allow me to 
override or even add new DD statements to the outer job.  For example I 
might want a CEEOPTS to set special runtime options during my test.  Or 
perhaps I want one of the reports (DRPT or MRPT) to have different attributes 
for some reason.

I haven't actually tried the above yet (using the INCLUDE MEMBER for the 
DD's), but I think it should work for DD's that are unique, in that every job 
that refers to them has them defining the same files.  I didn't do it for DRPT 
and MRPT because these are more generic.  Though I guess this is a bad 
example, because they are just SYSOUT's.  But I imagine there are cases 
where the same DD in two different jobs refer to two different files, and thus 
the INCLUDE MEMBER would not work.

Anyway...

Thanks,
Frank

-- 
Frank Swarbrick
Senior Systems Analyst - Mainframe Applications
FirstBank Data Corporation

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [EMAIL PROTECTED] with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html

Reply via email to