3

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

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

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

4

3 回答 3

4

CEE3PR2由于历史原因,PARM 字段限制为 100 字节,但是对于愿意调用LE 可调用服务的启用 LE(语言环境)的应用程序,此限制增加到 32K 。LE 语言将是 Assembler(某些注意事项适用),以及现代版本的 COBOL 和 PL/I。据我所知,Rexx 不是支持 LE 的语言。

我工作的一个地方有一个通用程序,可以将 PARM 值中传递的任何内容写入平面文件。我们碰巧是 Assembler,但它可能是 COBOL、PL/I 或 Rexx。

有关如何使用它的示例,请参阅此答案。

如果您的商店还没有这样的程序,我建议您创建这样的程序(并且请在编写自己的程序之前进行检查)。Syncsort(也许DFSORT)有能力将参数写入输出文件,所以你也可以走这条路。

假设能够将参数写入平面文件,您可以为每个参数调用一次,将结果修改为平面文件。然后将平面文件读入您​​的 Rexx 程序,每条记录代表您的一个参数。

更新:正如@BillWoodger 在评论中指出的那样,可以使用PARMDD DD...

如果命令 parmstring 的长度超过 100 个字符,则使用 PARMDD 指定包含要执行的命令 parmstring 的数据集的 ddname。

...这消除了一次读取一条记录的参数的需要。

此外,显然从 z/OS 2.1 开始,您不再需要将参数放入数据集的程序,您可以在处理 JCL 时让它们在流中解析。

于 2016-06-09T15:55:22.810 回答
1

有2个选项

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

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

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

为了解决这个问题,我从 cobol 调用了 rexx。部分参数是地址。在 REXX 中,我使用 STORAGE 函数将输出放到地址

于 2020-07-06T21:20:41.813 回答
1

有两种使用 IKJEFT01 调用 REXX 脚本的方法。一种是像你现在一样使用 parm,另一种是使用 SYSTSIN 数据集。这是我的首选方法,您可以使用 + 继续符将长参数继续到下一行。例如,下面是使用带有延续的长参数 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        
于 2016-07-22T04:25:42.517 回答