我想显示带有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
答案 0 :(得分:5)
如果要使用ISPLINK之类的ISPF服务,则必须在ISPF环境中执行。 IBM的文档提供了一个示例here,如下所示。
//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主菜单上。您可以使用它来测试您的面板。
答案 1 :(得分: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”
通常,您不会像建议的那样通过批处理运行DISPLAY服务。可以通过提供面板字段的所有值,然后使用CONTROL服务模拟ENTER或END来完成此操作,但是如果不小心,很容易进入DISPLAY循环。