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:

  1. 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.]

  2. The CLASS parameter is required.  [JCP902E]

  3. MSGLEVEL=(1,1) is required.  [JCP914E]

  4. Accounting field positional parameters (e.g. LINES, PAGES, COPIES) are not allowed.   [JCP900E]

  5. REGION and TIME keyword parameters are not allowed at the JOB level.  [JCP901E]

  6. 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.

  7. The MSGCLASS parameter is required.  [JCP907W]

  8. 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)

  9. The Account Number should be 4 characters.

Guidelines:

  1. 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.

  2. The programmer-name parameter on the JOB statement should be the shortened title of the job (20 character maximum), not the programmer's name.

  3. 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]

  4. 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).

  5. 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.

  6. Example of standard JOB statement comments.

Contents


JCLLIB STATEMENT STANDARDS:

Rules:

  1. The JCLLIB statement is required immediately following the JOB statement. 

  2. The JCLLIB statement label must be "PROCLIB". [JCP931E]

  3. END.PROD.SHARED.PROCLIB is required as the first catalogued procedure library referenced by the JCLLIB statement.  [JCP932E]:

Guidelines:

  1. Example of standard JCLLIB statement.

Contents


JES STATEMENT STANDARDS:

Rules:

  1. 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]

  2. The COPIES parameter is not allowed on the /*JOBPARM statement. [JCP913E]

  3. /*OUTPUT statements are not allowed. [JCP912E]

  4. All JES statements must be grouped together consecutively in the job stream preceding the first job step.

  5. Multiple JES statements of the same type must be consecutive.

Guidelines:

  1. Use /*JOBPARM statements for accounting field positional parameters such as LINES or PAGES.  (NOTE: The COPIES parameter is not allowed.)

  2. If a job is using Control-D output control, the /*BIN statement should not be used.

  3. Example of the standard JES statement sequence.

Contents


CONTROL-D STANDARDS:

Rules:

  1. All jobs using Control-D output management will use MSGCLASS=M, K, P, Q, R, or V depending on retention criteria (see above).

  2. 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.

  1. DD output statements routed to Control-D reports will refer back to the CTDRPT OUTPUT statement. (Example)

Guidelines:

  1. 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:

  1. 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.

  2. All OUTPUT statements should appear grouped together before the first EXEC statement. (Example)

Contents


IF STATEMENT STANDARDS:

Rules:

  1. 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:

  1. 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)

  2. 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:

  1. Stepnames must be unique within a job. [JCP542W]

  2. A REGION parameter is not allowed on the EXEC statement when executing a cataloged procedure. [JCP940E]

  3. 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)

  4. 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]

  5. 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:

  1. 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]

  2. SYNCSORT is recommended over the use of DYL260 to copy datasets. [JCP941W]

  3. 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)

  4. 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.

  5. 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:

  1. All datasets referenced in production jobs must follow current naming conventions for production datasets.

  2. Non-production load libraries are not allowed.

  3. The first subparameter of the DISP parameter (NEW, OLD, SHR or MOD) is required on all DD statements containing permanent DSN parameters. [JCP920E]

  4. Keyword subparameters of the DCB parm must be promoted to "stand-alone" parms:

    // DCB=(RECFM=FBA,LRECL=133)
    promotes to: // RECFM=FBA,LRECL=133

     

  5. Use of the UNIT parameter is only valid when referencing TAPE. [JCP924E]

  6. 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:

  1. All SMS constructs are validated by JCLPrep.  Currently defined SMS values are documented here.

  2. 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.

  3. Generation datasets are recommended for use in cycles of permanent datasets.

  4. 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.

  5. 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.

  6. RECFM and LRECL should be specified on all output datasets, especially in steps that execute NATURAL programs.

  7. Omit the BLKSIZE parameter when possible to allow the system to calculate the most effective blocksize for the type of unit being used.

  8. 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.)

  9. Permanent datasets (either disk or tape) should always be scratched immediately before the step in which the dataset is created.

Contents

-- DISK DATASETS --

Rules:

  1. DISP=SHR is required on DD statements referencing all production job libraries, step libraries, and data libraries.  [JCP921E]

Guidelines:

  1. Use DISP=SHR as often as possible to prevent tying up datasets.

  2. 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.

  3. 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:

  1. 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]

  2. EXPDT=99365 is allowed only on tape datasets that have a high-level qualifier of ARCHIVE. [JCP927E]

  3. 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)

  4. EXPDT and RETPD subparameters of the LABEL parm must be promoted to "stand-alone" parms:

    //LABEL=EXPDT=98030
    promotes to: //EXPDT=98030

     

  5. 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:

  1. 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.

  2. 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.

  3. If you know that a dataset will require more than one tape volume,  data should be compressed using the TRTCH=COMP parameter.

  4. 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:

  1. 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))

  2. 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:

  1. The use of instream PROCs is not recommended.  Use the SET construct for JCL symbolic substitution.  See the SET statement for an example.

  2. 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.

  3. 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:

  1. All INCLUDE members must exist in a library referenced in the JCLLIB statement.   The library must follow END.PROD.SHARED.PROCLIB.

Guidelines:

  1. 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


  2. 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:

  1. 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


  2. 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.
    /*


  3. 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:

  1. 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)

  2. 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:

  1. The logon password must be placed in a secured external dataset.

  2. FTP command statements must be concatenated after the DD statement referencing the secured external dataset.

  3. 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.

  4. When using the GNUT3050 utility, include ‘PARM=’ on the FTP exec statement.

    //FTPSTEP EXEC FTP,PARM=

  5. The OUTPUT DD is required only when calling program GNUT3050 or when routing the output somewhere other than to tearsheets.

  6. The “quit” statement must be included as the last FTP command.

Guidelines:

  1. Use the dns name of the host you are connecting to rather than the IP address of the host.

    wsumvs1.it.wsu.edu

  2. All of the logon statements (Host Name, Userid, and Password) supplied to the FTP Procedure should be placed in a single secured external dataset.

  3. 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

  4. 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:

  1. Hardcoded email addresses must be placed in an Endevor managed library.

  2. 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:

  1. The user’s email address should be placed in a searchable, Endevor managed library.

  2. A datalib element is recommended for storing email addresses.

  3. Instream email addresses are strongly discouraged.

  4. Include a valid Reply User Id whenever possible. Example: pss@wsu.edu

Contents


GENERAL STANDARDS:

Rules:

  1. 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)


  2. 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
    //*


  3. 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:

  1. 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