The output from the Zekeschedule load job is used as input for the Predictive Recall Job.
The following is a sample input file produced from a
Zeke schedule load job report. The
MONZKRX REXX script provided is passed a list of
arguments consisting of application names to parse.
MONZKRX script to parse specific application names from the report.REPORT ZEKE02M-04 RUN 6403 JOBS ADDED TO SCHEDULE BY SCHEDULE
EVENT VERSN EARLY SCHED LATE EVNT APP GRP USERID EVENT NAME JOB NAME
NUMBER TIME TIME TIME TYPE ID
32 0 - 00:00 - JOB DS CCA1800D CCA1800D
134 0 - 00:00 - JOB TEC TEC4016D TEC4016D
1015 0 - 00:00 - JOB EDI EDI2050D-1 EDI2050D
1017 0 - 00:00 - JOB EDI EDISYS1E EDISYS1E
The MONZKRX REXX application is located in the DTS.R71.SLyyddd.SAMPLIB distribution dataset. Examine the contents of MONZKRX. Each program has comments at the beginning of the member with further instructions about processing the input file.
DTS.R71.SLyyddd.SAMPLIB(MONZKJCL).The list of jobs generated by the job scheduling program is used as input into a REXX program.
One or more parameters are supplied to the REXX program to indicate which job sets are to be included. The program will parse the list of jobs and create control statements that contain a list of jobs to be evaluated by the Predictive Recall application.
//MONZEKE JOB MSGCLASS=A
//*
//* THIS STEP ASSUMES ZEKE REPORT IS INPUTDD
//* ON PARM AFTER ABCZKFRX IS A LIST OF JOB APPS
//* SEPARATED BY COMMAS MONZKFRX BCT,BCZ,C01
//*
//S01 EXEC PGM=IRXJCL,PARM='MONZKRX XYZ '
//SYSTSIN DD DUMMY
//SYSTSPRT DD SYSOUT=A
//INPUTDD DD DSN=ZEKE.LIST,DISP=SHR << ZEKE LISTING
//OUTDD DD SPACE=(CYL,(10,20),RLSE),UNIT=SYSALLDA,DISP=(,PASS)
//SYSEXEC DD DSN=SYS1.REXX,DISP=SHR << PRODUCTION REXX LIBRARY
EXEC IXRJCL PARM=
The REXX exec is passed a REXX program in the parameter field MONZKRX with
app parms.
The INPUTDD statement contains the job scheduler listing dataset (ZEKE, CA-7, or Control-M).
The OUTDD statement is the parsed output containing
INCLUDE member statements to be processed in subsequent job steps.
The SYSEXEC statement identifies where the REXX application source code exists.
The data file produced from the first step produces Monitor INCLUDE
control statements for JCL members, for example:
INCLUDE(MEMBER(XYZ2050D,
XYZSYS1E,
. . . . . XYZ8320D, XYZ8400D))
Step 2 - Expand the JCL and PROCS
//********************************************************************
//* PRECALL STEP 2 - This expands the JCL using the procedure
//* libraries specified on the PROCLIB DD statement.
//*
//* Note: Update the JCL DD statement to allocate the dataset(s) that
//* contain the JCL members
//*
//* Note: Update the JCLPROC DD statement to allocate the dataset(s)
//* used to expand the JCL. If necessary, concatenate
//* additional procedure libraries to JCLPROC
//*
//* Note: Update the STEPLIB and PARMLIB DD statements to allocate to
//* the DTS production data sets.
//********************************************************************
//PRECALL2 EXEC PGM=MONRUN
//STEPLIB DD DISP=SHR,DSN=DTS.R71.LOADLIB <= SCC DIST LOADLIB
//PARMLIB DD DISP=SHR,DSN=DTS.R71.PARMLIB <= SCC DIST PARMLIB
//JCL DD DISP=SHR,DSN=SYS1.JCL <= JCL LIBRARY
//JCLPROC DD DISP=SHR,DSN=SYS1.PROCLIB <= PROCLIB1
// DD DISP=SHR,DSN=SYS2.PROCLIB <= PROCLIB2
//SYSPRINT DD SYSOUT=*
//JCLLIST DD SYSOUT=*
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSUT1 DD UNIT=SYSALLDA,SPACE=(CYL,(1,1))
//SYSUT2 DD UNIT=SYSALLDA,SPACE=(CYL,(1,1))
//SYSUT3 DD UNIT=SYSALLDA,SPACE=(CYL,(1,1))
//DSNLIST DD DISP=(,PASS),SPACE=(CYL,(10,10),RLSE),UNIT=SYSALLDA,
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//SYSIN DD *
INCLUDE(ENV(DD))
SORT(DSNAME)
SELECT(FIRST DSNAME)
SETTINGS(JCL(10000 15000))
DDNAME(SYSOUT(DSNLIST))
RULES(NAME(@PRCSTP1) LIST)
JCL(DDNAME(JCL) CHECK(NONE))
// DD DISP=(OLD,DELETE),DSN=*.PRECALL1.OUTDDControl Statement Definitions
INCLUDE(ENV(DD)) /* scan DD statements */
SETTINGS(JCL(10000 15000)) /* up to 10000 jcl members */
/* swa buffer size for large jcl */
DDNAME(SYSOUT(DSNLIST)) /* output ddname for dataset list */
SORT(DSNAME) /* sort dataset list */
SELECT(FIRST DSNAME) /* no duplicate dataset names */
RULES(NAME(@PRCSTP1) LIST ) /* rule member name */
JCL(DDNAME(JCL,jcln,jclnx) /* JCL ddname list */
CHECK(NONE) /* don't perform JCL QA */
)
INCLUDE(MEMBER(……… /* JCL member names */For a detailed description of the control
statements, examine MONRUN Control Statements on page 10-1 in the
MON-Snapshot User's Guide.Rules
*
* ONLY PROCESS DISP=SHR/OLD AND NO VOLUME
*
DEFRULE DSN
IF DISP1 = (SHR,OLD,MOD)
* TEMP = NO
VOLSER = ""
THEN
ISSUE WRITEREC(DSN)
DEFREC DSN
FIELD &DSNAME LENGTH(44)
Step 3 - Query Catalog for volume of MIGRAT and Generate HRECALL Commands
This step reads the GDGBASE data set list file created from the previous step and executes Monitor rules to issue a catalog lookup on the data set name to obtain all generations and determine if the data set is migrated (volser is MIGRAT). An HRECALL command for each migrated data set generation is generated and appended to a file allocated to the //TSOCMD DD statement. This file is passed to the final step where the HRECALL commands are invoked.
In the event the data set is actually a GDGBASE, another specially formatted data set list is created and passed to the next step to query the catalog and expand all generations to determine if any of the generations are migrated.
//********************************************************************
//* PRECALL STEP 3 - Reads the list on Input data sets and generates
//* a recall request for all data sets with a VOLSER
//* of MIGRAT.
//********************************************************************
//PRECALL3 EXEC PGM=MONRUN
//STEPLIB DD DISP=SHR,DSN=*.PRECALL2.STEPLIB
//PARMLIB DD DISP=SHR,DSN=*.PRECALL2.PARMLIB
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//DSNLIST DD DISP=(OLD,DELETE),DSN=*.PRECALL2.DSNLIST
//GDGBASE DD DISP=(,PASS),SPACE=(CYL,(1,1)),UNIT=SYSALLDA,
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//TSOCMD DD DISP=(,PASS),SPACE=(CYL,(1,1)),UNIT=SYSALLDA,
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//SYSIN DD *
RULES(NAME(@PRCSTP2) LIST LOCALLOG)
EXTERNALRECORDS(DSNLIST)
INCLUDE(ENV(EXTERNAL))
Control statement definitions
RULES(NAME(@PRCSTP2) LIST LOCALLOG) /* rule member name */
/* output record to local dd */
EXTERNALRECORDS(DSNLIST)/* ddname of record input file */
INCLUDE(ENV(EXTERNAL)) /* process external records */
Rules
DEFREC DSN MAPFIELD(EXTRECORD)
FIELD DSN LENGTH(44)
*
* SEE IF EACH DATASET HAS A CURRENT VOLSER OF MIGRAT
*
DEFRULE MIGRAT
SET SET_DSNAME = &DSN
IF CATALOG:VOLSER = (MIGRAT)
THEN ISSUE WRITEMSG(RECALL)
IF CATALOG:VOLSER = ''
CATALOG:DSTYPE = B THEN
SET USRFLDC1 = "&DSNAME..**"
ISSUE WRITEREC(GDGBASE)
DEFMSG RECALL " HRECALL &CAT_DSNAME" DD(TSOCMD LOCAL)
DEFREC GDGBASE DDNAME(GDGBASE)
FIELD &USRFLDC1