正在使用条件逻辑验证JCL



通常,当我查看完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并提交作业。这将进行语法检查,但不会运行您的作业。

请记住,它不会进行诸如"文件不存在"之类的检查。

相关内容

  • 没有找到相关文章

最新更新