通常,当我查看完JCL后,我会在ISPF命令行中键入JEM命令,这将进行快速扫描并告诉我任何错误,例如未分配的文件。
唯一的问题是,当我们在JCL中有IF语句时,JEM将跳过这些部分。因此,即使JCL JEM是干净的,我仍然可能以JCL错误告终。除了实际检查每个文件是否已分配之外,我是否可以验证JCL?
您可以使用可以发出条件代码的程序来替换实际程序,从而检查条件代码处理逻辑。
对于发出Cond代码0的程序,只需将步骤的jcl替换为调用IEFBR14
程序的步骤即可。
例如,用代替步骤
//STEP010 EXEC PGM=IEFBR14
(包括原始步骤的任何条件代码检查)
对于发出条件代码(例如8)的程序,您可以将IDCAMS
与具有SET MAXCC=8
的程序一起使用,例如
//STEP010 EXEC PGM=IDCAMS
//SYSIN DD *
MAXCC = 8
//SYSPRINT DD SYSOUT=*
您可以很容易地编写一个程序Rexx,Cobol PL1,它可以将一个参数作为代码。
我个人有一个名为CCFIN的汇编程序(这也可能会发出User Abends),它是:-
TITLE 'ISSUE COND CODE OR ABEND' 00001000
PRINT NOGEN 00001100
INIT REGNUM=1 STANDARD INITIALISATION 00001200
*-------------------------------------------------------------------- 00001301
* GET PARAMETER INFORMATION 00001401
*-------------------------------------------------------------------- 00001501
L 2,0(1) AD OF PARAMETER 00001601
SR 3,3 00001701
LH 3,0(2) GET LENGTH OF PARAMETER 00001801
CH 3,=H'0' CHECK IF ANY PARAMETER 00001901
BH CCFIN001 OK SO FAR 00002001
TO_SHORT WTO 'CCFIN01 - NO PARAMETER GIVEN',ROUTCDE=(2),DESC=(1) 00002101
ERR_END L 13,4(13) 00002203
RETURN (14,12),RC=1 00002301
CCFIN001 CH 3,=H'6' MAX LENGTH OF 6 00002401
BH CCERET01 ERROR > 6 00002502
*-------------------------------------------------------------------- 00002601
* CHECK TO SEE IF USER ABEND IS REQUIRED (UA????) 00002701
*-------------------------------------------------------------------- 00002801
MVC UFLAG(1),=C'N' DEFAULT NO 00002901
CH 3,=H'3' IS PARAMETER < 3 00003001
BL CCFIN030 YES THEN CANT BE USER ABEND 00003101
CLC 2(2,2),=C'UA' CHECK FOR USER ABEND 00003201
BE CCFIN020 00003301
CH 3,=H'4' NOT USER ABEND SO MAX LEN IS 4 00003401
BH CCERET02 ERROR 00003502
B CCFIN030 NOT USER ABEND BUT LEN OK 00003601
CCFIN020 MVC UFLAG(1),=C'Y' SET USER ABEND REQUIRED 00003701
LA 5,1(0,0) 00003801
B CCFIN031 00003901
*-------------------------------------------------------------------- 00004001
* CONVERT PARAMETER TO COMPLETEION CODE 00004101
*-------------------------------------------------------------------- 00004201
CCFIN030 LA 5,1(0,0) 00004301
CCFIN031 LA 4,NSTR 00004401
LA 2,1(2) SKIP PARAMETER LENGTH 00004501
MVC 0(4,4),=C'0000' ENSURE LEFT PAD WITH 0 00004601
LA 4,3(4) END OF AREA 00004701
AR 2,3 END OF PARAMETER LIST 00004801
CLC UFLAG(1),=C'Y' USER ABEND 00004901
BNE CCFIN032 00005001
SR 3,5 00005101
SR 3,5 00005201
CCFIN032 MVC 0(1,4),0(2) 00005301
SR 2,5 00005401
SR 4,5 00005501
BCT 3,CCFIN032 00005601
*-------------------------------------------------------------------- 00005701
* NUMERICS ONLY 00005801
*-------------------------------------------------------------------- 00005901
LA 4,NSTR 00006001
LA 3,4 00006101
CCFIN040 CLC 0(1,4),=X'F0' 00006201
BL CCERET03 00006302
CLC 0(1,4),=X'F9' 00006401
BH CCERET03 00006502
LA 4,1(4) 00006601
BCT 3,CCFIN040 00006701
*-------------------------------------------------------------------- 00006801
* CONVERT NUMBER TO BINARY INTO R15 00006901
*-------------------------------------------------------------------- 00007001
PACK PSTR,NSTR(4) 00007101
CVB 15,PSTR 00007201
CLC UFLAG(1),=C'Y' 00007301
BE FINUA 00007401
FINCC L 13,4(13) 00007501
RETURN (14,12),RC=(15) 00007601
FINUA LR 2,15 00007701
CL 2,=F'4095' 00007801
BNH FU0001 00007901
WTO 'CCFIN02 - USER ABEND CODE GREATER THAN 4095', X00008001
ROUTCDE=(2),DESC=(1) 00008101
SR 2,2 00008201
FU0001 ABEND (2) 00008301
CCERET01 WTO 'CCFIN03 - PARAMETER GREATER THAN 6 CHARACTERS', X00008401
ROUTCDE=(2),DESC=(1) 00008501
B ERR_END 00008603
CCERET02 WTO 'CCFIN04 - PARAMETER GREATER THAN 4 CHARACTERS', X00008701
ROUTCDE=(2),DESC=(1) 00008801
B ERR_END 00008903
CCERET03 WTO 'CCFIN05 - NON NUMERICS CHARACTERS IN PARAMETER', X00009001
ROUTCDE=(2),DESC=(1) 00009101
B ERR_END 00009203
FINISH 00009300
UFLAG DS CL1 00010001
NSTR DS 1F 00020001
PSTR DS D'0' 00030001
END 00036900
上面的JCL(发布条件代码8)将是:-
//STEP010 EXEC PGM=CCFIN,PARM="8"
//STEPLIB DD DSN=MY.LOADLIB,DISP=SHR
示例
假设待测试的生产(原文如此)JCL为:-
//CCOP010R JOB (@OPC,PROD,OPC),'MIKE TAYLOR',
// RESTART=STEP020,
// NOTIFY=CCOP010
//*--------------------------------------------------------------------
//STEP010 EXEC PGM=IKJEFT01,REGION=8M,TIME=10
//*
//* SELECT REQUIRED RECORDS FROM THE JOB/APPL XREF
//*
//SYSPROC DD DISP=SHR,DSN=ISPF.EI.XGROUP.CLIST
//SYSEXEC DD DISP=SHR,DSN=CCOP010.USER.EXEC
//SYSTPRT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
OIR00001
//JXIN DD DISP=SHR,DSN=CCOP010.JX.LIST
//JXOUT DD DISP=SHR,DSN=CCOP010.JXMOD.LIST
//*--------------------------------------------------------------------
//STEP020 EXEC PGM=SORT,REGION=8M,COND=(0,NE)
//*
//* SORT BY APPLICATION OPNO AND JOBNAME REMOVING ANY DUPLICATES
//*
//SYSIN DD *
SORT FIELDS=(1,16,CH,A,19,3,CH,A,23,8,CH,A)
SUM FIELDS=NONE
//SORTIN DD DISP=SHR,DSN=CCOP010.JXMOD.LIST
//SORTOUT DD DISP=(,PASS),DSN=&&STEP020A,UNIT=SYSDA,SPACE=(CYL,(50,1))
//SYSOUT DD SYSOUT=*
//*--------------------------------------------------------------------
//STEP030 EXEC PGM=IKJEFT01,REGION=8M,TIME=30,COND=(0,NE)
//*
//* SELECT REQUIRED RECORDS FROM THE JOB/APPL XREF
//*
//SYSPROC DD DISP=SHR,DSN=ISPF.EI.XGROUP.CLIST
//SYSEXEC DD DISP=SHR,DSN=CCOP010.USER.EXEC
//SYSTPRT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
OIR00002
//JXIN DD DISP=(SHR,DELETE),DSN=&&STEP020A
//OIIN DD DISP=SHR,DSN=CCOP010.OI.LIST
//IEBOUT DD DISP=SHR,DSN=CCOP010.OIPDS.DATA
//REPORT DD DISP=SHR,DSN=CCOP010.OIPDS.REPORT
//*--------------------------------------------------------------------
我们想测试一下STEP010发布的条件代码8是否被正确处理,然后:-
以上内容可更改为:-
//CCOP010R JOB (@OPC,PROD,OPC),'MIKE TAYLOR',
// RESTART=STEP020,
// NOTIFY=CCOP010
//*--------------------------------------------------------------------
//STEP010 EXEC PGM=IDCAMS
//*
//* SELECT REQUIRED RECORDS FROM THE JOB/APPL XREF
//*
//SYSIN DD *
MAXCC = 8
//SYSPRINT DD SYSOUT=*
//*--------------------------------------------------------------------
//STEP020 EXEC PGM=IEFBR14,COND=(0,NE)
//*
//* SORT BY APPLICATION OPNO AND JOBNAME REMOVING ANY DUPLICATES
//*
//*--------------------------------------------------------------------
//STEP030 EXEC PGM=IEFBR14,COND=(0,NE)
//*
//* SELECT REQUIRED RECORDS FROM THE JOB/APPL XREF
//*
//*--------------------------------------------------------------------
注意!应认真考虑不更改工作名称和会计信息可能产生的影响。即,建议更改这些以适应内部使用
例如,运行与通过计划程序运行和跟踪的作业同名的作业可能会干扰生产计划
在您的作业卡中使用TYPRUN=SCAN
并提交作业。这将进行语法检查,但不会运行您的作业。
请记住,它不会进行诸如"文件不存在"之类的检查。