

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 환경을 연결하지 않고도 배치 작업에서 TSO(**T** ime **S** haring **O** ption) 명령을 실행합니다.

환경별 차이와 함께 레거시 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\$12개의 파라미터를 허용합니다.
+ 첫 번째: 실행할 명령이 포함된 영숫자 데이터
+ 두 번째(선택 사항): 첫 번째 파라미터에서 읽을 바이트 길이(기본값은 전체 길이)

### QCMDEXC 검사/오류 처리
<a name="qcmdexc-error-handling"></a>

다음과 같은 경우가 발생합니다`RuntimeException`.
+ 제공된 인수 수가 1\$12개가 아닌 경우
+ 명령 인수가 비어 있거나 실행할 명령을 인식할 수 없는 경우
+ 어떤 이유로든 명령 실행이 실패하면 프로그램의 반환 코드가 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);
```

레거시 명령 콘텐츠는 수정 없이 현대화된 코드에서 "있는 그대로" 사용되고 있습니다.