Ошибка rc = 20, когда я хочу показать панель ispf из программы cobol - PullRequest
0 голосов
/ 03 марта 2019

Я хочу отобразить панель ispf с программой cobol.С REXX все просто, проблем нет, но с коболом не показывается панель.Когда я отправляю 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 ошибка: ОШИБКА.Ошибка ввода-вывода в файл обновления, отсутствует 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        

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Я согласен с тем, что заявляли Брюс и Чнейд.Вы не можете вызвать службу ISPF из pgm COBOL, используя JCL, если JCL не запускает ISPF в пакетном режиме, как в примере, представленном cschneid.Без среды ISPF ISPLINK установит rc = 20, потому что не может найти среду ISPF.Протестируйте вашу программу с помощью опции 7 ISPF или напишите exec для ее запуска, где вы, LIBDEF ISPLLIB, будете указывать на библиотеку загрузки, содержащую связанную с вами программу COBOL.

address ISPEXEC
"LIBDEF ISPLLIB DATASET ID ('идентификатор пользователя).TEST.LOAD ') "
" SELECT PGM (mycbl) "
" LIBDEF ISPLLIB "

Обычно вы не запускаете службу DISPLAY через пакет, как вам было рекомендовано.Это можно сделать, предоставив все значения для полей панели, а затем смоделировав ENTER или END с помощью службы CONTROL, но было бы легко попасть в цикл DISPLAY, если не соблюдать осторожность.

0 голосов
/ 03 марта 2019

Если вы хотите использовать службы ISPF, такие как ISPLINK, вы должны выполнить их в среде 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 вашего магазина, вы, вероятно, сможете определить их по тому, что отображаетсякоманда ISRDDN из любой командной строки ISPF.

Существует также средство тестирования диалога ISPF, обычно в главном меню ISPF.Вы можете использовать это для проверки вашей панели.

...