0

我想要做的是在批处理环境中执行的 COBOL 程序中执行 TSO 命令;我首先要做的是创建一个名为 IKJTSOEV 的 TSO 环境;成功完成后(返回代码=0),我使用 TSOLNK 例程执行 TSO 命令。

问题出现在第二次调用中,我收到 ikj56637I 错误。如果我查阅 IBM 手册,它会说:

IKJ56637I 您试图从授权环境运行命令、程序、CLIST 或 REXX exec。这在动态 TSO/E 环境下不受支持。说明:您正在一个地址空间中运行,该地址空间具有由 TSO/E 环境服务创建的 TSO/E 环境。您要求使用 TSO/E 服务工具从授权的 TSO/E 环境调用命令、程序、CLIST 或 REXX exec。此功能在此环境中不可用。

我可以收到一些关于正在发生的事情的解释,我该如何解决这个问题并执行我的 COBOL 程序?

提前谢谢了

4

2 回答 2

1

你真的需要从 Cobol 运行 TSO 吗???

如果你尝试:

  • 从Batch TSO - ISPF运行 Cobol 程序,然后使用ISPF 服务调用 TSO。

这应该可行,但可能有更好的方法。只需在 TSO 下运行 Cobol 程序即可。

我不确定在 Cobol 程序中运行大量 TSO 步骤是否是一个好主意。另一种方法,如:

  • Cobol 程序将详细信息写入文件A
  • TSO Rexx 程序读取文件 A 运行命令并写入文件 B
  • 第二个 Cobol 程序读取 fileB

可能会更好。


对于运行 ISPF 批处理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 调用。

基本上在 cobol 你会做

CALL 'ISPLINK' USING SELECT Command-Var

其中 command-var 保存 'CMD(Your-command)'

线程有一个调用 ISPF 的 Cobol 程序

于 2016-10-20T20:49:50.273 回答
0

您收到该错误是因为您的程序似乎已获得 APF 授权。您想在授权环境中在 TSO 中完成什么?

如果授权是有意的,您是否只需要发出命令还是需要检查命令的返回码?

您可以将 JCL 提交给内部阅读器或返回问题状态,发出命令并再次授权。

于 2017-02-25T16:23:37.233 回答