

AWS Der Mainframe Modernization Service (Managed Runtime Environment Experience) steht Neukunden nicht mehr zur Verfügung. Funktionen, die dem AWS Mainframe Modernization Service (Managed Runtime Environment-Erfahrung) ähneln, finden Sie unter AWS Mainframe Modernization Service (Self-Managed Experience). Bestandskunden können den Service weiterhin wie gewohnt nutzen. Weitere Informationen finden Sie unter Änderung der Verfügbarkeit von [AWS Mainframe Modernization](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html).

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Befehle und Dienstprogramme
<a name="system-commands-utilities"></a>

Dieser Abschnitt bezieht sich auf Hilfsprogramme, deren Aufgabe darin besteht, Benutzerbefehle zu verarbeiten, die mithilfe von Steuerkarten bereitgestellt werden.

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

### IKJEFT1Ein Zweck
<a name="ikjeft1a-purpose"></a>

IKJEFT1A und seine Aliase führen TSO-Befehle (**T** ime **S** haring **O** option) in Batch-Jobs aus, ohne dass eine interaktive TSO-Sitzung erforderlich ist, wodurch eine Brücke zwischen nicht interaktiven Batch- und interaktiven TSO-Umgebungen geschaffen wird.

Ahmt IKJEFT1 veraltetes A-Verhalten mit umgebungsspezifischen Unterschieden nach: DB2 TERM-Befehle (inate) werden beispielsweise in modernen Umgebungen ignoriert (als informativ protokolliert).

**Anmerkung**  
Die Befehlssyntax wird hier nicht näher beschrieben — IKJEFT1 A verwendet ältere Befehlsdatensätze unverändert. Einzelheiten zu TSO-Befehlen finden Sie in der Dokumentation zu älteren Plattformen.

### IKJEFT1Eine Signatur
<a name="ikjeft1a-signature"></a>

Verwendet den `SYSTSIN` Datensatz für die Befehlseingabe (definiert über die `DD` JCL-Direktive). Die modernisierte Version verwendet denselben Datensatz unverändert. Wird nur in modernisierten Groovy-Job-Skripten aufgerufen.

### IKJEFT1Ein verwandter Konfigurationsparameter
<a name="ikjeft1a-configuration"></a>

Das Verhalten des Dienstprogramms wird durch den folgenden Konfigurationsparameter beeinflusst:
+ `systin.encoding`

Einzelheiten [Verfügbare Eigenschaften für optionale Webanwendungen](ba-runtime-key-value.md#ba-runtime-key-value-web) zur Konfiguration dieses Parameters finden Sie unter.

### IKJEFT1Eine Checks/Error Handhabung
<a name="ikjeft1a-error-handling"></a>

Wenn ein nicht unterstützter Befehl in der SYSTSIN-Datenmenge vorhanden ist, `RuntimeException` wird a ausgelöst.

### IKJEFT1Ein Beispiel für Verwendungen
<a name="ikjeft1a-sample-usages"></a>

Das alte JCL-Skript (das mithilfe einer Direktive einen Inline-Inhalt des `SYSTSIN` Datensatzes verwendet) `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                                                                        
//*********************************************************************
```

und das dazu passende modernisierte Skript (in grooviger Form) -- der Inline-Inhalt des `SYSTSIN` Datensatzes wird durch einen „Stream“ repräsentiert --

```
// 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 Zweck
<a name="qcmdexc-purpose"></a>

Dieses Hilfsprogramm emuliert das Verhalten des AS/400-Systemdienstprogramms QCMDEXC, mit dem Systembefehle zur Laufzeit dynamisch ausgeführt werden.

Features:
+ Analysiert Befehle und führt sie dynamisch aus.
+ Unterstützt benannte und positionelle Parameterformate.

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

Akzeptiert 1-2 Parameter:
+ Erstens: Alphanumerische Daten, die Befehle zur Ausführung enthalten
+ Zweitens (optional): Länge in Byte, die aus dem ersten Parameter gelesen werden soll (standardmäßig die volle Länge)

### QCMDEXC-Behandlung Checks/Error
<a name="qcmdexc-error-handling"></a>

In den folgenden Fällen `RuntimeException` wird a ausgelöst:
+ Wenn die Anzahl der angegebenen Argumente nicht eins oder zwei ist;
+ Wenn das Befehlsargument leer ist oder wenn der auszuführende Befehl nicht erkannt wird;
+ Falls die Ausführung des Befehls aus irgendeinem Grund fehlschlägt, wird zusätzlich der Rückgabecode des Programms auf 1 gesetzt.

### QCMDEXC-Anwendungsbeispiele
<a name="qcmdexc-sample-usages"></a>

Hier ist ein Anwendungsbeispiel aus einem älteren COBOL-Programm: Das Datenelement `CL-COMMANDX` wird mit Befehlen ausgestattet, bevor es als Argument für den QCMDEXC-Programmaufruf verwendet wird:

```
       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.
```

Nach der Modernisierung in Java-Code wird daraus:

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

Bitte beachten Sie, dass der Inhalt älterer Befehle im modernisierten Code unverändert und ohne Änderungen verwendet wird.