Mainframe 用条件逻辑验证JCL

Mainframe 用条件逻辑验证JCL,mainframe,jcl,ispf,Mainframe,Jcl,Ispf,通常,当我查看完JCL后,我会在ISPF命令行中键入JEM命令,这将进行快速扫描并告诉我任何错误,例如未分配的文件 唯一的问题是,当JCL中有IF语句时,JEM将跳过这些部分。因此,即使JCL JEM被清除,我仍然可以以JCL错误结束。除了检查每个文件是否已分配之外,我是否还可以验证JCL?在作业卡中使用TYPRUN=SCAN,然后提交作业。这将执行语法检查,但不会运行作业 请记住,它不会执行诸如“文件不存在”之类的检查 .在工作卡中使用TYPRUN=SCAN,然后提交工作。这将执行语法检查,但

通常,当我查看完JCL后,我会在ISPF命令行中键入JEM命令,这将进行快速扫描并告诉我任何错误,例如未分配的文件


唯一的问题是,当JCL中有IF语句时,JEM将跳过这些部分。因此,即使JCL JEM被清除,我仍然可以以JCL错误结束。除了检查每个文件是否已分配之外,我是否还可以验证JCL?

在作业卡中使用
TYPRUN=SCAN
,然后提交作业。这将执行语法检查,但不会运行作业

请记住,它不会执行诸如“文件不存在”之类的检查


.

在工作卡中使用
TYPRUN=SCAN
,然后提交工作。这将执行语法检查,但不会运行作业

请记住,它不会执行诸如“文件不存在”之类的检查


.

您可以使用可以发出条件代码的程序来替换实际程序,从而检查条件代码处理逻辑

对于发出Cond代码0的程序,只需将该步骤的jcl替换为调用IEFBR14程序的步骤即可

e、 g.将步骤替换为

//STEP010 EXEC PGM=IEFBR14
(包括原始步骤中的任何条件代码检查)

对于发出条件代码(例如8)的程序,您可以将IDCAMS与设置了MAXCC=8的IDCAMS一起使用,例如

//STEP010 EXEC PGM=IDCAMS
//SYSIN    DD *
  MAXCC = 8
//SYSPRINT DD SYSOUT=*
您可以很容易地编写一个程序Rexx,Cobol PL1,它可以将一个参数作为代码

我个人有一个名为CCFIN的汇编程序(这也可能会发出用户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
例子 假设要测试的生产(sic)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
//*
//*--------------------------------------------------------------------
注意!应认真考虑不更改职务名称和会计信息可能产生的影响。i、 e.建议更改这些以适应内部使用。
e、 g.运行与通过调度程序运行和跟踪的作业同名的作业可能会干扰生产计划。

您可以使用可以发出条件代码以替换实际程序的程序来检查条件代码处理逻辑

对于发出Cond代码0的程序,只需将该步骤的jcl替换为调用IEFBR14程序的步骤即可

e、 g.将步骤替换为

//STEP010 EXEC PGM=IEFBR14
(包括原始步骤中的任何条件代码检查)

对于发出条件代码(例如8)的程序,您可以将IDCAMS与设置了MAXCC=8的IDCAMS一起使用,例如

//STEP010 EXEC PGM=IDCAMS
//SYSIN    DD *
  MAXCC = 8
//SYSPRINT DD SYSOUT=*
您可以很容易地编写一个程序Rexx,Cobol PL1,它可以将一个参数作为代码

我个人有一个名为CCFIN的汇编程序(这也可能会发出用户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
例子 假设要测试的生产(sic)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
//*
//*--------------------------------------------------------------------
注意!应认真考虑不更改职务名称和会计信息可能产生的影响。i、 e.建议更改这些以适应内部使用。
e、 g.运行与通过调度程序运行和跟踪的作业同名的作业可能会干扰生产计划。

JEM是与ASG软件的作业/扫描产品关联的编辑宏。如果产品的该部分已安装并提供给您,您可以通过ISPF对话框访问JEM正在执行的操作的更可配置版本。与您的技术人员交谈,这可能是产品中的一个缺陷,可能是由维护人员修复的,但尚未应用。@cschneid我不知道没有你们我会怎么做!在大型机的世界里,作为一个年轻人,最糟糕的是我不知道大局是如何运作的。我知道如何编码,但当像JEM这样的东西不能像我希望的那样工作时,我甚至不知道从哪里开始寻找。再次感谢!JEM是与ASG软件的作业/扫描产品相关联的编辑宏。如果产品的该部分已安装并提供给您,您可以通过ISPF对话框访问JEM正在执行的操作的更可配置版本。与您的技术人员交谈,这可能是产品中的一个缺陷,可能是由维护人员修复的,但尚未应用。@cschneid我不知道没有你们我会怎么做!在大型机的世界里,作为一个年轻人,最糟糕的是我不知道大局是如何运作的。我知道如何编码,但当像JEM这样的东西不能像我希望的那样工作时,我甚至不知道从哪里开始寻找。再次感谢!