要调用Rexx程序并传递参数,可以使用IKJEFT01
// SET PARM1=
// SET PARM2=
//AUDITDS EXEC PGM=IKJEFT01,
// PARM='RXPGM &PARM1 &PARM2'
但是PARM支持有限数量的字符。有没有办法使用JCL调用REXX并传递包含更多字符的参数? 使用SYSTSIN将是一个解决方案,但我想使用符号参数作为PARM参数的参数。
答案 0 :(得分:4)
由于历史原因,PARM字段限制为100个字节,但是对于愿意调用CEE3PR2
LE可调用服务的LE(语言环境)应用程序,此限制增加到32K。 LE语言将是汇编程序(适用某些警告),以及现代版本的COBOL和PL / I.据我所知,Rexx不是支持LE的语言。
我工作的一个地方有一个通用程序,可以将PARM值中传递的任何内容写入平面文件。我们碰巧是汇编程序,但可能是COBOL,PL / I或Rexx。
有关如何使用的示例,请参阅this answer。
我建议您创建这样的程序,如果您的商店还没有(并且请在编写之前进行检查)。 Syncsort
(也许DFSORT
)能够将parm写入输出文件,因此您也可以使用该路径。
预先假定将parm写入平面文件的能力,您可以为每个参数调用一次,将结果修改为平面文件。然后将平面文件读入您的Rexx程序,每条记录代表您的一个参数。
更新:正如@BillWoodger在评论中指出的那样,可以使用PARMDD DD ......
使用PARMDD指定包含该命令的数据集的ddname 如果命令parmstring大于100,则执行parmstring 字符的长度。
...这样就不需要一次读取一个记录的参数。
此外,显然as of z/OS 2.1 you no longer need a program to place your parms into a dataset,您可以在处理JCL时在流中解析它们。
答案 1 :(得分:1)
使用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
答案 2 :(得分:1)
有2个选项
如果希望REXX能够执行TSO命令,请使用IKJEFT01 您不能将其用作外部cobol / pl1程序
您可以使用PGM = IRXJCL执行REXX程序。 在IRXJCL下,您无法激活“ ADDRESS TSO”和使用wr TSO命令。 可以用其他高级语言来调用它。
问题在于您无法将REXX的答案返回给调用程序。 另一个问题是,您只能使用一个字符串参数来调用REXX。
为解决此问题,我从cobol致电rexx。参数的一部分是地址。在REXX中,我使用STORAGE函数将输出放置到该地址