0

我想显示一个带有 cobol 程序的 ispf 面板。使用 REXX 很简单,没有问题,但使用 cobol 时不显示面板。当我提交 jcl 时,编译和链接步骤没有给出错误,但是当它尝试运行时收到错误:MAXCC=0020。在我发现的 jesysmsg

...
IEF236I ALLOC. FOR CBLMINE STEP2                                               
IGD103I SMS ALLOCATED TO DDNAME STEPLIB                                        
IEF237I JES2 ALLOCATED TO SYSOUT                                               
IEF237I DMY  ALLOCATED TO CEEDUMP                                              
IEF237I DMY  ALLOCATED TO SYSUDUMP                                             
IEF142I CBLMINE STEP2 - STEP WAS EXECUTED - COND CODE 0020                     
IGD104I Z30952.PATO RETAINED,DDNAME=STEPLIB 
IEF285I   Z30952.CBLMINE.JOB04408.D0000103.?           SYSOUT                  
...

根据 IBM 手册,错误是:ERROR。写入更新文件的 I/O 错误、缺少 FILEDEF 或由于文件属性不一致而取消 APNDUPD 进程选项。有什么实际帮助(请举个例子)?

使用 ispf 面板:

)ATTR DEFAULT(+_%)                                                      
% TYPE(TEXT) COLOR(PINK) INTENS(HIGH)                                 
$ TYPE(INPUT) INTENS(HIGH) PAD(_)                                     
! TYPE(INPUT) INTENS(LOW) PAD(' ') 
)BODY                                                                   
%-------------------- *TITLE FOR ENTRY PANEL* --------------------------
%COMMAND ===>_ZCMD                                                      
%                                                                       
&ZUSER    &ZTIME             &ZSCREEN    &ZWIDTH  &ZUS4S7               
+   THIS DIRECTION LINE TELLS THE USER HOW TO USE THE PANEL:            
%XXXXX:_X     %YYY:$YYY          %ZZZ:$ZZ%AAAAAAAA:$AAAAAAAA  +         
)END

使用 cobol 程序:

   IDENTIFICATION DIVISION.                             
   PROGRAM-ID.    CBLEX003                              
   ENVIRONMENT DIVISION.                                
   DATA DIVISION.                                       
   WORKING-STORAGE SECTION.                             
   77 PST1 PIC X(6) VALUE 'LIBDEF'.                     
   77 PST2 PIC X(7) VALUE 'ISPPLIB'.                    
   77 PST3 PIC X(7) VALUE 'DATASET'.                    
   77 PST4 PIC X(15) VALUE 'Z30952.MINE.GML'.           
   77 PST5 PIC X(16) VALUE 'DISPLAY PANEL01'.           
   77 ISPLINK PIC X(7) VALUE 'ISPLINK'.                 
   PROCEDURE DIVISION.                                  
       CALL ISPLINK USING PST1 PST2 PST3 PST4.          
       CALL ISPLINK USING PST5.                         
       STOP RUN.                                        

使用 jcl:

//CBLMINE  JOB 1,NOTIFY=&SYSUID,MSGLEVEL=(1,1)                       
//SETVAR   SET THEPGM=CBLEX003                                       
//SETVAR   SET WHERES=&SYSUID..MINE.GML                              
//SETVAR   SET LINKRU=&SYSUID..PATO                                  
//COBRUN   EXEC IGYWCL                                               
//COBOL.SYSIN  DD DSN=&WHERES(&THEPGM),DISP=SHR                      
//LKED.SYSLMOD DD DSN=&LINKRU(&THEPGM),DISP=SHR                      
// IF RC = 0 THEN                                                    
//STEP2    EXEC PGM=&THEPGM                                          
//STEPLIB   DD DSN=&LINKRU,DISP=SHR                                  
//SYSOUT    DD SYSOUT=*,OUTLIM=15000                                 
//CEEDUMP   DD DUMMY                                                 
//SYSUDUMP  DD DUMMY                                                 
// ELSE                                                              
// ENDIF        
4

2 回答 2

5

