

AWS Mainframe Modernization Service （受管執行期環境體驗） 不再向新客戶開放。對於與 AWS Mainframe Modernization Service （受管執行期環境體驗） 類似的功能，探索 AWS Mainframe Modernization Service （自我管理體驗）。現有客戶可以繼續正常使用該服務。如需詳細資訊，請參閱[AWS 大型主機現代化可用性變更](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 命令公用程式
<a name="system-commands-utilities"></a>

本節與 公用程式相關，其角色是處理使用控制卡提供的使用者命令。

## IKJEFT1A/IKJEFT1B/KEQEFT01/IKJEFT01/DSNDBTCH
<a name="ikjeft1a-ikjeft1b-keqeft01-ikjeft01-dsndbtch"></a>

### IKJEFT1A 用途
<a name="ikjeft1a-purpose"></a>

IKJEFT1A 及其別名會在批次任務中執行 TSO (**T** ime **S** haring **O** ption) 命令，而不需要互動式 TSO 工作階段、橋接非互動式批次和互動式 TSO 環境。

模擬具有特定環境差異的舊版 IKJEFT1A 行為：例如，現代環境會忽略 DB2 TERM(inate) 命令 （記錄為資訊性）。

**注意**  
此處未詳細說明的命令語法 - IKJEFT1A 未變更使用舊版命令資料集。如需 TSO 命令詳細資訊，請參閱舊版平台文件。

### IKJEFT1A 簽章
<a name="ikjeft1a-signature"></a>

使用`SYSTSIN`資料集進行命令輸入 （透過 JCL `DD`指令定義）。現代化版本使用相同的資料集不變。僅在現代化 Groovy 任務指令碼中調用。

### IKJEFT1A 相關組態參數
<a name="ikjeft1a-configuration"></a>

公用程式的行為會受到下列組態參數的影響：
+ `systin.encoding`

如需設定此參數的詳細資訊[選用 Web 應用程式的可用屬性](ba-runtime-key-value.md#ba-runtime-key-value-web)，請參閱 。

### IKJEFT1A 檢查/錯誤處理
<a name="ikjeft1a-error-handling"></a>

當 SYSTSIN 資料集中有不支援的命令時，`RuntimeException`便會擲出 。

### IKJEFT1A 範例用量
<a name="ikjeft1a-sample-usages"></a>

舊版 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
<a name="qcmdexc"></a>

### QCMDEXC 用途
<a name="qcmdexc-purpose"></a>

此公用程式程式模擬 AS/400 系統公用程式 QCMDEXC 的行為，用於在執行時間以動態方式執行系統命令。

功能：
+ 動態剖析和執行命令。
+ 支援具名和位置參數格式。

### QCMDEXC 簽章
<a name="qcmdexc-signature"></a>

接受 1-2 個參數：
+ 首先：包含要執行之命令的英數字元資料
+ 第二個 （選用）：從第一個參數讀取的位元組長度 （預設為完整長度）

### QCMDEXC 檢查/錯誤處理
<a name="qcmdexc-error-handling"></a>

在下列情況下，`RuntimeException`將會擲回 ：
+ 當提供的引數數目不是一或兩個時；
+ 如果命令引數是空的，或如果要執行的命令無法辨識；
+ 如果命令執行因任何原因失敗；此外，來自程式的傳回碼將設定為 1。

### QCMDEXC 範例用量
<a name="qcmdexc-sample-usages"></a>

以下是來自舊版 COBOL 程式的範例用量：資料項目在用作 QCMDEXC 程式呼叫的引數之前`CL-COMMANDX`，會先安裝 命令：

```
       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);
```

請注意，在現代化程式碼中「原狀」使用舊版命令內容，無需進行任何修改。