Попытка обойти ошибку при попытке выполнить команду 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?

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


person FRANCESC XAVIER DALMAU PUJOL    schedule 20.10.2016    source источник
comment
Непонятно, при чем тут COBOL. Судя по сообщению, вы не можете сделать то, что пытались сделать, но нет никакого способа узнать, правильно ли вы попытались это сделать, поэтому не могу сказать, возможно ли это.   -  person Bill Woodger    schedule 20.10.2016
comment
Какую команду TSO вы вводите — стандартную команду, предоставленную IBM, или команду собственного производства или ISV? Что он пытается сделать? Могут быть способы REXX не делать этого; или даже, возможно, вызов команды из REXX.   -  person zarchasmpgmr    schedule 21.10.2016


Ответы (2)


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

Если вы попытаетесь:

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

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

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

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

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


Для запуска пакета ISPF Google ISPF 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 model создаст для вас пример вызовов ISPF.

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

CALL 'ISPLINK' USING SELECT Command-Var

где command-var содержит «CMD (Ваша команда)»

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

person Bruce Martin    schedule 20.10.2016

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

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

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

person Machnik    schedule 25.02.2017