如果你想使用像 ISPLINK 这样的 ISPF 服务,你必须在 ISPF 环境中执行。IBM 的文档在此处提供了一个示例,转载如下。

//USERAA JOB (AA04,BIN1,000000),'I. M. USERAA',
// CLASS=L,MSGCLASS=A,NOTIFY=USERAA,MSGLEVEL=(1,1)
//*-------------------------------------------------------*/
//*  EXECUTE ISPF COMMAND IN THE BACKGROUND               */
//*-------------------------------------------------------*/
//*
//ISPFBACK EXEC PGM=IKJEFT01,DYNAMNBR=25,REGION=1024K
//*- - ALLOCATE PROFILE, PANELS, MSGS, PROCS, AND TABLES -*/
//ISPPROF  DD DSN=USERAA.ISPF.PROFILE,DISP=OLD
//ISPPLIB  DD DSN=ISP.SISPPENU,DISP=SHR
//ISPMLIB  DD DSN=ISP.SISPMENU,DISP=SHR
//ISPSLIB  DD DSN=ISP.SISPSENU,DISP=SHR
//         DD DSN=ISP.SISPSLIB,DISP=SHR
//ISPTLIB  DD DSN=USERAA.ISPF.TABLES,DISP=SHR
//         DD DSN=ISP.SISPTENU,DISP=SHR
//         DD DSN=ISP.SISPTLIB,DISP=SHR
//ISPTABL  DD DSN=USERAA.ISPF.TABLES,DISP=SHR
//*
//*- - ALLOCATE ISPF LOG DATA SET  - - - - - - - - - - - -*/
//ISPLOG   DD DSN=USERAA.ISPF.LOG,DISP=SHR
//*
//*- - ALLOCATE DIALOG PROGRAM AND TSO COMMAND LIBRARIES -*/
//ISPLLIB  DD DSN=USERAA.ISPF.LOAD,DISP=SHR
//SYSEXEC  DD DSN=ISP.SISPEXEC,DISP=SHR
//SYSPROC  DD DSN=ISP.SISPCLIB,DISP=SHR
//*
//*- - ALLOCATE TSO BACKGROUND OUTPUT AND INPUT DS - - - -*/
//SYSTSPRT DD DSNAME=USERAA.ISPF.ISPFPRNT,DISP=SHR
//SYSTSIN  DD *
  PROFILE PREFIX(USERAA)         /* ESTABLISH PREFIX      */
  ISPSTART CMD(%TBUPDATE)        /* INVOKE CLIST DIALOG   */
/*

您必须为您的商店提供有效的工作卡和正确的 ISPF 库连接。另外,我相信您会使用ISPSTART PGM(CBLEX003)而不是 IBM 示例来启动 CLIST。

如果您不知道商店的 ISPF 库连接,您可能可以从任何 ISPF 命令行的 ISRDDN 命令显示的内容中确定它们。

还有一个 ISPF 对话测试工具,通常在 ISPF 主菜单上。您可以使用它来测试您的面板。

于 2019-03-03T04:28:10.453 回答
3

我同意 Bruce 和 cschneid 的说法。您不能使用 JCL 从 COBOL pgm 调用 ISPF 服务,除非 JCL 以批处理模式运行 ISPF,如 cschneid 提供的示例中所示。如果没有 ISPF 环境,ISPLINK 将设置 rc=20,因为它找不到 ISPF 环境。通过 ISPF 选项 7 测试您的程序或编写一个 exec 以在您的 LIBDEF ISPLLIB 指向包含您链接的 COBOL pgm 的加载库的位置运行它。

地址 ISPEXEC
"LIBDEF ISPLLIB DATASET ID('userid.TEST.LOAD')"
"SELECT PGM(mycbl)"
"LIBDEF ISPLLIB"

You would normally not run a DISPLAY service via batch as you have been advised. It can be done by supplying all the values for the panel fields and then simulating an ENTER or END with the CONTROL service, but it would be easy to get in a DISPLAY loop if not careful.

于 2019-03-04T11:07:17.143 回答