Mik*_*keT 1 rexx zos batch-processing tso
我有一个Rexx程序,要作为批处理作业运行。我怎样才能做到这一点?
这是我的程序:
/* Rexx – HELLO – Write Hello World */
Say "hello World"
Run Code Online (Sandbox Code Playgroud)
该程序位于作为成员HELLO的PDS ME.USER.EXEC。
我的安装有效的作业卡是(我们的环境包括ISPF / PDF而不是ROSCOE):
//MYJOB JOB ,,CLASS=1,MSGCLASS=H,NOTIFY=&SYSUID
Run Code Online (Sandbox Code Playgroud)
注意!这已经被写成一个教程
您可以通过多种方式来批量运行程序。我将介绍3种方式,这些方式根据环境(即它们可以利用的方式)的不同而有所不同。
这需要运行程序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=*
//*-------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
尽管最简单(仅几行JCL),但该方法的局限性最大,因为它不允许使用TSO / E服务,例如TSO / E命令和大多数TSO / E外部功能。
但是,由于IRXJCL是Rexx处理器,因此不需要让TSO / E知道它是Rexx程序(第一行必须包含REXX)。
这需要运行本示例中使用的TSO / E批处理程序之一IKJEFT01。替代品为IKJEFT1A和IKJEFT1B。可以通过此方法使用TSO / E服务和命令(例如,使用TIME命令在此方法末尾的注释)
可以在编写JCL以便执行命令时找到有关程序之间差异的全面信息。
IKJEFT01的JCL 与方法1中使用的JCL 相似。可以对附加的DDNAME SYSPROC进行编码。SYSPROC是CLISTS所在的DDNAME。除了SYSEXEC之外,您还可以在这里找到Rexx程序(这不是必需的,建议这两者都已编码,并且SYSEXEC用于Rexx程序,而SYSPROC用于CLISTS)。
要求Rexx在第一行上,以区别Rexx程序和CLIST(由TSO / E处理器处理)。因此,如果Rexx程序是通过SYSEXEC找到/定位的,如果我没记错的话,这将使要求无效。
另一个建议是在RExx程序的第一行中始终包含REXX。
EXEC语句而不是IRXJCL调用IKJEFT01程序。PARM可用于指定第一个命令(以及我们的HELLO程序)。但是,对于前景,您可以通过终端即SYSTSIN DDNAME进行指定。
这是一些适用于第二种方法的JCL。注意到HELLO程序通过调用SYSTSIN DDNAME作为插播广告数据: -
//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=*
//*-------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
例如,如果使用了以下命令(即,将TIME作为另一行添加到SYSTSIN),则将运行TSO / E TIME命令(这将导致时间显示到SYSTSPRT)。
Run Code Online (Sandbox Code Playgroud)//SYSTSIN DD * HELLO TIME
此方法使用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=*
//*-------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
请注意,这不是一个全面的书,它是概述,足以开始批量运行Rexx程序。