

AWS Mainframe Modernization Service (マネージドランタイム環境エクスペリエンス) は、新規のお客様に公開されなくなりました。 AWS Mainframe Modernization Service (マネージドランタイム環境エクスペリエンス) と同様の機能については、 AWS Mainframe Modernization Service (セルフマネージドエクスペリエンス) をご覧ください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、[AWS 「 Mainframe Modernization の可用性の変更](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 セッションを必要とせずにバッチジョブで TSO (**T** ime **S** 共有 **O** プション) コマンドを実行し、非インタラクティブバッチ環境とインタラクティブ TSO 環境をブリッジします。

環境固有の違いがあるレガシー IKJEFT1A の動作を模倣します。たとえば、DB2 TERM(inate) コマンドは最新の環境では無視されます (情報として記録されます）。

**注記**  
ここで説明されていないコマンド構文 - IKJEFT1A は従来のコマンドデータセットを変更せずに使用します。TSO コマンドの詳細については、レガシープラットフォームのドキュメントを参照してください。

### IKJEFT1A 署名
<a name="ikjeft1a-signature"></a>

コマンド入力 (JCL `DD`ディレクティブで定義) に`SYSTSIN`データセットを使用します。モダナイズバージョンでは、同じデータセットが変更されていません。モダナイズされた Groovy ジョブスクリプトでのみ呼び出されます。

### IKJEFT1A 関連の設定パラメータ
<a name="ikjeft1a-configuration"></a>

ユーティリティの動作は、次の設定パラメータの影響を受けます。
+ `systin.encoding`

このパラメータの設定の詳細については、[オプションのウェブアプリケーションで使用可能なプロパティ](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 スクリプト ( `DD *`ディレクティブを使用して`SYSTSIN`データセットのインラインコンテンツを使用する)

```
//*********************************************************************         
//* 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 個のパラメータを受け入れます。
+ 最初: 実行するコマンドを含む英数字データ
+ 2 番目 (オプション): 最初のパラメータから読み取るバイト単位の長さ (デフォルトは全長)

### QCMDEXC チェック/エラー処理
<a name="qcmdexc-error-handling"></a>

次の場合、 `RuntimeException` がスローされます。
+ 指定された引数が 1 つまたは 2 つでない場合。
+ コマンド引数が空の場合、または実行するコマンドが認識されない場合。
+ コマンドの実行が何らかの理由で失敗した場合、さらにプログラムからのリターンコードは 1 に設定されます。

### QCMDEXC サンプルの使用
<a name="qcmdexc-sample-usages"></a>

レガシー 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);
```

レガシーコマンドの内容は、モダナイズされたコードで「そのまま」使用されており、変更はありません。