EJCK : IDCAMS PARM MARGINS() exceeding column 72
search cancel

EJCK : IDCAMS PARM MARGINS() exceeding column 72

book

Article ID: 279134

calendar_today

Updated On:

Products

JCLCheck Workload Automation

Issue/Introduction

When the IDCAMS option PARM MARGIN(start end) is used, the IDCAMS  statements in SYSIN may exceed column 72.  

MARGIN(2 72) is the  default, but the margins can be set larger up to the input file's record size, for example PARM MAGINS(2 80) can be used.

In this situation, an EJCK validation of the jcl can get the below error : 

 CAY6018E  UNMATCHED PARENTHESES    

                                           
 and other errors due to missing parameters, such as :

                           
 CAY6032W  VALUE OF 'RECSZ' PARAMETER OF 'CLUSTER' SHOULD NOT BE NULL           
 CAY6083E  SPACE PARAMETER NOT PROVIDED FOR NEW DIRECT ACCESS DATASET           
                                                                         
because the IDCAMS Statements that exceed column 72 are not properly validated.

The same doesn't occur in batch (where the validation is correctly executed).

How to correctly validate the jcl using EJCK. 

 

Resolution

In order to correctly validate the jcl in EJCK, it is necessary to add the Runtime Options :
 
KEEP7380 CTL(IDC) 
 
to the EDCHKDD file allocated to the TSO Logon session.
 
Here the techdoc link documenting this option: 

KEEP7380

...

Use of this option alters the functionality of EDCHEK as follows:


- The statement in error and its messages appear at the top of the screen (rather than at the location of the line within the file).
- The line numbers are missing from the EDCHKSL report when using the EDCHKSL option.

 
Based on that, the option KEEP7380 in the EDCHKDD member can have the following different behaviors :

1) if the jcl contains IDCAMS MARGINS() that really span over column 72, so that KEEP7380 is engaged in the validation, then all the validation messages are on top of the screen. Here a sample EJCK validation in this case:


****** ***************************** Top of Data ******************************
==MSG> // MSGCLASS=A,NOTIFY=&SYSUID
==MSG> SUBST JCL - MSGCLASS=A,NOTIFY=...
==MSG> LISTCAT ENTRIES(DE00001.TSO.GGG)
==MSG> CAY6079I DATA SET "DE00001.TSO.GGG" SPECIFIED AS OLD OR SHR, BUT
==MSG> CANNOT BE FOUND
==MSG>
==MSG> IF LASTCC = 4 THEN DO
==MSG> SET MAXCC = 0
==MSG> CAY6564I "MAXCC" CHANGED TO "0"
==MSG> CAY6441I SET COMMAND ALTERED SEVERITY OF PRIOR MESSAGES
==MSG>
==MSG> //SYSUT2 DD DISP=SHR,DSN=DE00001.SEQQQ0
==MSG> CAY6079E DATA SET "DE00001.SEQQQ0" SPECIFIED AS OLD OR SHR, BUT CANNOT
==MSG> BE FOUND
==MSG>
==MSG> CAY6000 3 STATEMENTS FLAGGED IN JOB "IDCAMS02" MAXIMUM SEVERITY WAS 8
==MSG>
==MSG>
==MSG>
000001 //IDCAMS02 JOB (CS,1000,SYSTEMS,102),SYSTEMS,CLASS=9,
000002 // MSGCLASS=A,NOTIFY=&SYSUID
000003 //IDC1 EXEC PGM=IDCAMS
000004 //SYSPRINT DD SYSOUT=*
000005 //SYSIN DD *
000006 PARM MARGINS(2 80)
000007 LISTCAT ENTRIES(DE00001.TSO.GGG) ALL
000008 IF LASTCC = 4 THEN DO
000009 SET MAXCC = 0
000010 DEF GDG (NAME(DE00001.TSO.GGG) LIM
000011 END
000012 //**********************************************************
000013 //IEBG01 EXEC PGM=IEBGENER
000014 //SYSUT1 DD DISP=SHR,DSN=DE00001.SEQ80
000015 //SYSUT2 DD DISP=SHR,DSN=DE00001.SEQQQ0
000016 //SYSPRINT DD SYSOUT=(,)
000017 //SYSIN DD DUMMY
****** **************************** Bottom of Data ****************************

 

2) if the jcl doesn't have any IDCAMS SYSIN line spanning column 72 ( KEEP7380 is not engaged), then the validation messages are located into the jcl at line level. Here a sample EJCK validation in this case:

****** ***************************** Top of Data ******************************
==MSG> CAY6000 1 STATEMENT FLAGGED IN JOB "IEBGEN2" MAXIMUM SEVERITY WAS 8
==MSG>
==MSG>
==MSG>
000010 //IEBGEN2 JOB (CS,1000,SYSTEMS,102),SYSTEMS,CLASS=9,
000020 // MSGCLASS=A,NOTIFY=&SYSUID
==MSG> MSGCLASS=A,NOTIFY=&SYSUID
==MSG> JCL - MSGCLASS=A,NOTIFY=....
000030 //********************************************************
000040 //IEBG01 EXEC PGM=IEBGENER
000050 //SYSUT1 DD DISP=SHR,DSN=DE00001.SEQ80
000060 //SYSUT2 DD DISP=SHR,DSN=DE00001.SEQQQ0
==MSG> T2 DD DISP=SHR,DSN=DE00001.SEQQQ0
==MSG> CAY6079E DATA SET "DE00001.SEQQQ0" SPECIFIED AS OLD OR SHR, BUT CANNOT
==MSG> BE FOUND
==MSG>
000070 //SYSPRINT DD SYSOUT=(,)
000080 //SYSIN DD DUMMY
****** **************************** Bottom of Data ****************************

here KEEP7380 is not engaged and the messages are inline .