#mainframe #zos #rexx #tso
#мэйнфрейм #zos #rexx #tso
Вопрос:
Что я пытаюсь сделать, так это выполнить команду TSO из программы COBOL, выполняемой в пакетной среде; что я делаю в первую очередь, это создать среду TSO, вызывающую IKJTSOEV; после успешного завершения (КОД ВОЗВРАТА = 0) Я использую процедуру TSOLNK для выполнения команды TSO.
Проблема возникает при этом втором вызове, я получаю ошибку ikj56637I. Если я обращаюсь к руководству IBM, там говорится :
IKJ56637I Вы пытались запустить команду, программу, CLIST или REXX exec из авторизованной среды. Это не поддерживается в динамической среде TSO / E. Объяснение: Вы работаете в адресном пространстве со средой TSO / E, созданной службой среды TSO / E. Вы просили использовать средство обслуживания TSO / E для вызова команды, программы, CLIST или REXX exec из авторизованной среды TSO / E. Эта функция недоступна в этой среде.
Могу ли я получить некоторое объяснение о том, что происходит, и как я могу решить это и выполнить свою программу на COBOL?.
Заранее большое спасибо
Комментарии:
1. Неясно, при чем здесь COBOL. Из сообщения следует, что вы не можете сделать то, что пытались сделать, но нет способа узнать, правильно ли вы пытались это сделать, поэтому не могу сказать, возможно ли это.
2. Какую команду TSO вы выдаете — стандартную команду, предоставляемую IBM, или домашнюю команду или команду ISV? Что он пытается сделать? Могут быть способы REXX не делать этого; или даже, возможно, вызвать команду из REXX.
Ответ №1:
Вам действительно нужно запускать TSO из Cobol???
Если вы попытаетесь:
- Запуск программы Cobol из пакетной TSO — ISPF, затем используйте службы ISPF для вызова TSO.
Это должно сработать, но, вероятно, есть способ получше. Может сработать простой запуск вашей программы на Cobol в TSO.
Я не уверен, что выполнение большого количества шагов TSO в программе на Cobol является хорошей идеей. Альтернативный подход, такой как:
- Программа Cobol записывает сведения в файл, содержащий
- Программа TSO Rexx считывает файл, выполняет команду и записывает в fileB
- Вторая программа на Cobol считывает файл
могло бы работать лучше.
Для пакетного запуска ISPF Google ISPF Batch вы найдете ответы типа Batch Ispf
//USERAA JOB (ISPF),'ISPF USER',MSGCLASS=X,
// CLASS=A,NOTIFY=amp;SYSUID
//*
//ISPFSTP EXEC PGM=IKJEFT01,DYNAMNBR=30,REGION=32M
//ISPPROF DD RECFM=FB,LRECL=80,SPACE=(TRK,(2,2,2))
//ISPLLIB DD DSN=USERA.LOADLIB,DISP=SHR
//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR
//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR
//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR
// DD DSN=ISP.SISPSLIB,DISP=SHR
//ISPTLIB DD RECFM=FB,LRECL=80,SPACE=(TRK,(1,0,1))
// DD DSN=ISP.SISPTENU,DISP=SHR
//ISPCTL1 DD SPACE=(CYL,1),RECFM=FB,LRECL=80
//ISPLOG DD SYSOUT=*,RECFM=FB,LRECL=133
//SYSEXEC DD DSN=ISP.SISPEXEC,DISP=SHR
//SYSPROC DD DSN=ISP.SISPCLIB,DISP=SHR
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSTSIN DD *
ISPSTART pgm(cobolPgm)
В вашей программе вы бы использовали ISPF SELECT CMD
службу для вызова TSO. ISPF Edit
Командная модель сгенерирует для вас примеры вызовов ISPF.
В принципе, в cobol вы бы сделали
CALL 'ISPLINK' USING SELECT Command-Var
где command-var содержит ‘CMD (Your-command)’
В этом потоке есть программа на языке Cobol, вызывающая ISPF
Ответ №2:
Вы получаете эту ошибку, потому что ваша программа, похоже, авторизована APF. Чего вы пытаетесь достичь в TSO из авторизованной среды?
Если авторизация является преднамеренной, вам просто нужно выполнить команду или вам нужно проверить код возврата из command?
Вы могли бы отправить JCL во внутренний считыватель или вернуться в состояние проблемы, выполнить команду и авторизоваться снова.