WSU Information Technology
Production JCL Standards
Revised: March 24, 2003 |

|
Contents:
POLICY:
| Standards: |
Job Control Language (JCL) for all IT Production
MVS batch jobs (including cataloged procedures and in-stream proc's) must
conform to the following Standards. Production MVS batch jobs are considered
to be those batch processes that execute and/or reside in IT's Production
MVS environment, consisting of the CA-7 Batch Scheduling facility and the
CA-Endevor Software Management repository.
|
| Guidelines: |
The Guidelines presented here are not enforced, but are designed
to help you write JCL that is consistent, readable and maintainable. It is recommended
that IT Production MVS batch jobs follow all applicable JCL Guidelines. |
All MVS batch jobs running outside of Information Technology's
production environment are strongly encouraged to follow these JCL Standards and
Guidelines.
USAGE NOTES:
JCLPrep message codes are documented in the related Rules and Guidelines in the form: [JCP9nnE].
A trailing "E" signifies an error message that will deny acceptance of a set of
JCL. A trailing "W" signifies a warning message; an "I" signifies an
informational message.
The MVS JCL Reference Manual is available in IBM BookManager
format on the ITLan. Instructions for installing the software and accessing
the manuals are published at Manuals.html.
Contents
JOB STATEMENT STANDARDS:
Format:
| Keyword Order: |
MSGLEVEL, MSGCLASS, (others), CLASS, COND, RESTART |
| "JOB" Begin Column: |
12 |
| Spaces After "JOB": |
1 |
| Continuation Column: |
16 |
| Maximum Column: |
66 (NOTE: cols. 67-72 reserved for CA-7) |
| Keywords per Line: |
1 |
Rules:
- The job name must be registered in the IT
Application Element Inventory. [Note: This rule is not enforced
by JCLPREP, but all production jobs will be validated in AEI when they are
added into Endevor.]
- The CLASS parameter is required. [JCP902E]
- MSGLEVEL=(1,1) is required. [JCP914E]
- Accounting field positional parameters (e.g. LINES, PAGES, COPIES) are not
allowed. [JCP900E]
- REGION and TIME keyword parameters are not allowed at the JOB level.
[JCP901E]
- A comment statement that briefly summarizes the purpose of the job is required
between the JOB statement and the first job step. The comment(s) must
be preceded by and followed by a line of asterisks.
- The MSGCLASS parameter is required. [JCP907W]
- MSGCLASS parameter values allowed are [JCP908W]:
M Control-D output management (retention 2 years, 2 months)
K Control-D output management (retention
7 days)
P Control-D output management (retention
31 days)
Q Control-D output management (retention
2 months)
I Control-D output management (retention 6
months)
R Control-D output management (retention
1 year)
V Control-D output management (retention
5 years)
D Job output purged at job
completion
T Job output routed to hold queue
(MSGCLASS "T"
is not recommended for production JCL)
- The Account Number should be 4 characters.
Guidelines:
- JCL Comment statements need to be current, understandable and appropriate.
Comments should be updated as necessary when JCL is changed, and deleted when no longer
meaningful. If steps are copied from job to job, or if an existing job is
"cloned" to create a new job, please update all associated Comments so that they
apply correctly to the new JCL.
- The programmer-name parameter on the JOB statement should be the shortened title of the
job (20 character maximum), not the programmer's name.
- The standard Job Class used by jobs running in CA-7 is S. Job
Class P is allowed in specific cases such as short running print jobs.
[JCP903W]
- Condition code checking on the JOB statement may be used to ensure
that the job terminates if any step produces a return code greater than 0. This can be
especially important for multi-step jobs executing NATURAL programs that do not use DUX370
to force abends. The format of the COND parm on the JOB statement is COND=(0,LT).
In this job, steps that specify COND=EVEN will not be executed if a previous step produced
a return code greater than 0. They will, however, execute if a previous step abended.
NOTE: Jobs using the scratch proc ACSCRTCH should use COND=(3,LT).
- Jobs that produce no specific reports and are considered to be entirely
"tearsheets" should use a MSGCLASS of M, K,
P, Q, I, R, or V
(depending on retention length requirements, see above).
No CTDRPT OUTPUT statement should be included. The complete
output of the job will be routed to the specified online tearsheet class in
Control-D.
- Example of
standard JOB statement comments.
Contents
JCLLIB STATEMENT STANDARDS:
Rules:
- The JCLLIB statement is required immediately following the JOB
statement.
- The JCLLIB statement label must be "PROCLIB".
[JCP931E]
- END.PROD.SHARED.PROCLIB is required as the first
catalogued procedure library referenced by the JCLLIB statement.
[JCP932E]:
Guidelines:
- Example of
standard JCLLIB statement.
Contents
JES STATEMENT STANDARDS:
Rules:
- The /*ID statement is required with the jobname as the ID or the
first part of the ID. For example, job DPS800 could have an ID of DPS800, DPS800A,
DPS800B, etc.. [JCP910E, JCP911E]
- The COPIES parameter is not allowed on the /*JOBPARM statement.
[JCP913E]
- /*OUTPUT statements are not allowed. [JCP912E]
- All JES statements must be grouped together consecutively in the job stream preceding
the first job step.
- Multiple JES statements of the same type must be consecutive.
Guidelines:
- Use /*JOBPARM statements for accounting field positional
parameters such as LINES or PAGES. (NOTE: The COPIES parameter is not allowed.)
- If a job is using Control-D output control, the /*BIN statement
should not be used.
- Example of the
standard JES statement sequence.
Contents
CONTROL-D STANDARDS:
Rules:
- All jobs using Control-D output management will use MSGCLASS=M, K,
P, Q, R, or V depending on retention criteria (see above).
- All jobs with Control-D report definitions must contain the
following statements immediately after any JES statements:
//*CONTROL-D
//CTDRPT OUTPUT CLASS=N
NOTE: Do not include these statements if the job has no report
definitions.
- DD output statements routed to Control-D reports will refer back
to the CTDRPT OUTPUT statement. (Example)
Guidelines:
- Control-D referback SYSOUT's that reference reports using special
forms should include an inline comment that specifies the PAGEDEF, FORMDEF, FCB, COPIES,
etc.. (Example)
Contents
OUTPUT STATEMENT STANDARDS:
Format:
| Keyword Order: |
DEST, (others), COPIES |
| "OUTPUT" Begin Column: |
12 |
| Spaces After "OUTPUT": |
1 |
| Continuation Column: |
16 |
| Maximum Column: |
71 |
| Keywords per Line: |
4 |
Rules:
- All jobs with reports defined to Control-D are required to include the following OUTPUT
statement:
//CTDRPT OUTPUT CLASS=N
Outputs being routed to Control-D as reports will refer back to this statement.
- All OUTPUT statements should appear grouped together before the
first EXEC statement. (Example)
Contents
IF STATEMENT
STANDARDS:
Rules:
- IF/ENDIF statements must not enclose steps
that use a COND parameter on the EXEC statement. (Note: this rule is also
documented under EXEC STATEMENT STANDARDS Rule #3)
Guidelines:
- Statement labels are not required on IF, ELSE and ENDIF
statements, but consistent labels can make the IF structures much easier to identify
(especially in the case of nested IF's). The recommended method is to begin each statement
label with "IF", "ELSE" and "END" respectively, followed by
a unique identifier of up to four characters. (Example)
- To avoid confusion, use either COND or IF logic consistently in
your job. Do not mix the two styles.
| Note: The JCLPrep conversion routine named P$COND
is available to convert all COND parameters in a job to the appropriate IF/ENDIF
logic. |
Contents
EXEC STATEMENT STANDARDS:
Format:
| Keyword Order: |
REGION, TIME, (others), COND, PARM |
| "EXEC" Begin Column: |
12 |
| Spaces After "EXEC": |
1 |
| Continuation Column: |
16 |
| Maximum Column: |
71 |
| Keywords per Line: |
2 |
Rules:
- Stepnames must be unique within a job. [JCP542W]
- A REGION parameter is not allowed on the EXEC statement when executing a cataloged
procedure. [JCP940E]
- The COND parameter is not allowed on an
EXEC statement that is enclosed by an IF/THEN/ELSE/ENDIF statement.
(Note: this rule is also documented under IF STATEMENT STANDARDS Rule #1)
- When a cataloged procedure is available for a standard system
utility, the procedure must be used rather than a direct reference to the utility program,
e.g.,
|
//SORT01 EXEC SORTDA |
not: |
//SORT01 EXEC PGM=SORT |
Available system utility cataloged procedures include NATURAL2,
NAT2PRF, SORTDA, DUX390, OPENCLSE, SAS, CA7BTI, CA7SVC, FTP,
TSOBATCH. [JCL944E]
- A comment statement that briefly describes the function of the job step is required
immediately before or after the EXEC statement. The comment(s) must be preceded by
and followed by a line of asterisks. Note: if you "clone" a step
from one job to another, please be sure to update the comment statements
to reflect the function of the new step. (Example)
Guidelines:
- IDCAMS or IEFBR14 steps are recommended over the use of ACSCRTCH to delete datasets.
(Note: if you convert job steps from ACSCRTCH to either of these utilities,
be sure to check with Production Control to see if the Job screen is allowing condition
codes based on the existence of an ACSCRTCH step.) [JCP943W]
- SYNCSORT is recommended over the use of DYL260 to copy datasets. [JCP941W]
- Each job step should be given a meaningful stepname on the EXEC statement (one that
indicates what occurs in the step rather than just STEP1, STEP2, etc.). This makes the
abend messages more meaningful and the JCL easier to reference. It is strongly recommended
that the program name be used as the stepname. (Example)
- IF/ENDIF logic is recommended over the COND logic on the EXEC
statement, due to its increased clarity and readability. The reverse logic employed by the
COND parameter can be confusing, and care should be taken when coding it.
- Return code checking and forced abends should be used to prevent the execution of
particular job steps that depend on the success of preceding steps. To insure that
execution does not continue for multi-step NATURAL jobs or NATURAL jobs running in
sequence, force an abend by calling DUX370. (Example)
Contents
DD STATEMENT STANDARDS:
Format:
| Keyword Order: |
DSN, UNIT, VOL, SPACE, LABEL, (others), RECFM, LRECL, BLKSIZE, SYSOUT,
COPIES, DISP |
| "DD" Begin Column: |
12 |
| Spaces After "DD": |
2 |
| Continuation Column: |
16 |
| Maximum Column: |
71 |
| Keywords per Line: |
2 |
-- GENERAL DD --
Rules:
- All datasets referenced in production jobs must follow current naming conventions for
production datasets.
- Non-production load libraries are not allowed.
- The first subparameter of the DISP parameter (NEW, OLD, SHR or MOD) is required on all
DD statements containing permanent DSN parameters. [JCP920E]
- Keyword subparameters of the DCB parm must be promoted to "stand-alone" parms:
|
// DCB=(RECFM=FBA,LRECL=133) |
| promotes to: |
// RECFM=FBA,LRECL=133 |
- Use of the UNIT parameter is only valid when referencing TAPE. [JCP924E]
- SYSOUT's producing reports to be captured by Control-D must refer back to the required
CTDRPT OUTPUT statement:
//CMPRT01 DD OUTPUT=*.CTDRPT,SYSOUT=(,)
Guidelines:
- All SMS constructs are validated by JCLPrep. Currently defined SMS values are
documented here.
- When using either cataloged procedures or in-stream proc's, specify stepnames on all DD
override statements rather than just the first one for each step.
- Generation datasets are recommended for use in cycles of permanent datasets.
- It is recommended that all 3 subparameters of the DISP parameter be coded, especially
when creating or deleting datasets, even if the default values are desired. This
documentation will help clarify disposition of datasets.
- To prevent new datasets from being kept and cataloged when jobs abend and the dataset is
not required for recovery, use the DELETE option as the third subparameter of the DISP
field, e.g., DISP=(NEW,CATLG,DELETE). Under the CA-1 tape system, tapes will not be
assigned if the DELETE option is used and the job abends.
- RECFM and LRECL should be specified on all output datasets, especially in steps that
execute NATURAL programs.
- Omit the BLKSIZE parameter when possible to allow the system to calculate the most
effective blocksize for the type of unit being used.
- When the retention of a temporary dataset would be useful in the event of an abend,
either use a temporary management class, or else code a permanent dataset name and then
delete it at the end of the job. (Current management classes are documented here.)
- Permanent datasets (either disk or tape) should always be scratched immediately before
the step in which the dataset is created.
Contents
-- DISK DATASETS --
Rules:
- DISP=SHR is required on DD statements referencing all production job libraries, step
libraries, and data libraries. [JCP921E]
Guidelines:
- Use DISP=SHR as often as possible to prevent tying up datasets.
- When creating permanent sequential datasets on disk, space should be allocated
in tracks and unused space released. Space is released in the units allocated,
so cylinder allocations may use more space than necessary.
Use of the SPACE parameter with the RLSE option is recommended, e.g.,
...,SPACE =(TRK,(pp,ss),RLSE)
where pp is the primary allocation and ss is the secondary allocation.
NOTE: Space is used more efficiently by accurately estimating the primary
allocation with a small secondary allocation, and by using the RLSE subparameter.
- Guidelines for the use of Datalib members:
a) END.PROD.SHARED.DATALIB is available for general use to store members containing
job control information.
b) DATALIB members are stored in Endevor as type DATA, and must be registered
in the Application Element Inventory to ensure uniqueness.
c) DATALIB members should not be used to store dynamic Production Control
job setup information or data that is sensitive from a security standpoint,
such as passwords.
d) END.PROD.SHARED.SDATALIB is available for storing data containing sensitive
or secure job control information.
e) SDATALIB members are stored in Endevor as type SDATA, and must be registered
in the Application Element Inventory to ensure uniqueness.
f) Datalib members should be given names related to the program or the 800-level
jobs that use the data, e.g.:
CAD820A -- used by job CAD820.
g) Comments should be used whenever possible in Datalib members. (Some utilities,
e.g. SORT, will accept comments in their control stream.)
Contents
-- TAPE DATASETS --
Rules:
- When creating permanent tape datasets either the EXPDT (expiration date) or the RETPD
(retention period) parameter is required to support the automatic release of tapes.
[JCP926E]
- EXPDT=99365 is allowed only on tape datasets that have a high-level qualifier of
ARCHIVE. [JCP927E]
- The DEFER subparameter of the UNIT parm is required for tape datasets. This can prevent
unnecessary mounting of tapes if the job should terminate before the tape dataset is
opened, [JCP928E], e.g.,
//
UNIT=(TAPE,,DEFER)
- EXPDT and RETPD subparameters of the LABEL parm must be promoted to
"stand-alone" parms:
|
//LABEL=EXPDT=98030 |
| promotes to: |
//EXPDT=98030 |
- Use UNIT=AFF=ddname for different tape datasets residing on different volumes that can
be allocated to the same unit. This reduces the total number of units used for the job.
For example:
//PAPG2080 EXEC NATURAL2,TIME=40
//CMWKF01 DD DSN=TAPE.CAPR.PAM800.PAPG2030.TEXTKEY,DISP=OLD
// DD
DSN=TAPE.CAPR.PAM800.PAPG2040.TEXTKEY,UNIT=AFF=CMWKF01,
// DISP=OLD
// DD
DSN=TAPE.CAPR.PAM800.PAPG2060.TEXTKEY,UNIT=AFF=CMWKF01,
// DISP=OLD
// DD
DSN=TAPE.CAPR.PAM800.PAPG2070.TEXTKEY,UNIT=AFF=CMWKF01,
// DISP=OLD
Guidelines:
- If using the same tape in more than one step, use VOL=(,RETAIN) in all references except
the last one to prevent remounting the tape.
- To prevent scratch tapes from being assigned to a specific procedure number by the tape
system, code temporary dataset names (&&dsname) for those tapes needed only for
the duration of the job.
- If you know that a dataset will require more than one tape volume, data should be
compressed using the TRTCH=COMP parameter.
- The following values are supported for the RETPD and EXPDT parameters for tape datasets:
RETPD=nnnn indicates that the dataset is to be retained for the specified number of
days (1 through 9999).
EXPDT=yyyy/ddd indicates that the dataset is to be retained until a specific date
(Julian).
EXPDT=98nnn indicates that the dataset is to be retained for the specified number
of days after the date on which it was last used. Value of nnn must be between 001 and
365.
EXPDT=98000 indicates that the tape volser is not to be validated against the CA-1
catalog (TMC). This format is to be used only for "foreign" tapes that
are not managed by CA-1.
EXPDT=99000 indicates that the dataset is under catalog control and will be
retained until it is uncataloged.
EXPDT=99365 indicates that the dataset is to be permanently retained and will not
be automatically released.
Contents
-- TEMPORARY DATASETS --
Guidelines:
- Listed below are examples of coding temporary datasets.
//WORKFILE DD SPACE=(113,(50,10),RLSE),AVGREC=K
//PASSFILE DD DSN=&&PASSFILE,SPACE=(113,(50,50),RLSE),
//
AVGREC=K,DISP=(NEW,PASS)
//SORTWORK DD SPACE=(CYL,(15,15))
- Using MGMTCLAS=MCTEMP to temporarily catalog datasets is not recommended. When
using management class MCTEMP to retain a dataset in the event of an abend, be certain to
scratch the dataset immediately before the step in which the dataset is created or at the
end of the job if it completes successfully.
Contents
PROC STATEMENT STANDARDS:
Format:
| Keyword Order: |
none |
| "PROC" Begin Column: |
12 |
| Spaces After "PROC": |
1 |
| Continuation Column: |
16 |
| Maximum Column: |
71 |
| Keywords per Line: |
1 |
Guidelines:
- The use of instream PROCs is not recommended. Use the SET construct for JCL
symbolic substitution. See the SET
statement for an example.
- Nest system PROCs rather than issuing an EXEC PGM=pgmname statement. System
utility PROCs include NATURAL2, NAT2PRF, SORTDA, DUX390, OPENCLSE, SAS, CA7BTI, CA7SVC,
FTP, and TSOBATCH.
- DD * data or input parms should be passed to lower level programs via temporary files or
datalib members.
Contents
INCLUDE
and SET STATEMENT STANDARDS
Rules:
- All INCLUDE members must exist in a library referenced in the JCLLIB statement.
The library must follow END.PROD.SHARED.PROCLIB.
Guidelines:
- Listed below is an example of the INCLUDE statement and sample members:
//INPUT INCLUDE MEMBER=memname
MEMBER memname:
//JOBLIB DD
DSN=END.PROD.SHARED.LOADLIB,DISP=SHR
-- OR --
//INPUT DD
DSN=COMPBILL.BILLMISC.&MISCPER..WSUMVS1,DISP=SHR
// DD
DSN=COMPBILL.DATA(REBATE),DISP=SHR
// DD
DSN=COMPBILL.BILLMISC.&MISCPER..OPER,DISP=SHR
// DD
DSN=COMPBILL.COMSTOR.&MISCPER..WSUMVS1,DISP=SHR
// DD
DSN=COMPBILL.BILLMISC.&MISCPER..LANSERV,DISP=SHR
// DD
DSN=COMPBILL.BILLMISC.EQUIP.DISP=SHR
- Listed below is an example of the SET statement and a sample
of using it in an INCLUDE statement member:
//SETDATA SET BILLPER='2000JAN',
// MONTH='JAN',
// MISCPER='JAN2000'
//USEDATA EXEC PGM=IEFBR14
// DD
DSN=&&A&BILLPER,DISP=(NEW,DELETE)
// DD
DSN=&&&MONTH,DISP=(NEW,DELETE)
// DD
DSN=&&&MISCPER,DISP=(NEW,DELETE)
Contents
NATURAL/ADABAS STEP STANDARDS:
Rules:
- All ADABAS and/or NATURAL job steps must include a DBPASSW DD statement to provide
database password information.
//DBPASSW DD *
passwordNOMAP
- or - (when the Adabas password is not required)
//DBPASSW DD
DSN=END.PROD.SHARED.DATALIB(NOMAP),
// DISP=SHR
- The proper format for a batch logon to NATURAL is:
//SYSIN DD *
LOGON application-id
EXECUTE program-name } EX, EXEC, or EXECUTE command required
FIN
in
front of NATURAL program name.
/*
- To ensure that ADABAS is up and running for a job that requires it, invoke the cataloged
procedure DUX390 in the JCL. Jobs that update ADABAS files must use DUX390 to take
checkpoints before and after the update step and include a checkpoint-id parameter. The
trailing DUX390 should include either a COND=EVEN or IF/THEN/ELSE logic to mark the
end checkpoint when the job abends. (Usage of DUX390
is documented.)
Guidelines:
- Jobs accessing ADABAS without the use of the NATURAL cataloged procedures, i.e., using
COBOL, ASM, etc., need the following DD statements in each step that accesses ADABAS:
//DBFMTID DD
DSN=END.PROD.SHARED.FMTLOAD,DISP=SHR
(For access to the format-id tables used by DBINTER)
//DDCARD DD
DSN=END.PROD.ADABAS.PUB.DATALIB(DB200),FREE=CLOSE,
// DISP=SHR
(For access to the parameters required for ADABAS)
-or-
//DDCARD DD
DSN=END.PROD.ADABAS.PUB.DATALIB(PREFETCH),FREE=CLOSE,
//
DISP=SHR
(For access to the parameters required by the Prefetch facility)
- NATURAL should be invoked by batch jobs through the cataloged procedures
"NATURAL2" or "NAT2PRF" (Prefetch):
//PROCLIB DD
DSN=END.PROD.SHARED.PROCLIB,DISP=SHR
//stepname EXEC NATURAL2
- or -
//stepname EXEC NAT2PRF
Contents
FTP STANDARDS:
Rules:
- The logon password must be placed in a secured external dataset.
- FTP command statements must be concatenated after the DD statement referencing
the secured external dataset.
- The FTP command statements must be separate from the logon statements.
Command statements may be issued via an external dataset, in-stream data,
or a combination of both.
- When using the GNUT3050 utility, include ‘PARM=’ on the FTP
exec statement.
//FTPSTEP EXEC FTP,PARM=
- The OUTPUT DD is required only when calling program GNUT3050 or when routing
the output somewhere other than to tearsheets.
- The “quit” statement must be included as the last FTP command.
Guidelines:
- Use the dns name of the host you are connecting to rather than the IP address
of the host.
wsumvs1.it.wsu.edu
- All of the logon statements (Host Name, Userid, and Password) supplied
to the FTP Procedure should be placed in a single secured external dataset.
- Listed below are examples of coding an FTP Step:
//FTPSTEP EXEC FTP
//INPUT DD DSN=END.PROD.SHARED.SDATALIB(member),DISP=SHR
// DD DSN=HLQ.FTP.COMMANDS,DISP=SHR
-- OR --
//FTPSTEP EXEC FTP
//INPUT DD DSN=END.PROD.SHARED.SDATALIB(member),DISP=SHR
// DD *
put ‘hlq.dataset.name’
quit
- Use GNUT3050 to suppress the return code on the FTP step. For more information
regarding the use of GNUT3050 with FTP, see http://infotech.wsu.edu/pss/natural/aplnutil/gnut3050.html.
//FTPSTEP EXEC FTP,PARM=
//INPUT DD DSN=END.PROD.SHARED.SDATALIB(member),DISP=SHR
// DD DSN=HLQ.FTP.COMMANDS,DISP=SHR
//OUTPUT DD DSN=HLQ.FTP.OUTPUT,MGMTCLAS=MCDEFLT,
// SPACE=(TRK,(1,1),RLSE),RECFM=FB,
// LRECL=132,DISP=(NEW,CATLG,CATLG)
//*
//GNUT3050 EXEC NATURAL2
...
Contents
Email STANDARDS:
Rules:
- Hardcoded email addresses must be placed in an Endevor managed library.
- The Jobname must be included in the email. It may be included in the Subject,
the Reply User Name, or in the text.
//GNUT7045 EXEC NATURAL2
//CMPRT01 DD SYSOUT=*
//CMWKF01 DD DSN=END.PROD.SHARED.DATALIB(emailadr),DISP=SHR
//CMWKF02 DD *
jobname FTP DATA AVAILABLE (Subject)
//CMWKF03 DD DUMMY,BLKSIZE=80 (Reply User Id)
//CMWKF04 DD DUMMY,BLKSIZE=80 (Reply User Name)
//CMWKF05 DD DSN=END.PROD.SHARED.DATALIB(text),DISP=SHR
-- OR --
//GNUT7045 EXEC NATURAL2
//CMPRT01 DD SYSOUT=*
//CMWKF01 DD DSN=END.PROD.SHARED.DATALIB(emailadr),DISP=SHR
//CMWKF02 DD DUMMY,BLKSIZE=80 (Subject)
//CMWKF03 DD DUMMY,BLKSIZE=80 (Reply User Id)
//CMWKF04 DD *
jobname (Reply User Name)
//CMWKF05 DD DSN=END.PROD.SHARED.DATALIB(text),DISP=SHR
Guidelines:
- The user’s email address should be placed in a searchable, Endevor
managed library.
- A datalib element is recommended for storing email addresses.
- Instream email addresses are strongly discouraged.
- Include a valid Reply User Id whenever possible. Example: pss@wsu.edu
Contents
GENERAL STANDARDS:
Rules:
- If JCL is submitted from sources outside of MVS (e.g., Data Entry keydisk, Point of
Sale, etc.) a copy of the JCL must be stored for backup purposes in the production library
END.PROD.SHARED.JCLLIB. This copy must include 3 comment lines inserted immediately after
the JOB statement with the following information:
//*EXTERNAL
(Required literal)
//*source (e.g. KEYDISK, POS)
//*JCL location (Where the production JCL resides, e.g. Data Entry
diskette)
- Production batch jobs with JCL that requires manual intervention (setup) are strongly
discouraged. For those jobs that require setup, the following rules apply:
a) A comment statement containing the following information will be included as close as
possible before the line requiring setup:
//*SETUPnn
where 'nn' refers to the SETUP number in the 800 level job documentation.
b) The word "SETUP" must not be used in any other comment statements. Production
Control uses the FIND command of the ISPF and CA-7 editors in order to accomplish the
setup.
c) For variable information that Production Control is to change during setup, symbolic
codes must be used rather than "live" data. This allows Production Control to
more easily identify the values that need to be changed. The standard set of symbolic
codes to be used are:
MM
numeric
representation of the month, e.g., 12 = December
MMYYYY numeric representation of the month
plus the year
MMDDYYYY date
BMDDYYYY begin month date
EMDDYYYY ending month date
CMDDYYYY current month date
PMDDYYYY pay cycle date
GMDDYYYY graduation date
SMDDYYYY start month date
YYYY
year
PYYY
previous
year
YYYYS year/semester
YYYYT year/term
YYYYJJJ Julian date
FFFY
fiscal
year
MMM name of
a month (e.g., OCT, NOV or DEC)
MMMYYTYP month year and payroll type, e.g., RG1
d) The use of 4-digit year references (YYYY) is required on all new jobs containing
date setup lines.
e) Symbolic codes must not be strung together. For example, MMDDYYYYS could imply a
4-digit year followed by a semester, or could imply a 2-digit year followed by another
2-digit year and a semester. Separate the codes with blanks or place them on separate
lines. The following example shows the preferred method:
//*SETUP02
//CMWKF01 DD *
(MMDDYYYY) DATE
(S)
ACADEMIC TERM TYPE
(YYYY)
ACADEMIC
CALENDAR YEAR
//*
- When using CA-7 control statements (#JI, #JO, etc.) to enable permanent and
semi-permanent JCL changes the following rules apply:
a) All CA-7 control statements must begin in column 1.
b) CA-7 control statements must not be imbedded within the JOB statement.
c) A #JEND statement is required following both #JI and #JO statements.
d) CA-7 control statements allowed: #JI, #JO, #JEND, #HLD, #JCL, #NOX, #NTR, #SCC.
Please see the CA-7 Guide (\IT_DOCS\PRDCTRL\CA-7\DOCS\CA7GUIDE.DOC) for information
regarding the use of these control statements.
Guidelines:
- Use inline comments to identify sort fields in a Sort step or Pagedef, Formdef, etc. on
Output handled by Control-D.
//SYSIN DD *
SORT FIELDS=(1,9,CH,A,
WSU-NUM
10,3,CH,A, PGM
20,9,CH,A)
ADACT-NUM
//CMPRT01 DD OUTPUT=*.CTDRPT,SYSOUT=(,) PAGEDEF
xxxxxx, 2 Copies
Contents
APPENDIX
SMS Values Table
| Management Class |
Days on
Primary Disk |
Days on
Level 1 Disk |
Days to
Expiration |
Function |
|
|
|
|
|
| MCTEMP |
2 |
2 |
3 |
Temporary: three days |
| MCWEEK |
0 |
0 |
7 |
Temporary: one week |
| MCMONTH |
7 |
14 |
31 |
One month retention |
| MCQTR |
7 |
14 |
92 |
One annual quarter retention |
| MCYEAR |
15 |
10 |
367 |
One year retention |
| MCDEFLT |
32 |
15 |
nolimit |
Default migration |
| MCMGIMED |
1 |
5 |
nolimit |
Migrate immediately to Level 1 |
| MCARC2YR |
0 |
0 |
731 |
Two year archive to tape |
Contents
Example JCL
//ABC123 JOB (PROC),
// 'PRODUCTION JOB',
// MSGLEVEL=(1,1),
// MSGCLASS=M,
// CLASS=S
//* RUN THROUGH JCLPREP ON 12/31/2000 AT 13:48:47 BY OSSINGE
//********************************************************************
//* Washington State University
//* ABC Production System
//*
//* Process Production Stuff
//********************************************************************
//PROCLIB JCLLIB ORDER=END.PROD.SHARED.PROCLIB
/*JOBPARM LINES=9999
/*ID ABC123
/*BIN ACS Use only if job not routed to Control-D
//*CONTROL-D
//CTDRPT OUTPUT CLASS=N
//*
//********************************************************************
//* Check to be certain ADABAS is up before running job.
//********************************************************************
//DUX390 EXEC DUX390
//********************************************************************
//* Natural step to do something
//********************************************************************
//ABCD3000 EXEC NATURAL2,TIME=5
//CMPRINT DD SYSOUT=*
//CMPRT01 DD OUTPUT=*.CTDRPT,SYSOUT=(,)
//CMPRT02 DD OUTPUT=*.CTDRPT,SYSOUT=(,) PAGEDEF XYZ123, 2 COPIES
//CMWKF01 DD DSN=PRDCTRL.WORK.DATASET,MGMTCLAS=MCTEMP,
// SPACE=(TRK,(100,20),RLSE),RECFM=FB,
// LRECL=133,DISP=(NEW,CATLG,DELETE)
//DBPASSW DD *
PASSWORDNOMAP
//SYSIN DD *
LOGON SYSTEM
EXECUTE ABCD3000
FIN
/*
//IFTEST IF (ABCD3000.NATURAL.RC EQ 0) THEN
//*********************************************************************
//* If successful, scratch work dataset
//*********************************************************************
//SCRATCH EXEC IEFBR14
//DSN DD DSN=PRDCTRL.WORK.DATASET,DISP=(OLD,DELETE)
/*
//ELSETEST ELSE
//*******************************************************************
//* Else, notify Production Control of job failure and abend
//*******************************************************************
//GNUT7045 EXEC NATURAL2,TIME=1
//CMPRT01 DD SYSOUT=*
//CMWKF01 DD *
prdctrl@wsu.edu
//CMWKF02 DD *
Job Failure
//CMWKF03 DD DUMMY,BLKSIZE=80
//CMWKF04 DD *
ABC123
//CMWKF05 DD *
Job ABC123 failed execution.
//DBPASSW DD *
PASSWORDNOMAP
//SYSIN DD *
EXECUTE GNUT7045
FIN
/*
/*********************************************************************
//* If unsuccessful, abend.
//*********************************************************************
//ABEND1 EXEC PGM=DUX370,REGION=6M
//*
//ENDTEST ENDIF
//*
Contents