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.

Die Anweisung 'transfer' hat zwei Varianten:

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

Syntaxdiagramm für die Anweisung 'transfer'
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.
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.

Tabelle 1. Gültige Übertragungen in EGL
Ü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

Im folgenden Beispiel überträgt das aktuelle Programm die Steuerung auf ein Programm namens processCustomer:
transfer to program com.CompanyB.CustomerPackage.processCustomer;

Kompatibilität

Tabelle 2. Hinweise zur Kompatibilität für die Anweisung 'transfer'
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 Erstellungsdeskriptoroption 'synchOnTrxTransfer' ab:
  • Wenn der Wert von 'synchOnTrxTransfer' NO ist (Standardwert), werden von der Anweisung 'transfer to transaction' keine Ressourcen geschlossen oder festgeschrieben, die für das aufgerufene Programm verfügbar sind.
  • Wenn der Wert von 'synchOnTrxTransfer' YES ist, schreibt die Anweisung 'transfer to transaction' wiederherstellbare Ressource fest und schließt Dateien sowie Cursor.

Ü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:
  • Das empfangende Programm ist mit einem anderen PSB oder keinem PSB definiert.
  • Die Anweisung 'transfer from program' gibt die Erstellungsdeskriptoroption 'synchOnPgmTransfer="YES"' an. Dies ist die Standardeinstellung.
  • Die Übertragung erfolgt auf ein Nicht-EGL-Programm (extern definiert).

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
  • Wenn das Startprogramm in einer Transaktion ein Hauptbasisprogramm ist, wird die Anweisung 'transfer to program' nicht unterstützt, wenn es sich bei dem Zielprogramm um ein Haupt-Text-UI-Programm handelt.
  • Wenn das Startprogramm in einer Transaktion ein Haupt-Text-UI-Programm ist, wird die Anweisung 'transfer to program' nicht unterstützt, wenn es sich bei dem Zielprogramm um ein Hauptbasisprogramm handelt, das auf den Eingabe-/Ausgabe-PCB (Programmkommunikationsblock) zugreift. Da die meisten Hauptbasisprogramme Daten aus dem Eingabe-/Ausgabe-PCB lesen, werden Übertragungen von einem Haupt-Text-UI-Programm auf ein Hauptbasisprogramm nur selten unterstützt.
  • Wenn Sie eine Anweisung 'transfer' verwenden, um die Steuerung von einem mit EGL generierten IMS/VS-Programm auf ein anderes mit EGL generiertes IMS/VS-Programm zu übertragen, muss der Interaktivitätsstatus beider Programme identisch sein: entweder 'conversational' (interaktiv) oder 'nonconversational' (nicht interaktiv). In beiden Programmen müssen für die folgenden Erstellungsdeskriptoroptionen dieselben Werte angegeben sein: 'spaSize', 'spaADF' und 'spaStatusBytePosition'.
  • Die Anweisung 'transfer to program' wird unter IMS/VS nur dann unterstützt, wenn das Zielprogramm von EGL oder VisualAge Generator generiert wurde.
  • Der Zielname in der Anweisung 'transfer to transaction' muss eine IMS-Transaktions-ID sein.

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.
JSF Die Anweisung 'transfer to transaction' ist für Seitenhandler nicht gültig. Verwenden Sie stattdessen die Anweisung 'forward'.
Rich UI Die Anweisung 'transfer' wird nicht unterstützt.
z/OS Batch Siehe Zeile 'Stapelumgebungen'.

Feedback