从JCL调用Rexx

时间:2016-06-09 10:46:58

标签: jcl rexx

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

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

但是PARM支持有限数量的字符。有没有办法使用JCL调用REXX并传递包含更多字符的参数? 使用SYSTSIN将是一个解决方案,但我想使用符号参数作为PARM参数的参数。

3 个答案:

答案 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个选项

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

  2. 您可以使用PGM = IRXJCL执行REXX程序。 在IRXJCL下,您无法激活“ ADDRESS TSO”和使用wr TSO命令。 可以用其他高级语言来调用它。

问题在于您无法将REXX的答案返回给调用程序。 另一个问题是,您只能使用一个字符串参数来调用REXX。

为解决此问题,我从cobol致电rexx。参数的一部分是地址。在REXX中,我使用STORAGE函数将输出放置到该地址