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

Я пытаюсь выполнить команду TSO из программы COBOL, выполняемой в пакетной среде; в первую очередь я создаю среду TSO под названием IKJTSOEV; после успешного завершения (RETURN CODE=0) я использую процедуру TSOLNK для выполнения команды TSO.

Проблема возникает во время второго вызова, я получаю ошибку ikj56637I. Если я обращаюсь к руководству IBM, оно говорит:

IKJ56637I Вы попытались запустить команду, программу, CLIST или REXX exec из авторизованной среды. Это не поддерживается в динамической среде TSO/E. Объяснение: Вы работаете в адресном пространстве со средой TSO/E, созданной службой среды TSO/E. Вы попросили использовать средство обслуживания TSO/E для вызова команды, программы, CLIST или REXX exec из авторизованной среды TSO/E. Эта функция недоступна в этой среде.

Могу ли я получить некоторые объяснения о том, что происходит, и как мне решить эту проблему и выполнить мою программу COBOL?.

Спасибо заранее

2 ответа

Вам действительно нужно запустить TSO из Cobol???

Если вы попробуете:

  • Запустите программу Cobol из пакетного TSO - ISPF, а затем используйте сервисы ISPF для вызова TSO.

Это должно работать, но, возможно, есть лучший способ. Просто запуск вашей программы Cobol под TSO может работать.

Я не уверен, что выполнение большого количества шагов TSO в программе Cobol - хорошая идея. Альтернативный подход, как:

  • Программа Cobol записывает детали в файл A
  • Программа TSO Rexx читает файл A, запускает команду и записывает в файл B
  • Вторая программа Cobol читает файл B

может работать лучше


Для запуска ISPF Batch Google ISPF Batch, вы найдете ответы, такие как Batch Ispf

//USERAA   JOB (ISPF),'ISPF USER',MSGCLASS=X,
//         CLASS=A,NOTIFY=&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 для вас.

В основном в коболе вы бы сделали

CALL 'ISPLINK' USING SELECT Command-Var

где command-var содержит 'CMD(Your-command)'

В этой теме есть программа Cobol, вызывающая ISPF

Вы получаете эту ошибку, потому что ваша программа авторизована APF. Что вы пытаетесь достичь в TSO из авторизованной среды?

Если авторизация преднамеренная, вам просто нужно выполнить команду или проверить код возврата из команды?

Вы можете отправить JCL внутреннему считывателю или вернуться в состояние проблемы, выполнить команду и снова авторизоваться.

Другие вопросы по тегам