transfer
Mit der Anweisung 'transfer' wird die Steuerung von einem Hauptprogramm auf ein anderes übertragen und das Quellenprogramm beendet. Das Quellenprogramm kann optional einen Datensatz in den Eingabedatensatz des Zielprogramms übergeben. Die Anweisung 'transfer' ist in einem aufgerufenen Programm nicht gültig.
- transfer to transaction: Diese Anweisung kann wiederherstellbare Ressourcen festschreiben (Commit-Operation) oder rückgängig machen (Rollback-Operation).
- transfer to program: Diese Anweisung verursacht keinen Synchronisationspunkt, schließt keine Dateien oder Cursor und führt keine Commit- oder Rollback-Operationen für wiederherstellbare Ressourcen aus. Das Quellenprogramm und das Zielprogramm müssen sich in derselben Ausführungseinheit befinden.
Details zum Laufzeitverhalten finden Sie im Abschnitt 'Kompatibilität' in diesem Thema.
Das Zielprogramm wird entweder von EGL generiert oder als 'extern definiert' angesehen. Informationen dazu, wie ein Programm als 'extern definiert' angegeben wird, finden Sie in der Beschreibung der Eigenschaft 'isExternal' im nächsten Abschnitt.
Syntax

- Zielname
- Das Hauptprogramm oder die Haupttransaktion, das/die die Steuerung erhält. Der Name kann eine Abschnittsreferenz ohne Anführungszeichen, eine Literalzeichenfolge in Anführungszeichen, eine Konstante, die Variable 'sysVar.transferName' oder eine andere Variable sein.
- Datensatzname
- Ein Datensatz, der als Eingabedatensatz vom Zielprogramm empfangen wird. Der übergebene Datensatz kann einen beliebigen Typ aufweisen; die Länge und die Basiselementtypen (primitiven Typen) müssen jedoch mit dem Datensatz, der die Daten empfängt, kompatibel sein. Der Eingabedatensatz im Zielprogramm muss ein Basisdatensatz sein.
- Eigenschaften
- Die folgenden Eigenschaften werden unterstützt:
- isExternal
- Dies ist eine boolesche Eigenschaft mit folgenden möglichen Werten:
- NO, der Standardwert, bedeutet, dass ein Element im Verbindungsabschnitt angibt, ob ein externes Programm das Ziel der Übertragung ist.
Diese Einstellung wird empfohlen, da die Bereitstellung eines Werts
im Verbindungsabschnitt mehr Flexibilität bietet; die Einstellung wird nicht in den Code eingebettet.
Wenn Sie eine Anweisung vom Typ 'transfer to transaction' codieren, ist 'transferToTransaction' das Element im Verbindungsabschnitt, und das Attribut ist 'externallyDefined'. Wenn Sie eine Anweisung vom Typ 'transfer to program' codieren, ist 'transferToProgram' das Element im Verbindungsabschnitt, und das Attribut ist 'linkType'.
- YES bedeutet, dass ein nicht mit EGL generiertes Programm das Ziel der Übertragung ist.
- NO, der Standardwert, bedeutet, dass ein Element im Verbindungsabschnitt angibt, ob ein externes Programm das Ziel der Übertragung ist.
Diese Einstellung wird empfohlen, da die Bereitstellung eines Werts
im Verbindungsabschnitt mehr Flexibilität bietet; die Einstellung wird nicht in den Code eingebettet.
- linkageKey
- Eine Zeichenfolge, die das Element 'transferToProgram' oder 'transferToTransaction' in einem Verbindungsoptionsabschnitt referenziert. Die Zeichenfolge entspricht dem Attribut 'toPgm' in diesem Element. Weitere Informationen hierzu finden Sie unter 'linkageKey'.
Gültige Übertragungen
Die nächste Tabelle gibt die Übertragungen an, die auf bzw. von EGL-generiertem Code gültig sind.
| Übertragendes Objekt | Zielobjekt |
|---|---|
| Ein EGL-Java™-Programm außerhalb von J2EE | Ein EGL-Java-Programm (Nicht-J2EE) |
| Ein EGL-Java-Programm in einem J2EE-Anwendungsclient | Ein EGL-Java-Programm in demselben J2EE-Anwendungsclient |
| Ein EGL-Java-Programm in einer J2EE-Webanwendung | Ein EGL-Java-Programm in derselben J2EE-Webanwendung |
| Ein EGL-CICS-COBOL-Programm | Ein EGL-CICS-COBOL-Programm |
| Ein in einer beliebigen Sprache geschriebenes und unter CICS ausgeführtes Nicht-EGL-Programm | |
| Ein EGL-z/OS Batch-Programm | Ein EGL-z/OS Batch-Programm |
| Ein in einer beliebigen Sprache geschriebenes und außerhalb von CICS unter z/OS ausgeführtes Nicht-EGL-Batch-Programm | |
| Ein Nicht-EGL-CICS-Programm in einer bestimmten Transaktion | Ein EGL-CICS-COBOL-Programm in derselben Transaktion |
| Ein Nicht-EGL-CICS-COBOL-Programm in derselben Transaktion | |
| Eine in einer beliebigen Sprache geschriebene CICS-Transaktion | Eine in einer beliebigen Sprache geschriebene CICS-Transaktion |
| Ein mit EGL generiertes IMS/VS-Programm in einer bestimmten Transaktion | Ein mit EGL generiertes IMS/VS-Programm in derselben Transaktion |
| Eine in einer beliebigen Sprache geschriebene IMS-Transaktion | Eine in einer beliebigen Sprache geschriebene IMS-Transaktion |
| Ein EGL-Programm unter IBM® i | Ein EGL-COBOL-Programm unter IBM i |
| Ein in einer beliebigen Sprache geschriebenes und unter IBM i ausgeführtes Nicht-EGL-Programm | |
| Ein in einer beliebigen Sprache geschriebenes und unter IBM i ausgeführtes Nicht-EGL-Programm | Ein EGL-COBOL-Programm unter IBM i |
| Ein in einer beliebigen Sprache geschriebenes und unter IBM i ausgeführtes Nicht-EGL-Programm |
Um eine Übertragung von mit EGL generiertem Java-Code auf nicht mit EGL generierten Java-Code durchzuführen, können Sie einen der folgenden Mechanismen verwenden: einen externen EGL-Typ, eine Java-Zugriffsfunktion oder 'vgLib.startTransaction'.
EGL unterstützt die Verwendung eines verzögerten Switch, sodass eine Transaktion ein Formular anzeigt und eine andere Transaktion aufgerufen wird, wenn der Benutzer dieses Formular übergibt. Details finden Sie unter 'show'.
Beispiel
transfer to program com.CompanyB.CustomerPackage.processCustomer;
Kompatibilität
| Plattform | Problem |
|---|---|
| Stapelumgebungen (z/OS-Haupt-Batch-Programm, IMS BMP oder Java-Haupttextprogramm oder -Haupt-Batch-Programm) | Die Anweisung 'transfer to transaction' startet ein Programm in derselben Ausführungseinheit. Das Verhalten vor
der Übertragung hängt von der Einstellung der Builddeskriptoroption 'synchOnTrxTransfer' ab:
Übertragungen zwischen einem z/OS Batch-Programm und einem IMS BMP-Programm werden nicht unterstützt. EGL verwendet das Betriebssystemmakro XCTL, um eine Übertragung von einem IMS BMP-Programm auf ein nicht mit EGL oder VisualAge Generator generiertes Programm auszuführen. |
| CICS für z/OS | Die Anweisung 'transfer to program' verursacht keinen Synchronisationspunkt, sofern kein
Programmspezifikationsblock (PSB) terminiert ist, wenn die Übertragung stattfindet und eine der folgenden Bedingungen erfüllt ist:
EGL implementiert die Anweisung 'transfer to program' mit dem CICS-Befehl XCTL und verwendet die Option COMMAREA dieses Befehls zwecks Übergabe des Datensatzes. Die Daten beginnen im ersten Byte des gemeinsamen CICS-Bereichs (COMMAREA), und die maximale Datensatzlänge beträgt 32763. Die Anweisung 'transfer to transaction' schreibt wiederherstellbare Ressource fest, schließt Dateien und Cursor und startet eine neue Transaktion. Der Zielname ist in diesem Fall eine CICS-Transaktions-ID. EGL implementiert die Anweisung mit dem CICS-Befehl START und verwendet die Option COMMAREA dieses Befehls zwecks Übergabe des Datensatzes. Die Datensatzdaten beginnen im ersten Byte des gemeinsamen CICS-Bereichs (COMMAREA), und die maximale Datensatzlänge beträgt 32763. |
| IMS BMP | Siehe Zeile 'Stapelumgebungen'. |
| IMS/VS |
Die Anweisung 'transfer to transaction' schreibt wiederherstellbare Ressource fest, schließt Dateien und Cursor und startet eine neue Transaktion. |
| Java | Mithilfe der Elemente 'transferToProgram' und 'transferToTransaction' des Verbindungsoptionsabschnitts kann der Paketname für das empfangende Programm bereitgestellt werden, wenn der Name nicht über import-Anweisungen oder explizit über Codepaketnamen bereitgestellt wird. Übertragungen auf nicht mit EGL generierte Programme werden nicht unterstützt. |
| Rich UI | Die Anweisung 'transfer' wird nicht unterstützt. |
| z/OS Batch | Siehe Zeile 'Stapelumgebungen'. |