您可以通过多种方式通过批处理运行程序。我将介绍 3 种方式,所有这些方式都因环境而异(即它们可以利用的方式)。
方法 1 - 在 Rexx 环境中运行程序。
这需要运行程序 IRXJCL 并通过 PARM 字段传递程序的名称(即 PDS 的成员名称)(您也可以传递参数; 通过 PARSE ARG 语句访问它们)。
IRXJCL 需要(通常)3 个 DDNAMES 它们是 SYSEXEC(程序所在的 PDS),SYSTSIN(这可以反映终端输入)和 SYSTSPRT(这是发送终端输出的地方)。
这里是根据上面提供的信息工作的 JCL:-
//MYJOB JOB ,,CLASS=1,MSGCLASS=H,NOTIFY=&SYSUID
//*-------------------------------------------------------------------
//RUNPROG EXEC PGM=IRXJCL,PARM=’HELLO’
//*
//* RUN OUR REXX PROGRAM CALLED HELLO
//*
//SYSEXEC DD DSN=ME.USER.EXEC,DISP=SHR
//SYSTSIN DD DUMMY
//SYSTSPRT DD SYSOUT=*
//*-------------------------------------------------------------------
这种方法虽然最简单(只需几行 JCL),但限制最大的是它不允许使用
TSO/E 服务,例如 TSO/E 命令和大部分 TSO/E 外部
功能。
但是,由于 IRXJCL 是 Rexx 处理器,因此不需要让
TSO/E 知道它是一个 Rexx 程序(第一行必须包括
REXX)。
方法 2 - 从 TSO/E 环境运行程序
这需要运行一个 TSO/E 批处理程序 IKJEFT01 在此示例中使用。替代品是 IKJEFT1A 和 IKJEFT1B。可以通过此方法使用 TSO/E 服务和命令(例如,在此方法末尾使用 TIME 命令进行注释)
关于程序之间差异的综合信息
可以在Writing JCL for command
execution找到
IKJEFT01 的 JCL 与方法 1 中使用的类似。可以编写额外的 DDNAME SYSPROC。 SYSPROC 是 CLISTS 所在的 DDNAME;除了 SYSEXEC 之外,您还可以在此处找到 Rexx 程序(这不是必需的,建议两者都已编码,并且 SYSEXEC 用于 Rexx 程序,SYSPROC 用于 CLISTS)。
要求 Rexx 在第一行
将 Rexx 程序与 CLIST 区分开来(通过 TSO/E 处理器)。因此,如果通过 SYSEXEC 找到/定位了 Rexx 程序,如果我没记错的话,这否定了要求)。
另一个建议是始终在 Rexx 程序的第一行包含 REXX>
EXEC 语句调用 IKJEFT01 程序而不是 IRXJCL。 PARM 可用于指定第一个命令(因此也是我们的 HELLO 程序)。但是,对于前台,您可以通过终端指定,即 SYSTSIN DDNAME。
这里有一些适用于第二种方法的 JCL;注意 HELLO 程序是通过 SYSTSIN DDNAME 作为 instream 数据调用的:-
//MYJOB JOB ,,CLASS=1,MSGCLASS=H,NOTIFY=&SYSUID
//*-------------------------------------------------------------------
//RUNPROG EXEC PGM=IKJEFT01
//*
//* RUN OUR REXX PROGRAM CALLED HELLO IN A TSO/E ENVIRONMENT
//*
//SYSPROC DD DSN=ME.USER.CLIST,DISP=SHR
//SYSEXEC DD DSN=ME.USER.EXEC,DISP=SHR
//SYSTSIN DD *
HELLO
//SYSTSPRT DD SYSOUT=*
//*-------------------------------------------------------------------
例如,如果使用以下内容(即添加 TIME 作为另一个
到 SYSTSIN 行)然后运行 TSO/E TIME 命令(这将
导致时间显示到 SYSTSPRT)。
//SYSTSIN DD *
HELLO
TIME
方法 3 - 在 ISPF 环境中运行程序
此方法使用 IKJEFT01 程序(有关 IKJEFT1A/B 替代方案,请参见方法 2)。但是,它会使用 ISPSTART 命令在 ISPF 环境中运行程序;启用 ISPF 服务(例如文件剪裁(骨架)ISPF 表等)。
ISPF 环境还有其他要求,即需要分配 ISPF 库才能启动 ISPF 环境。至少将提供的 ISPF 库分配给 ddnames ISPPLIB(ISPF 面板)、ISPMLIB(ISPF 消息)和 ISPTLIB强>(ISPF 表)。 ISPPROF 是 ISPF 为会话保存一些配置文件数据的位置,因此临时存储就足够了(如果不是总是可以使用 UNIT=SYSDA,则通常可用)。
请注意,您可能至少会分配安装系统
库(TSO/E 命令 LISTA 可能用于确定
这些来自前台会话)。或者,问你当地友好的系统程序员。下面分别是 SYS1.ISPPLIB、SYS1.ISPMLIB 和 SYS1.ISPTLIB。
这里有一些适用于第三种方法的 JCL。请注意,HELLO 作为参数传递给 ISPSTART 命令。
//MYJOB JOB ,,CLASS=1,MSGCLASS=H,NOTIFY=&SYSUID
//*-------------------------------------------------------------------
//RUNPROG EXEC PGM=IKJEFT01
//*
//* RUN OUR REXX PROGRAM HELLO IN A TSO/E/ISPF ENVIRONMENT
//*
//SYSPROC DD DSN=ME.USER.CLIST,DISP=SHR
//SYSEXEC DD DSN=ME.USER.EXEC,DISP=SHR
//ISPPLIB DD DSN=SYS1.ISPPLIB,DISP=SHR
//ISPMLIB DD DSN=SYS1.ISPMLIB,DISP=SHR
//ISPTLIB DD DSN=SYS1.ISPTLIB,DISP=SHR
//ISPPROF DD UNIT=SYSDA,SPACE=(CYL,(10,1)),
// RECFM=FB,LRECL=80,BLKSIZE=0
//SYSTSIN DD *
ISPSTART CMD(HELLO)
//SYSTSPRT DD SYSOUT=*
//*-------------------------------------------------------------------
请注意,这不是一个全面的,它是一个概述,应该
足以开始批量运行 Rexx 程序。