尝试在批处理环境中执行 REXX 或 TSO 命令时尝试绕过错误
Posted
技术标签:
【中文标题】尝试在批处理环境中执行 REXX 或 TSO 命令时尝试绕过错误【英文标题】:Trying to bypass an error when trying to execute a REXX or TSO command in batch enviroenment 【发布时间】:2016-10-20 14:57:20 【问题描述】:我正在尝试从批处理环境中执行的 COBOL 程序中执行 TSO 命令;我首先要做的是创建一个名为 IKJTSOEV 的 TSO 环境;成功完成后(RETURN CODE=0),我使用 TSOLNK 例程执行 TSO 命令。
在第二次调用中出现问题,我收到 ikj56637I 错误。如果我查阅 IBM 手册,它会说:
IKJ56637I 您试图从授权环境运行命令、程序、CLIST 或 REXX exec。这在动态 TSO/E 环境下不受支持。 解释: 您正在使用 TSO/E 环境服务创建的 TSO/E 环境的地址空间中运行。您要求使用 TSO/E 服务工具从授权的 TSO/E 环境调用命令、程序、CLIST 或 REXX exec。此功能在此环境中不可用。
我能否得到一些关于正在发生的事情的解释,以及如何设法解决这个问题并执行我的 COBOL 程序?
在此先感谢
【问题讨论】:
目前还不清楚 COBOL 是从哪里来的。从消息中,您无法执行您尝试执行的操作,但无法知道您是否尝试正确,因此无法判断是否可能。 您发出的 TSO 命令是什么 - IBM 提供的标准命令,还是自制或 ISV 命令?它想做什么?可能有 REXX 方式不这样做;甚至可能从 REXX 调用命令。 【参考方案1】:你真的需要从 Cobol 运行 TSO 吗???
如果你尝试:
从 Batch TSO - ISPF 运行 Cobol 程序,然后使用 ISPF 服务 调用 TSO。这应该可行,但可能有更好的方法。只需在 TSO 下运行 Cobol 程序即可。
我不确定在 Cobol 程序中运行大量 TSO 步骤是否是个好主意。另一种方法,例如:
Cobol 程序将详细信息写入文件A TSO Rexx 程序读取文件 A 运行命令并写入文件 B 第二个 Cobol 程序读取文件 B可能会更好。
对于运行 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
命令 model 将为您生成一个示例 ISPF 调用。
基本上在 cobol 中你会这样做
CALL 'ISPLINK' USING SELECT Command-Var
command-var 保存 'CMD(Your-command)'
这个thread 有一个调用 ISPF 的 Cobol 程序
【讨论】:
【参考方案2】:您收到该错误是因为您的程序似乎已获得 APF 授权。您想在授权环境中在 TSO 中完成什么?
如果授权是有意的,您是只需发出命令还是需要检查命令的返回码?
您可以将 JCL 提交给内部阅读器或返回问题状态,发出命令并再次授权。
【讨论】:
以上是关于尝试在批处理环境中执行 REXX 或 TSO 命令时尝试绕过错误的主要内容,如果未能解决你的问题,请参考以下文章