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