要调用Rexx程序并传递参数,可以使用IKJEFT01
// SET PARM1=
// SET PARM2=
//AUDITDS EXEC PGM=IKJEFT01,
// PARM='RXPGM &PARM1 &PARM2'
但是PARM支持有限数量的字符。是否有任何方法可以使用JCL调用REXX并传递包含更多字符的参数?使用SYSTSIN将是一个解决方案,但我希望使用符号参数作为PARM参数中的符号参数。
由于历史原因,PARM字段限制为100字节,但对于愿意调用CEE3PR2
LE可调用服务的启用LE(语言环境)的应用程序,此限制增加到32K。LE语言将是汇编语言(某些注意事项适用),以及COBOL和PL/I的现代版本。据我所知,Rexx不是一种支持LE的语言。
我工作过的一个地方有一个通用程序,它可以将PARM值中传递的任何内容写入一个平面文件。我们的恰好是Assembler,但它可能是COBOL、PL/I或Rexx。
有关如何使用它的示例,请参见此答案。
我建议你创建这样一个程序,如果你的商店还没有(请在编写自己的程序之前进行检查)。Syncsort
(也许还有DFSORT
)能够将parm写入输出文件,因此您也可以采用这种方法。
预先提供了将parm写入平面文件的功能,您可以为每个参数调用它一次,将结果转换为平面文件。然后将平面文件读取到Rexx程序中,每条记录代表一个参数。
更新:正如@BillWoodger在评论中指出的,PARMDD DD可以使用。。。
使用PARMDD指定包含命令的数据集的ddname如果命令parmstring大于100,则执行parmstrig长度为个字符。
。。。这消除了一次读取一个记录的参数的需要。
此外,很明显,从z/OS 2.1开始,您不再需要一个程序来将您的parm放入数据集中,您可以在处理JCL时在流中解析它们。
有两种方法可以使用IKJEFT01调用REXX脚本。一种是像您当前所做的那样使用parm,另一种是使用SYSTSIN数据集。这是我的首选方法,您可以使用+连续字符将长参数继续到下一行。例如,下面是使用带有continuation的长参数zFS文件名调用BPXBATCH的示例。
//FORWARD EXEC PGM=IKJEFT01,REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//STDOUT DD SYSOUT=*
//STDERR DD SYSOUT=*
//SYSTSIN DD *
BPXBATCH SH sftp -b /u/bigdata/doc/hadoop.sftp -oPort=8022 biadmin@biad+
min
有两个选项
-
如果希望REXX能够执行TSO命令,请使用IKJEFT01您不能将其用作外部cobol/pl1程序
-
您可以使用PGM=IRXJCL来执行REXX程序。在IRXJCL下,您不能激活"ADDRESS TSO";并使用wr TSO命令。但是你可以用其他高级语言来称呼它。
问题是您无法从REXX向调用程序返回答案。另一个问题是,您只能用一个字符串参数来调用REXX。
为了解决这个问题,我从cobol打电话给rexx。参数的一部分是地址。在REXX中,我使用STORAGE函数将输出放入地址