Попытка обойти ошибку при попытке выполнить команду REXX или TSO в пакетной среде

#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 во внутренний считыватель или вернуться в состояние проблемы, выполнить команду и авторизоваться снова.