命令实用程序 - AWS 大型机现代化

AWS 大型机现代化服务(托管运行时环境体验)不再向新客户开放。有关类似于 AWS 大型机现代化服务(托管运行时环境体验)的功能,请浏览 AWS 大型机现代化服务(自我管理体验)。现有客户可以继续正常使用该服务。有关更多信息,请参阅AWS 大型机现代化可用性变更

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

命令实用程序

本节与实用程序有关,其作用是处理使用控制卡提供的用户命令。

IKJEFT1A/IKJEFT1B/KEQEFT01/IKJEFT01/DSNDBTCH

IKJEFT1一个目的

IKJEFT1A 及其别名在批处理作业中执行 TSO(T ime S haring O 选项)命令,无需交互式 TSO 会话,桥接非交互式批处理和交互式 TSO 环境。

模仿传统的 IKJEFT1 A 行为,但存在特定于环境的差异:例如,在现代环境中,T DB2 ERM (inate) 命令会被忽略(记录为信息)。

注意

此处未详细介绍命令语法- IKJEFT1 A 使用未更改的旧命令数据集。有关 TSO 命令的详细信息,请参阅旧版平台文档。

IKJEFT1一个签名

使用SYSTSIN数据集进行命令输入(通过 JCL DD 指令定义)。现代化版本使用相同的数据集,保持不变。仅在现代化的 Groovy 作业脚本中调用。

IKJEFT1A 相关的配置参数

该实用程序的行为受以下配置参数的影响:

  • systin.encoding

有关配置此参数可选 Web 应用程序的可用属性的详细信息,请参阅。

IKJEFT1A. Checks/Error 处理

当 SYSTSIN 数据集中存在不支持的命令时,就会抛出 a RuntimeException

IKJEFT1A 示例用法

旧版 JCL 脚本(使用SYSTSIN数据集的内联内容,使用DD *指令)

//********************************************************************* //* READ THE TEMPORARY INPUT FILE * //********************************************************************* // IF IDCM00032.RC = 1 THEN //067FILEKEY EXEC PGM=IKJEFT01,DYNAMNBR=20 //SYSTSIN DD * DSN SYSTEM(DB2P) RUN PROGRAM(067-fileKey) PLAN(FILEKEYPLAN) PARM('RT') END /* //TEMPVSAM DD DSN=IDXVIDEO.TEMPVSAM,DISP=SHR //FKOUT DD DSN=output(out067.txt),DISP=(NEW,CATLG) // ENDIF //*********************************************************************

还有匹配的现代化脚本(在 groovy 中)—— SYSTSIN 数据集的内联内容由 “流” 表示 —

// STEP 067FILEKEY - PGM - IKJEFT01*********************************************** def step067FILEKEY(Object shell, Map params, Map programResults){ shell.with { if (checkValidProgramResults(programResults)) { return execStep("067FILEKEY", "IKJEFT01", programResults, { mpr .withFileConfigurations(new FileConfigurationUtils() .withJobContext(jobContext) .fileSystem("SYSTSIN") .stream( """ DSN SYSTEM(DB2P) RUN PROGRAM(067-fileKey) PLAN(FILEKEYPLAN) PARM('RT') END """, getEncoding()) .build() .bluesam("TEMPVSAM") .dataset("IDXVIDEO.TEMPVSAM") .disposition("SHR") .build() .fileSystem("FKOUT") .path("output(out067.txt)") .disposition("NEW") .normalTermination("CATLG") .build() .getFileConfigurations()) .withParameters(params) .runProgram("IKJEFT01") }) } } }

QCMDEXC

QCMDEXC 目的

该实用程序模拟 AS/400 系统实用程序 QCMDEXC 的行为,用于在运行时以动态方式运行系统命令。

功能:

  • 动态解析和执行命令。

  • 支持命名和位置参数格式。

QCMDEXC 签名

接受 1-2 个参数:

  • 第一:包含要执行的命令的字母数字数据

  • 第二(可选):从第一个参数读取的长度(以字节为单位)(默认为全长)

QCMDEXC 处理 Checks/Error

对于以下情况,RuntimeException将抛出 a:

  • 当提供的参数数量不是一两个时;

  • 如果 commands 参数为空或者要运行的命令无法识别;

  • 如果命令由于任何原因运行失败;此外,程序的返回代码将设置为 1。

QCMDEXC 示例用法

以下是旧版 COBOL 程序的用法示例:数据项CL-COMMANDX在用作 QCMDEXC 程序调用的参数之前先装有命令:

INITIALIZE CL-COMMANDX. STRING "CPYF FROMFILE(PLAYERS) TOFILE(" DELIMITED BY SIZE, "NEWFILE" DELIMITED BY SIZE, ") MBROPT(*REPLACE) FMTOPT(*NOCHK) CRTFILE(*YES)" DELIMITED BY SIZE INTO CL-COMMANDX END-STRING. CALL "QCMDEXC" USING CL-COMMANDX CLENGTHX.

一旦现代化为 Java 代码,它就会变成:

DataUtils.initialize(ctx.getClCommandx().getClCommandxReference()); StringConcatenationBuilder.newInstance(ctx.getClCommandx().getClCommandxReference()) .addDelimitedBySize("CPYF FROMFILE(PLAYERS) TOFILE(") .addDelimitedBySize("NEWFILE") .addDelimitedBySize(") MBROPT(*REPLACE) FMTOPT(*NOCHK) CRTFILE(*YES)") .end(); ctrl.callSubProgram("QCMDEXC", CallBuilder.newInstance() .byReference(ctx.getClCommandx().getClCommandxReference()) .byReference(ctx.getClengthx().getClengthxReference()) .getArguments(), ctx);

请注意,旧版命令内容在现代化代码中 “按原样” 使用,未经任何修改。