The 1960’s were great time for many – but you do not have to continue using JCL from just the 1960’s.

It is great that JCL written in the 1960s still work today.  However JCL has moved on, and there are better JCL techniques available today.  Unfortunately the SMP/E installation instructions seem to be back in the 1960’s.  Many products have customization using the same, manual, laborious techniques.

In the 1960 you edited jobs and made the same changes multiple times

I was doing an SMP/E installation and it took 5 times longer that it should.

For example part of some JCL in one PDS member

//DELCSI EXEC PGM=IDCAMS,REGION=64M,COND=(0,LT)
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DELETE @hlqgzone@.CSI
SET MAXCC = 0
/*

and comments telling you to change @hlqgzone@  (High-level dataset qualifier(s) for SMP/E global zone datasets) to your value.

In another PDS member there is

//APPLY EXEC PGM=GIMSMP,REGION=0M,COND=(0,LT)
//SMPCSI DD DISP=SHR,
// DSN=@hlqgzone@.CSI

and comments telling you to change @hlqgzone@  (High-level dataset qualifier(s) for SMP/E global zone datasets) to your value.

In another and PDS member has

//ACCEPT EXEC PGM=GIMSMP,REGION=0M,COND=(0,LT)
//SMPCSI DD DISP=SHR,
// DSN=@hlqgzone@.CSI

and comments telling you to change  @hlqgzone@  (High-level dataset qualifier(s) for SMP/E global zone datasets) to your value.

There is a boring trend here.  Having to make the same change in about 10 files is tedious;  but it gets worse.

In the first and second job I change @hlqgzone@ to COLIN.SMP, and in the third job I changed it to COLIN.SMPE. Of course this did not work, so I had to spent time fixing it.  Having to manually change many files is error prone.

 A better way of doing it

Create a member called MYDEFS in the PDS for example

//E1 EXPORT SYMLIST=*
//S1 SET OPT=COLINOPT
//S2 SET HLQ=COLIN.PRODUCT
//S3 SET SMPVOL=USER00

In each job use cut and paste at the top

//BBQALLOC JOB NOTIFY=&SYSUID
//MYLIB JCLLIB ORDER=IBMUSER.F2
//OUTPUT1 INCLUDE MEMBER=MYDEFS

No magic here; you could use these variables in the 1960s  JCL, for example use VOL=SER=&VOL.

The magic is in the ability to use symbols within the program input.

//HBBQ999D EXEC PGM=IDCAMS,REGION=4M,COND=(0,LT)
//SYSPRINT DD SYSOUT=*
//SYSIN DD *,SYMBOLS=JCLONLY
DELETE &HLQ..AZYZCOB
DELETE &HLQ..SZYXCOB

Because of the SYMBOLS=JCLONLY, the variable &HLQ is replaced with the variable.

And what’s more – it gets better!

You can have the SYMBOLS processing logged to a logging-DDname.

//SYSIN DD *,SYMBOLS=(JCLONLY,SYMBOLS)
//SYMBOLS DD SYSOUT=*

and the DDNAME SYMBOLS has the data

SYSIN : RECORD 1 BEFORE SUBSTITUTION
SYSIN : DELETE &HLQ..AZYXCOB
SYSIN : RECORD 1 AFTER SUBSTITUTION
SYSIN : DELETE COLIN.PRODUCT.AZYXCOB

This logging-DDname option came out in z/OS 2.2 July 2015, so this may be new to some people.

And while I am grumbling…

The SMP/E install has members like

BQQACCPT
BQQALLOC
BQQAPPLY
BQQDDDEF
BQQSMPSU
BQQRECVE

you have to follow the documentation very carefully as the jobs have to be run in a particular order.

If they were to be renamed

B1QSMPSU
B2QALLOC
B3QDDDEF
B4QRECVE
B5QAPPLY
B6QACCPT

then it is easy to know the order of running the jobs, there should be less documentation, and it would be faster.

 

4 thoughts on “The 1960’s were great time for many – but you do not have to continue using JCL from just the 1960’s.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s