

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.

# Dienstprogramme für Datensätze
<a name="system-datasets-utilities"></a>

## BLUESAMCOPY/BLUESAMCREATE/BLUESAMDELETE/BLUESAMCLEAR
<a name="bluesam-utilities"></a>

[Diese Hilfsprogramme bieten wichtige Funktionen zur Bearbeitung von Datensätzen in Blusam-Datensätzen.](https://docs.aws.amazon.com/m2/latest/userguide/ba-shared-blusam.html)

Das `bypassBluesamStatus` Kennzeichen (gespeichert in JobContext) legt fest, ob die normale Statusüberprüfung von Datensätzen, die gleichzeitige Zugriffskonflikte zwischen Online- und Batch-Prozessen verhindert, umgangen werden soll.

Wann `bypassBluesamStatus` ist wahr:
+ Überspringt normale Statusprüfungen von Datensätzen während des Betriebs
+ Ermöglicht den Zugriff auf Datensätze, die normalerweise blockiert sein könnten

### BLUESAMCOPY
<a name="bluesamcopy"></a>

Das BLUESAMCOPY-Programm kopiert Daten und Metadatenstrukturen von einem Bluesam-Datensatz in einen anderen.

#### Parameters
<a name="bluesamcopy-parameters"></a>

Das BLUESAMCOPY-Programm verwendet zwei Parameter:
+ `FROM=<source dataset name>`- Quelldatensatz, aus dem kopiert werden soll
+ `TO=<target dataset name>`- Zieldatensatz, in den kopiert werden soll

#### Behavior
<a name="bluesamcopy-behavior"></a>
+ Wenn der Zieldatensatz nicht existiert, wird er mit der Metadatenstruktur der Quelle erstellt
+ Wenn das Ziel existiert, wird es vor dem Kopieren gelöscht (überschreibt bestehende Daten)
+ Der Vorgang wird fortgesetzt, wenn Datensätze nicht von Online-Prozessen verwendet werden oder wenn der Wert auf true gesetzt `bypassBluesamStatus` ist
+ Behält Schlüssel, Komprimierung, Datensatzlänge und andere Metadateneigenschaften bei

#### Fehlerbehandlung
<a name="bluesamcopy-error"></a>

Gibt Code 1 zurück, wenn der Quelldatensatz nicht existiert oder wenn einer der Datensätze von Online-Prozessen verwendet wird.

#### Beispiel für die Verwendung
<a name="bluesamcopy-sample"></a>

```
import ...

mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class)

// copy bluesam dataset
res = mpr.withArguments("FROM=MYBLUESAMTABLE","TO=MYBLUESAMTABLE2").runProgram("BLUESAMCOPY")
```

### BLUESAMCREATE
<a name="bluesamcreate"></a>

Das Programm BLUESAMCREATE erstellt einen Bluesam-Datensatz mit den angegebenen Parametern.

#### Parameters
<a name="bluesamcreate-parameters"></a>

Das BLUESAMCREATE-Programm benötigt sieben Parameter:
+ `name=<dataset name>`- Zu erstellender Datensatz (erforderlich)
+ `compress=<true/false>`- Komprimierung aktivieren (optional, Standard: false)
+ `fixedLength=<true/false>`- Status von Datensätzen mit fester Länge (optional, Standard: falsch)
+ `recordLength=<integer>`- Länge des Datensatzes in Byte (optional, Standard: -1)
+ `primaryKey=<key id>,duplicates=<true/false>,fields=<offset,length,...>`- Spezifikation des Primärschlüssels (optional)
+ `key=<altkey id>,duplicates=<true/false>,fields=<offset,length,...>`- Alternativer Schlüssel (kann mehrere oder 0 haben)
+ `clearExisting=true/false`- Löscht den vorhandenen Datensatz (optionaler Standardwert: true)

 Erläuterungen zu bestimmten Schlüsselparametern:
+ `duplicates`: Ob doppelte Werte für den angegebenen Schlüssel zulässig sind oder nicht;
+ `fields`: Feldpositionen (1-basiert) und Längen, die den Schlüssel definieren;

#### Behavior
<a name="bluesamcreate-behavior"></a>
+ Wenn der Datensatz nicht existiert, wird er mit den angegebenen Parametern erstellt
+ Wenn der Datensatz existiert, wird er gelöscht, wenn `clearExisting=true`
+ Der Vorgang wird fortgesetzt, wenn Datensätze nicht von Online-Prozessen verwendet werden oder wenn auf eingestellt `bypassBluesamStatus` ist `true`

#### Bedingungen für Fehler
<a name="bluesamcreate-error"></a>

Gibt in allen Fällen den Code 0 zurück.

#### Beispiel für die Verwendung
<a name="bluesamcreate-sample"></a>

```
import ...

mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class)

// create bluesam dataset
mpr.withArguments(
      "name=MYBLUESAMTABLE",
      "compress=FALSE", 
      "fixedLength=true", 
      "recordLength=54",
      "primaryKey=MYKEY_PK,duplicates=FALSE,fields=0,6")
    .runProgram("BLUESAMCREATE")
```

### BLUESAMDELETE
<a name="bluesamdelete"></a>

Das Programm BLUESAMDELETE löscht Bluesam-Datensätze.

#### Parameters
<a name="bluesamdelete-parameters"></a>

Das BLUESAMDELETE-Programm benötigt einen oder mehrere Parameter:
+ `<dataset name>`- Zu löschender Datensatz (kann mehrere haben)

#### Behavior
<a name="bluesamdelete-behavior"></a>
+ Der Vorgang wird fortgesetzt, wenn Datensätze nicht von Online-Prozessen verwendet werden oder wenn auf eingestellt `bypassBluesamStatus` ist `true`
+ Wenn der Datensatz vorhanden ist, löschen Sie ihn

#### Fehlerbedingungen
<a name="bluesamdelete-error"></a>

Gibt in allen Fällen den Code 0 zurück.

#### Beispiel für die Verwendung
<a name="bluesamdelete-sample"></a>

```
import ...

mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class)

// delete bluesam datasets
res = mpr.withArguments("MYBLUESAMTABLE","MYBLUESAMTABLE2","MYBLUESAMTABLE3").runProgram("BLUESAMDELETE")
```

### BLUESAM CLEAR
<a name="bluesamclear"></a>

Das BLUESAMCLEAR-Programm entfernt alle Daten aus vorhandenen Datensätzen, wobei deren Struktur und Metadaten erhalten bleiben.

#### Parameters
<a name="bluesamclear-parameters"></a>

Das BLUESAMCLEAR-Programm benötigt einen oder mehrere Parameter:
+ `<dataset name>`- Zu löschender Datensatz (kann mehrere haben)

#### Behavior
<a name="bluesamclear-behavior"></a>
+ Der Vorgang wird fortgesetzt, wenn Datensätze nicht von Online-Prozessen verwendet werden oder wenn auf eingestellt `bypassBluesamStatus` ist `true`
+ Falls ein Datensatz vorhanden ist, löschen Sie ihn

#### Fehlerbedingungen
<a name="bluesamclear-error"></a>

Gibt in allen Fällen den Code 0 zurück.

#### Beispiel für die Verwendung
<a name="bluesamclear-sample"></a>

```
import ...

mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class)

// clear bluesam datasets
res = mpr.withArguments("MYBLUESAMTABLE","MYBLUESAMTABLE2").runProgram("BLUESAMCLEAR")
```

## BPXWDYN
<a name="bpxwdyn"></a>

Dieses Hilfsprogramm simuliert den z/OS BPXWDYN-Dienst für die dynamische Zuweisung und Freigabe von Datensätzen. In modernen Anwendungen werden die Dateizuweisungen in Groovy-Skripten über die Builder-API vorgenommen. `FileConfigurationUtils` Dieses Programm ermöglicht die dynamische Verwaltung dieser Zuweisungen ohne Groovy, was für die interaktive oder bedingte Dateiverarbeitung in modernisierten Anwendungen unerlässlich ist.

### Parameters
<a name="bpxwdyn-parameters"></a>

Das alte Argumentformat wird beibehalten. Erwartet ein einzelnes Argument, das einen Header mit einer Größe von 2 Byte gefolgt von der Befehlszeichenfolge enthält.

Format der Befehlszeichenfolge für die Zuweisung: `ALLOC DD(<name>) DSN('<dsn>') SHR?`

Format der Befehlsfolge für die Freigabe: `FREE DD(<name>)`

### Fehlerbehandlung
<a name="bpxwdyn-error"></a>
+ Stellen Sie den Fehlercode 0 für Erfolg und 1 für Misserfolg ein
+ Wird bei RuntimeException ungültigen Befehlen oder Parametern ausgelöst

### Beispiel für eine Verwendung
<a name="bpxwdyn-sample"></a>

Hier ist ein Java-Beispiel für die Verwendung des BPXWDYN-Programms, das aus einer COBOL-Modernisierung durch AWS-Transformation resultiert:

Der COBOL-Code:

```
   01  WK-AREA.
       03  DS-ALLOC-STRING.
           05  DS-LENGTH          PIC S9(004) COMP VALUE 100.
           05  DS-TEXT            PIC  X(100) VALUE
            "ALLOC DD(INFILE) DSN('A.B.JCLLIB(XYZ470)') SHR".
...
           01  RC-RETURN-CODE-AREA.
       03  RC-RETURN-CODE         PIC S9(008) COMP.
...
     CALL  'BPXWDYN'  USING  DS-ALLOC-STRING RETURNING RC-RETURN-CODE.
```

und die passende Java-Modernisierung:

```
private final Group dsAllocString = new Group(root).named("DS-ALLOC-STRING");
private final Elementary dsLength = new Elementary(dsAllocString,new BinaryType(4, 0, "STD", false, false, true),Short.valueOf("100")).named("DS-LENGTH");
private final Elementary dsText = new Elementary(dsAllocString,new AlphanumericType(100),"ALLOC DD(INFILE) DSN('A.B.JCLLIB(XYZ470)') SHR").named("DS-TEXT");
...
private final Group root = new Group(getData()).named("RC-RETURN-CODE-AREA"); 
private final Elementary rcReturnCode = new Elementary(root,new BinaryType(8, 0, "STD", false, false, true)).named("RC-RETURN-CODE");
...
    // Call to utility program  BPXWDYN
ctrl.callSubProgram(
       "BPXWDYN", 
        CallBuilder.newInstance().byReference(ctx.getWkArea().getDsAllocStringReference()).getArguments(), ctx);
 
ctx.getRcReturnCodeArea().setRcReturnCode(NumberUtils.convert(ctx.getProgramReturned()).intValue());
```

## GDGUTILS
<a name="gdgutils"></a>

GDGs (Generation Data Group) ermöglicht es Anwendungen, mit versionierten Datensätzen zu arbeiten, wobei bei jeder Ausführung eine neue Generation erstellt wird, während gleichzeitig der Zugriff auf frühere Generationen erhalten bleibt. Dieses Hilfsprogramm erstellt und verwaltet diese Datensatzgenerationen. Dieses Hilfsprogramm soll in Groovy-Skripten aufgerufen werden.

### Parameters
<a name="gdgutils-parameters"></a>

Die Reihenfolge der Parameter spielt keine Rolle
+ `action=<create|refreshevents>`- Durchzuführender Vorgang (verpflichtend)
+ `gdgname=<name>`- Name der GDG-Basis (verpflichtend)
+ `storageProvider=<filesystem|bluesam>`- Speicher-Backend
+ `relativeGeneration=<+integer>`- Relative Generationsnummer (z. B. \+1 für die nächste Generation)
+ `absoluteGeneration=integer`- Absolute Generationsnummer
+ `recordLength=<integer>`- Datensatzgröße im Datensatz
+ `fixedLength=<true/false>`- Gibt an, dass die Datensätze im Datensatz eine feste Länge haben
+ `ownerPath=<File system path>`- Der Pfad zum Speichern des Datensatzes (dateisystemspezifisch, für diesen Fall obligatorisch)
+ `compress=<true/false>`- Gibt an, dass die Daten im Speicher komprimiert bleiben sollen, wenn Daten im Datenspeicher komprimiert wurden (Bluesam-spezifisch) (optional, false ist der Standardwert)
+ `catalog`— Gibt an, dass der Datensatz katalogisiert werden soll (optional)
+ `warmUp`- Gibt an, dass der Datensatz beim Öffnen in den Speicher geladen werden soll (Bluesam-spezifisch) (optional)

RelativeGeneration oder AbsoluteGeneration: Eine dieser Eigenschaften muss festgelegt werden.

### Operationen
<a name="gdgutils-operations"></a>
+ create: Erstellt eine neue GDG-Datensatzgenerierung gemäß den GDG-Metadaten (verarbeitet sowohl Dateisystem- als auch Bluesam-Speicher)
+ refreshevents: Passt die Generationsnummer (Gdg-Metadaten) an, ohne neue Datensätze zu erstellen (Wird verwendet, wenn fehlgeschlagene Jobs neu gestartet werden, die bereits Datensätze erstellt haben)

### Fehlerbehandlung
<a name="gdgutils-error"></a>
+ Setzt den Fehlercode 0 für Erfolg und 1 für Misserfolg
+ Wird bei RuntimeException ungültigen Befehlen oder Parametern ausgelöst

### Beispiel für eine Verwendung
<a name="gdgutils-sample"></a>

GDG-Erstellungsvorgang: Der folgende Code erstellt eine Bluesam-Generation (43) für den Datensatz `IC.PLI.GDGTEST`

```
import ...

mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class)

Map params = new Hashtable()
params.put("jobContext", jobContext)
Object[] args =["action=create","gdgname=IC.PLI.GDGTEST","absoluteGeneration=43","storageProvider=bluesam","recordLength=80"]
mpr.withParameters(params).withArguments(args).runProgram("GDGUTILS")
```

Gdg-Refreshevents-Operation: Nur RelativeGeneration ist für diesen Vorgang relevant. Der folgende Code aktualisiert die Generationsnummer (\+1 im Vergleich zur aktuellen Generation) für den Datensatz `IC.PLI.GDGTEST`

```
import ...

mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class)

Map params = new Hashtable()
params.put("jobContext", jobContext)
Object[] args =["action=refreshevents","gdgname=IC.PLI.GDGTEST","relativeGeneration=1","storageProvider=bluesam"]
mpr.withParameters(params).withArguments(args).runProgram("GDGUTILS")
```

## ICEGENER/SYNCGENR
<a name="icegener"></a>

Dieses Hilfsprogramm ahmt das Verhalten des z/OS Systemdienstprogramms ICEGENER nach. Es kopiert Datensätze von der Eingabe (Datensatz) zur Ausgabe (Datensatz). SYSUT1 SYSUT2 Diese Java-Implementierung bietet äquivalente Funktionen und unterstützt sowohl Dateisystem- als auch Bluesam-Speicher.

### Parameters
<a name="icegener-parameters"></a>

Kein Argument

### Erforderliche Datensätze
<a name="icegener-datasets"></a>
+ SYSUT1: Eingabedatensatz/Datei
+ SYSUT2: Ausgabedatensatz/Datei

### Umgang mit der Disposition für den Datensatz SYSUT2
<a name="icegener-disposition"></a>
+ NEU: Neuen Datensatz/Datei erstellen
+ OLD/SHR: Use existing dataset/file(muss existieren)
+ MOD: Ändern, erstellen, falls vorhanden, anhängen, falls vorhanden

### Fehlerbehandlung
<a name="icegener-error"></a>
+ Setze den Fehlercode 0, wenn der Kopiervorgang erfolgreich war, und 1, wenn er fehlschlägt
+ Wird `IllegalStateException` wegen ungültiger Verwendung des Bluseam-Datensatzes ausgelöst

### Beispiel für die Verwendung
<a name="icegener-sample"></a>

Hier ist ein groovy-Beispiel für die Verwendung des ICEGENER-Programms, das aus einer JCL-Modernisierung durch AWS-Transformation resultiert:

Der JCL-Code:

```
//STEP01    EXEC PGM=ICEGENER
//SYSUT1   DD DSN=POI.INPUT,DISP=SHR
//SYSUT2   DD DSN=POI.OUTPU,
//            DISP=(,CATLG,DELETE),
//            UNIT=3490,
//            DCB=(RECFM=FB,LRECL=100)
/*
```

und die dazu passende Groovy-Modernisierung:

```
mpr
    .withFileConfigurations(new FileConfigurationUtils()
        .withJobContext(jobContext)
        .bluesam("SYSUT1")
        .dataset("POI.INPUT")
        .disposition("SHR")
        .build()
        .bluesam("SYSUT2")
        .dataset("POI.OUTPU")
        .normalTermination("CATLG")
        .abnormalTermination("DELETE")
        .build()
        .getFileConfigurations())
    .withParameters(params)
    .runProgram("ICEGENER")
```

## IDCAMS/KQCAMS
<a name="idcams"></a>

Dieses Hilfsprogramm ahmt das Verhalten der älteren Programme IDCAMS nach, einem Mainframe-Datenverwaltungstool, das für VSAM-Dateioperationen (Virtual Storage Access Method) verwendet wird. Es verarbeitet die alten IDCAMS-Befehle und behält dabei dieselbe Syntax wie die ursprünglichen SYSIN-Eingaben bei.

### Kontext
<a name="idcams-context"></a>

Das Programmverhalten kann durch zwei Parameter konfiguriert werden, die in definiert sind: `application-utility-pgm.yml`
+ jclType: JCL-Typ-ID (vse oder mvs). Die PRINT/REPRO Befehle des IDCAMS-Dienstprogramms geben 4 zurück, wenn die Datei für JCL-Dateien, die nicht mit VSE verknüpft sind, leer ist
+ forcedCharsetIdcams: Optionale Überschreibung des Zeichensatzes für die IDCAMS-Verarbeitung

### Parameters
<a name="idcams-parameters"></a>

Kein Argument. Operationen werden über den SYSIN-Datensatz weitergeleitet.

### Erforderliche Datensätze
<a name="idcams-datasets"></a>
+ SYSIN — Enthält IDCAMS-Befehlsanweisungen
+ Eingabe-/Ausgabe-Datensätze — Wie in den IDCAMS-Befehlen angegeben (abhängig von der IDCAMS-Anweisung)

### Hauptmerkmale//Unterstützte Befehle
<a name="idcams-commands"></a>

Die Details zu den IDCAMS-Befehlen auf der SYSIN-Steuerkarte sind hier nicht aufgeführt, sollten aber aus den vorhandenen Dokumentationen zu den entsprechenden älteren Plattformen abgerufen werden.
+ DEFINE — Erzeugt VSAM-Cluster und -Datensätze
+ DELETE — Entfernt Datensätze (unterstützt Platzhalter)
+ REPRO — Kopiert Daten zwischen Datensätzen
+ PRINT - Zeigt den Inhalt des Datensatzes an
+ VERIFY — Überprüft die Existenz und Integrität von Datensätzen
+ ALTER — Ändert Datensatzattribute (Umbenennung)
+ ALLOC — Weist Datensätze dynamisch zu
+ SET — Verwaltet Bedingungscodes (LASTCC/MAXCC)
+ IF-THEN-ELSE - Bedingte Befehlsausführung
+ ABBRECHEN — Beendet die Jobausführung

### Fehlerbehandlung
<a name="idcams-error"></a>
+ Setzt den Fehlercode 0, wenn der letzte Befehl erfolgreich war, -1, falls er fehlschlägt
+ Die SET-Befehle (LASTCC) können verwendet werden, um den Fehlercode zu überschreiben, z. `SET LASTCC = 0`

### Beispiel für die Verwendung
<a name="idcams-sample"></a>

Hier ist ein Groovy-Beispiel für die Verwendung des IDCAMS-Programms, das aus einer JCL-Modernisierung durch AWS-Transformation resultiert:

Der JCL-Code:

```
//STEP15 EXEC PGM=IDCAMS
//SYSPRINT DD   SYSOUT=*
//ACCTDATA DD DISP=SHR,
//         DSN=AWS.M2.CARDDEMO.ACCTDATA.PS
//ACCTVSAM DD DISP=SHR,
//         DSN=AWS.M2.CARDDEMO.ACCTDATA.VSAM.KSDS
//SYSIN    DD   *
  REPRO INFILE(ACCTDATA) OUTFILE(ACCTVSAM)
/*
```

und die dazu passende Groovy-Modernisierung:

```
mpr.withFileConfigurations(new FileConfigurationUtils()
    .withJobContext(jobContext)
    .systemOut("SYSPRINT")
    .output("*")
    .build()
    .bluesam("ACCTDATA")
    .dataset("AWS.M2.CARDDEMO.ACCTDATA.PS")
    .disposition("SHR")
    .build()
    .bluesam("ACCTVSAM")
    .dataset("AWS.M2.CARDDEMO.ACCTDATA.VSAM.KSDS")
    .disposition("SHR")
    .build()
    .fileSystem("SYSIN")
    .stream("REPRO INFILE(ACCTDATA) OUTFILE(ACCTVSAM)", getEncoding())
    .build()
    .getFileConfigurations())
.withParameters(params)
.runProgram("IDCAMS")
```

## IEBGENER/JSDGENER
<a name="iebgener"></a>

Dieses Programm repliziert das IEBGENER-Hilfsprogramm. Es wird zum Kopieren und Bearbeiten sequentieller Datensätze verwendet. Diese Implementierung erweitert die grundlegenden Kopierfunktionen durch die Unterstützung von IEBGENER-Steueranweisungen für erweiterte Datenverarbeitungsvorgänge.

### Parameters
<a name="iebgener-parameters"></a>

Kein Argument. Operationen werden über den SYSIN-Datensatz weitergeleitet.

### Erforderliche Datensätze
<a name="iebgener-datasets"></a>
+ SYSIN: enthält Steueranweisungen (optional, falls nicht definiert, ist das IEBGENER-Programm identisch mit ICEGENER)
+ SYSUT1: Eingabedatensatz/Datei
+ SYSUT2: Ausgabedatensatz/Datei

### Hauptmerkmale//Unterstützte IEBGENER Control Statements
<a name="iebgener-commands"></a>

Die Details zur IEBGENER-Steueranweisung auf den SYSIN-Steuerkarten sind hier nicht aufgeführt, sollten aber aus den vorhandenen Dokumentationen zu den entsprechenden älteren Plattformen abgerufen werden.
+ GENERATE — definiert die Gesamtstruktur des Datenmanipulationsprozesses, indem die maximale Anzahl der zu verarbeitenden Datensatztypen (MAXNAME) und Felder (MAXFLDS) angegeben wird
+ RECORD — definiert das tatsächliche Layout und den Inhalt jedes Datensatztyps durch Angabe der Position, Länge und des Formats einzelner Felder, die entweder aus dem Eingabedatensatz kopiert oder mit bestimmten Werten generiert werden
+ LABEL/MEMBER/EXITwerden nicht unterstützt

Beispiel:

```
GENERATE MAXNAME=3,MAXFLDS=5
RECORD TYPE=1,
       FIELD=(1,1,CH,VALUE='H'),
       FIELD=(2,30,CH,VALUE='EMPLOYEE REPORT 2024         ')
RECORD TYPE=2,
       FIELD=(1,1,CH,VALUE='D'),
       FIELD=(2,10,CH),              /* Name */
       FIELD=(12,8,CH),             /* Birth date */
       FIELD=(20,8,CH,VALUE='ACTIVE')
RECORD TYPE=3,
       FIELD=(1,1,CH,VALUE='F'),
       FIELD=(2,30,CH,VALUE='END OF REPORT              ')
```

### Fehlerbehandlung
<a name="iebgener-error"></a>

Setzen Sie den Fehlercode 0, wenn der Kopiervorgang erfolgreich war, und 1, wenn er fehlschlägt.

### Beispiel für die Verwendung
<a name="iebgener-sample"></a>

Hier ist ein groovy-Beispiel für die Verwendung des IEBGENER-Programms, das aus einer JCL-Modernisierung durch AWS-Transformation resultiert:

Der JCL-Code:

```
//GENDATA  EXEC PGM=IEBGENER
//SYSUT1   DD DSN=INPUT.EMPLOYEE.DATA,
//            DISP=SHR
//SYSUT2   DD DSN=OUTPUT.EMPLOYEE.FILE,
//            DISP=(NEW,CATLG,DELETE),
//            SPACE=(TRK,(1,1)),
//            DCB=(RECFM=FB,LRECL=80,BLKSIZE=27920)
//SYSIN    DD *
  GENERATE MAXNAME=2,MAXFLDS=5
  RECORD TYPE=1,
         FIELD=(1,1,CH,VALUE='H'),
         FIELD=(2,30,CH,VALUE='EMPLOYEE SALARY REPORT 2024    ')
  RECORD TYPE=2,
         FIELD=(1,1,CH,VALUE='D'),
         FIELD=(2,10,CH),              /* Name from input */
         FIELD=(12,8,CH),             /* Birth date from input */
         FIELD=(20,8,CH),             /* Dept from input */
         FIELD=(28,8,CH)              /* Salary from input */
/*
```

und die dazu passende Groovy-Modernisierung:

```
mpr
    .withFileConfigurations(new FileConfigurationUtils()
        .withJobContext(jobContext)
        .systemOut("SYSPRINT")
        .output("*")
        .build()
        .bluesam("SYSUT1")
        .dataset("INPUT.EMPLOYEE.DATA")
        .disposition("SHR")
        .build()
        .bluesam("SYSUT2")
        .dataset("OUTPUT.EMPLOYEE.FILE")
        .disposition("NEW")
        .normalTermination("CATLG")
        .abnormalTermination("DELETE")
        .build()
        .fileSystem("SYSIN")
        .stream( """GENERATE MAXNAME=2,MAXFLDS=5
  RECORD TYPE=1,
         FIELD=(1,1,CH,VALUE='H'),
         FIELD=(2,30,CH,VALUE='EMPLOYEE SALARY REPORT 2024    ')
  RECORD TYPE=2,
         FIELD=(1,1,CH,VALUE='D'),
         FIELD=(2,10,CH),              /* Name from input */
         FIELD=(12,8,CH),             /* Birth date from input */
         FIELD=(20,8,CH),             /* Dept from input */
         FIELD=(28,8,CH)              /* Salary from input */""", getEncoding())
        .build()
        .getFileConfigurations())
    .withParameters(params)
    .runProgram("IEBGENER")
```

## IEFBR14
<a name="iefbr14"></a>

IEFBR14 ist ein „Nichts tun“ -Programm, das einfach mit dem Rückgabecode 0 (Null) zurückkehrt. Es wird hauptsächlich für die Zuordnung, Löschung oder Katalogverwaltung von Datensätzen mithilfe von DD-Anweisungen verwendet, ohne dass eine tatsächliche Datenverarbeitung durchgeführt wird.

### Parameters
<a name="iefbr14-parameters"></a>

Kein Argument

### Fehlerbehandlung
<a name="iefbr14-error"></a>

Setze immer den Fehlercode 0.

### Beispiel für die Verwendung
<a name="iefbr14-sample"></a>

Hier ist ein Groovy-Beispiel für die Verwendung des IEFBR14 Programms, das aus einer JCL-Modernisierung durch AWS-Transformation resultiert:

Der JCL-Code zum Erstellen eines neuen sequentiellen Datensatzes:

```
//STEP1    EXEC PGM=IEFBR14
//NEWSEQ   DD DSN=USER.NEW.SEQ.DATA,
//            DISP=(NEW,CATLG,DELETE),
//            SPACE=(TRK,(10,5)),
//            DCB=(RECFM=FB,LRECL=80,BLKSIZE=27920)
```

und die dazu passende Groovy-Modernisierung:

```
mpr
    .withFileConfigurations(new FileConfigurationUtils()
        .withJobContext(jobContext)
        .bluesam("NEWSEQ")
        .dataset("USER.NEW.SEQ.DATA")
        .disposition("NEW")
        .normalTermination("CATLG")
        .abnormalTermination("DELETE")
        .build()
        .getFileConfigurations())
    .withParameters(params)
    .runProgram("IEFBR14")
```

Der JCL-Code zum Löschen eines vorhandenen Datensatzes:

```
//STEP3    EXEC PGM=IEFBR14
//DELDD    DD DSN=USER.OLD.DATASET,
//            DISP=(OLD,DELETE,DELETE)
```

und die passende Groovy-Modernisierung:

```
mpr
    .withFileConfigurations(new FileConfigurationUtils()
        .withJobContext(jobContext)
        .bluesam("DELDD")
        .dataset("USER.OLD.DATASET")
        .disposition("OLD")
        .normalTermination("DELETE")
        .abnormalTermination("DELETE")
        .build()
        .getFileConfigurations())
    .withParameters(params)
    .runProgram("IEFBR14")
```

## JCLBCICS
<a name="jclbcics-utility"></a>

Dieses Programm verwaltet den Status von Datensätzen, es setzt enables/disables Datensätze auf der Grundlage der Konfiguration und unterstützt sowohl einzelne Dateien als auch Platzhaltermuster: Es ändert das STATUS-Feld in der JICS-Tabelle file\_table.

### Parameters
<a name="jclbcics-parameters"></a>

Kein Argument. Operationen werden durch ein `DatasetsConfiguration` Objekt übergeben, z.B.

```
mpr.withDatasetsConfiguration(new DatasetsConfiguration().close(<Dataset Name>)
```

### Kontext
<a name="jclbcics-context"></a>

Das Programmverhalten kann durch zwei Parameter konfiguriert werden:

In `application-utility-pgm.yml`:
+ `jclbcics.ddname.size`(Standard ist 8): Die Größe des Datensatznamens wird global konfiguriert. Wenn dieser Wert gesetzt ist und die Länge des Datensatznamens kleiner als dieser Wert ist, wird der Datensatzname gekürzt.

In einem einzelnen Schritt der Groovy-Datei, die das Programm aufruft
+ `JCLBCICS_OVERRIDDEN_SIZE`: Es überschreibt die Größe des globalen Datensatznamens:

```
TreeMap stepMapTransfo = [:]
Map stepParams = ["MapTransfo":stepMapTransfo]
stepParams["MapTransfo"]["JCLBCICS_OVERRIDDEN_SIZE"] = '6'
```

Wenn die angepasste Größe des DD-Namens (nach der Kürzung) kleiner als 8 ist, wird der DD-Name als Platzhalter betrachtet und die Funktion funktioniert für alle Datensätze, die mit diesem DD-Namen beginnen.

### Wichtigste Funktionen
<a name="jclbcics-features"></a>

Die unterstützten Operationen sind:
+ ÖFFNEN: Setzt Datensätze auf den Status AKTIVIERT
+ SCHLIESSEN: Setzt Datensätze auf den Status DEAKTIVIERT

Diese Operationen werden über die `DatasetsConfiguration` Builder-Klasse deklariert:

```
new DatasetsConfiguration().close(<DD name>).open(<DD name>)
```

DD-Name: Name des Datensatzes, Platzhalter \* wird akzeptiert, wenn die Größe des DD-Namens kleiner als die maximale DD-Namensgröße (8) ist.

### Fehlerbehandlung
<a name="jclbcics-error"></a>

Stellen Sie den Fehlercode 0 ein

### Beispiel für die Verwendung
<a name="jclbcics-sample"></a>

Hier ist ein Beispiel für die Verwendung des JCLBCICS-Programms mit Groovy:

es deaktiviert den Datensatz`UFOLJ3P`, es aktiviert alle Datensätze, die mit AX beginnen, es aktiviert alle Datensätze, die mit DX beginnen

```
import com.netfective.bluage.gapwalk.rt.call.MainProgramRunner
import com.netfective.bluage.gapwalk.rt.call.ProgramExecutionResult
import com.netfective.bluage.gapwalk.rt.io.support.DatasetsConfiguration

MainProgramRunner mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class)
def TreeMap stepMapTransfo = [:]
def Map stepParams = ['MapTransfo':stepMapTransfo]
stepParams['MapTransfo']['JCLBCICS_OVERRIDDEN_SIZE'] = '7'

ProgramExecutionResult res = mpr
.withDatasetsConfiguration(new DatasetsConfiguration().close("UFOLJ3P").open("AX*").open("DX"))
.withParameters(stepParams)
.runProgram("JCLBCICS")
```