Mit der Anweisung "transfer to program" kann ein optionaler Datensatz angegeben werden. Die Anweisung "transfer to program" setzt dieselbe CICS-Transaktion fort. In den folgenden Abschnitten wird detailliert erläutert, wie die Anweisung "transfer to program" in der CICS-Umgebung funktioniert.
EXEC CICS XCTL('progname') COMMAREA(record)
LENGTH(length of record)
Das EGL-Programm überträgt die Steuerung sofort zum Nicht-EGL-Zielprogramm, indem der CICS-Befehl XCTL an den Programmnamen ausgegeben wird, der in der Anweisung "transfer to program" angegeben ist. Der Datensatz, wenn angegeben, wird an den Kommunikationsbereich (COMMAREA) übergeben. Es tritt ein CICS SYNCPOINT für die Anweisung "transfer to program" auf, wenn ein PSB terminiert ist.
Die Anweisung "transfer to program" von einem EGL-Programm zu einem Nicht-EGL-Programm wird auf dieselbe Art und Weise implementiert wie die Übertragung von einem EGL-Programm zum anderen. Sie müssen entweder "isExternal = YES" für die Anweisung "transfer to program" angeben oder "fromPgm", "toPgm" und "linkType = EXTERNALLYDEFINED" im Element "transferToProgram" im Verbindungsoptionsabschnitt während der Generierung angeben. Die Eigenschaft "isExternal" oder der Linktyp "EXTERNALLYDEFINED" geben an, dass alle Ressourcen, die von Rational COBOL Runtime für zSeries zugeordnet wurden, freigegeben wurden. Das Nicht-EGL-Programm empfängt Daten im Kommunikationsbereich (COMMAREA).
Das Ursprungsprogramm gibt den CICS-Befehl XCTL aus, um eine Übertragung zum EGL-Zielprogramm durchzuführen. Der Datensatz kann übergeben werden und wird verwendet, um den Datensatz zu initialisieren, der von der Eigenschaft "inputRecord" des EGL-Programms identifiziert wurde.
EXEC CICS XCTL ('progname') COMMAREA(record)
LENGTH (length of record)
Wenn das Zielprogramm segmentiert ist, stellen Sie sicher, dass vor der Ausgabe der Anweisung "converse" durch das Zielprogramm die "sysVar.transactionID" auf einen Transaktionscode, der dem Zielprogramm zugeordnet ist, im CICS-Eintrag TRANSACTION festgelegt ist. Wenn die Eingabe vom Terminal empfangen wird, verursacht anderenfalls der Standardwert in "sysVar.transactionID" (der aktuelle Transaktionscode) einen Neustart des Nicht-EGL-Programms anstelle des EGL-Zielprogramms.
Mit der Anweisung "transfer to transaction" kann ein optionaler Datensatz angegeben werden. Die Anweisung "transfer to transaction" ist die Ursache dafür, dass eine neue CICS-Transaktion aufgerufen wird. Wiederherstellbare Ressourcen werden als Teil des Übertragungsprozesses festgeschrieben. Die neue Transaktion wird terminiert, sobald die erste Transaktion endet. In den folgenden Abschnitten wird detailliert erläutert, wie die Anweisung "transfer to transaction" in der CICS-Umgebung funktioniert.
In den folgenden Abschnitten werden die Unterschiede in der Anweisung "transfer to transaction" beschrieben, die je nach dem Wert auftreten, die Sie für die Erstellungsdeskriptoroption "genReturnImmediate" angeben.
Wenn Sie die Erstellungsdeskriptoroption "genReturnImmediate" auf NO festgelegt haben, gibt das Ursprungsprogramm den Befehl EXEC CICS START für die Zieltransaktion aus. Wenn ein Datensatz in der Anweisung "transfer to transaction" angegeben wurde, wird der Datensatz als FROM-Daten im Befehl EXEC CICS START übergeben. Anderenfalls werden die Parameter FROM und LENGTH nicht verwendet.
EXEC CICS START TRANSID('transid') FROM(record)
LENGTH(length of record)
TERMID(current-terminal)
EGL schließt die Option TERMID des CICS-Befehls START immer ein, wenn "transfer to transaction" von einem textUI-Hauptprogramm ausgegeben wird.
Die Transaktion wird erst aufgerufen, wenn sich das Terminal im Status TRANSCEIVE in der CICS-Terminalsteuertabelle (TCT) befindet.Der Befehl START bezieht sich auf eine CICS-Transaktions-ID mit maximal 4 Zeichen. CICS startet die neue CICS-Transaktion auf demselben Terminal wie das Ursprungsprogramm, wenn sich das Terminal zurzeit nicht im Status TRANSACTION befindet.
Die gestartete Transaktion kann ein Nicht-EGL-Programm oder ein EGL-Programm starten, das als textUI-Hauptprogramm definiert wurde. Nach dem Starten der neuen Transaktion wird das Programm, das die Anweisung "transfer to transaction" ausgibt, beendet.
EXEC CICS RETURN TRANSID('transid') COMMAREA(name of COMMAREA)
LENGTH(length of COMMAREA)
IMMEDIATE
Die Anweisung "transfer to transaction" von einem EGL-Programm zu einem Nicht-EGL-Programm wird je nach Erstellungsdeskriptoroption "genReturnImmediate" implementiert. Sie müssen entweder "isExternal = YES" für die Anweisung "transfer to transaction" angeben oder "toPgm" und "externallyDefined = YES" im Element "transferToTransaction im Verbindungsoptionsabschnitt während der Generierung angeben. Sie können die Option "isExternal" oder "externallyDefined" verwenden, um eine Dokumentation, d. h. eine Übertragung zu einem Nicht-EGL-Programm, bereitzustellen. Da mit "transfer to transaction" eine neue CICS-Transaktion gestartet wird, tritt ein CICS SYNCPOINT als Ergebnis der Anweisung "transfer" auf.
EXEC CICS RETRIEVE INTO(myWorkingStorageArea)
LENGTH(workLength)
Stellen Sie sicher, dass die Länge von "myWorkingStorageArea" in "workLength" platziert wird, bevor der Befehl RETRIEVE ausgeführt wird. Wenn die Erstellungsdeskriptoroption "genReturnImmediate" auf YES festgelegt ist, wird die Anweisung "transfer to transaction" als EXEC CICS RETURN IMMEDIATE implementiert. Die ersten zehn Byte des COMMAREA, die vom Zielprogramm empfangen werden, sind binäre Nullen. Wenn ein Datensatz in der Anweisung "transfer to transaction" angegeben wurde, wird der Datensatz im COMMAREA ab dem elften Byte gefunden.
Das Programm kann den CICS-Befehl START für die CICS-Transaktions-ID ausgeben, die einem EGL-Programm zugeordnet ist. Das Terminal muss in der Option TERMID des CICS-Befehls START angegeben werden, wenn ein textUI-Hauptprogramm gestartet wird. Die Transaktion wird erst aufgerufen, wenn sich das Terminal im Status TRANSCEIVE in der CICS-Terminalsteuertabelle (TCT) befindet. Der Datensatz kann mit der Option FROM des Befehls START übergeben werden. Wenn ein Datensatz übergeben wird, wird dieser verwendet, um den Datensatz zu initialisieren, der von der Eigenschaft "inputRecord" des EGL-Programms identifiziert wurde. Das EGL-Zielprogramm kann ein Formular in seiner Eigenschaft "inputForm" angeben, das automatisch angezeigt wird, sobald das Programm geladen wird.
EXEC CICS START TRANSID('transid') FROM(record)
LENGTH(length of record)
TERMID(current-terminal)
Wenn das Ursprungsprogramm den Befehl EXEC CICS START verwendet, können Sie die Erstellungsdeskriptoroption "genReturnImmediate" entweder auf YES oder NO festlegen, wenn Sie das Zielprogramm generieren.Wenn das EGL-Programm mit der auf YES festgelegten Erstellungsdeskriptoroption "genReturnImmediate" generiert wurde, gibt das Ursprungsprogramm (Nicht-EGL) den CICS-Befehl RETURN IMMEDIATE für die CICS-Transaktion aus. Der Datensatz kann an den COMMAREA übergeben werden und muss ab dem elften Byte starten. Die ersten zehn Byte müssen binäre Nullen sein. Wenn ein Datensatz übergeben wird, wird dieser verwendet, um den Datensatz zu initialisieren, der von der Eigenschaft "inputRecord" des EGL-Programms identifiziert wurde. Das EGL-Zielprogramm kann ein Formular in seiner Eigenschaft "inputForm" angeben, das automatisch angezeigt wird, sobald das Programm geladen wird.
EXEC CICS RETURN TRANSID('transid')
COMMAREA(10 bytes of low-values + record)
LENGTH(10 + length of record)
IMMEDIATE
Wenn Sie den CICS-Befehl RETURN IMMEDIATE für die Übertragung an ein EGL-Programm verwenden, müssen Sie die Erstellungsdeskriptoroption "genReturnImmediate" auf YES festlegen, wenn das zu startende EGL-Programm generiert wird.Wenn Sie einen Formularnamen in einer Steuerungsübertragung angeben möchten, müssen Sie die Anweisung "show" verwenden. Wenn Sie einen Formularnamen mit der Anweisung "show" mit der Klausel "returning" angeben, zeigt das Ursprungsprogramm das Formular an und kehrt zu CICS zurück. Der CICS-Befehl RETURN gibt die Zieltransaktions-ID von der Anweisung "show" als nächste zu terminierende Transaktion an, wenn der Programmbenutzer auf dem Bildschirm antwortet. Die Zieltransaktion muss einem EGL-Programm zugeordnet sein. Das Zielprogramm muss ein Formular besitzen, das in der Eigenschaft "inputForm" angegeben ist. Dieses Formular muss dem Formular entsprechen, das in der Anweisung "show" angegeben ist. Die Zieltransaktion empfängt die Steuerung, nachdem der Benutzer auf einen Ereignisschlüssel gedrückt hat.
Wenn ein Datensatz in der Anweisung "show" angegeben ist, wird der Datensatz im COMMAREA von der Zieltransaktion empfangen und dazu verwendet, den von der Eigenschaft "inputRecord" des Zielprogramms angegebenen Datensatz zu initialisieren.
Sie können keine Übertragung zu einem Nicht-EGL-Programm mit der Anweisung "show" durchführen.
Sie können mit der EGL-Systemfunktion "vgLib.startTransaction()" eine asynchrone Transaktion starten. Sie können das Programm, das für die asynchrone Transaktion gestartet wird, entweder in EGL oder Nicht-EGL schreiben. Sie können außerdem ein Nicht-EGL-Programm schreiben, um ein EGL-Programm asynchron zu starten. In den folgenden Abschnitten werden die Verfahren dazu beschrieben.
vgLib.startTransaction(requestRecord, prID, termID);
Das Standardverhalten lautet wie folgt: Es wird ein Programm gestartet, das sich in derselben CICS-Region befindet. Sie können jedoch eine andere Region angeben, indem Sie das Element "asynchLink" in dem Verbindungsoptionsabschnitt definieren, der beim Generieren des Programms, das die Systemfunktion "vgLib.startTransaction()" aufruft, verwendet wird. Die Parameter "prID" und "termID" werden ignoriert, wenn die Zieltransaktion auf einem fernen System gestartet wird.
myCHAR = x"00000000";
EXEC CICS START ('transid') FROM(workRecord) LENGTH(length of workRecord)
TERMID(destTermid)
RTERMID(asyncPrintDest)
Das gestartete EGL-Programm muss ein Hauptbasisprogramm sein. Mit "workRecord" wird der Datensatz initialisiert, der von der Eigenschaft "inputRecord" des EGL-Programms angegeben wurde.
Nicht-EGL-Programme, die mit der Systemfunktion "vgLib.startTransaction()" gestartet wurden, müssen immer die Option RTERMID im CICS-Befehl RETRIEVE einschließen, der zum Abrufen des übergebenen Datensatzes verwendet wird, auch wenn der Wert nur aus Nullen besteht.
EXEC CICS RETRIEVE INTO (workRecord) LENGTH(length of workRecord)
RTERMID(userRtermid)