Invoking Rexx from JCL



要调用Rexx程序并传递参数,可以使用IKJEFT01

// SET PARM1=
// SET PARM2=
//AUDITDS  EXEC PGM=IKJEFT01,
//     PARM='RXPGM &PARM1 &PARM2'

但是PARM支持有限数量的字符。是否有任何方法可以使用JCL调用REXX并传递包含更多字符的参数?使用SYSTSIN将是一个解决方案,但我希望使用符号参数作为PARM参数中的符号参数。

由于历史原因,PARM字段限制为100字节,但对于愿意调用CEE3PR2LE可调用服务的启用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        

有两个选项

  1. 如果希望REXX能够执行TSO命令,请使用IKJEFT01您不能将其用作外部cobol/pl1程序

  2. 您可以使用PGM=IRXJCL来执行REXX程序。在IRXJCL下,您不能激活"ADDRESS TSO";并使用wr TSO命令。但是你可以用其他高级语言来称呼它。

问题是您无法从REXX向调用程序返回答案。另一个问题是,您只能用一个字符串参数来调用REXX。

为了解决这个问题,我从cobol打电话给rexx。参数的一部分是地址。在REXX中,我使用STORAGE函数将输出放入地址

最新更新