| COMMPTR | COMMDATA | OSLINK | CICSOSLINK | CHANNEL | |
|---|---|---|---|---|---|
| DYNAMIC | Gültig | Gültig | Gültig | Gültig | Nein |
| STATIC | Gültig | Gültig | Gültig | Gültig | Nein |
| CICSLINK | Gültig | Gültig | Nein | Nein | Gültig |
| REMOTE | Gültig, wenn der Aufruf von einem EGL-generierten Java-Programm erfolgt. Nicht gültig, wenn der Aufruf von einem CICS-Programm erfolgt. | Gültig | Nein | Nein | Gültig |
Weitere Informationen finden Sie in "Verbindungsoptionsabschnitt".
Wenn das aufrufende oder aufgerufene Programm ein PL/I-Programm ist, müssen Sie die Eigenschaft "linkType" auf CICSLINK festlegen. Wenn das aufgerufene Programm ein PL/I-Programm ist, müssen Sie entweder "isExternal = YES" in der Anweisung "call" oder "pgmType = EXTERNALLYDEFINED" im Element "callLink" für das aufgerufene Programm angeben. Wenn das aufrufende Programm ein PL/I-Programm ist, müssen Sie "linkType = CICSLINK" im Element "callLink" für das aufgerufene EGL-Programm angeben.
In den folgenden Abschnitten finden Sie weitere Details zur Verwendung von Parametern mit der Anweisung "call".
In den folgenden Abschnitten werden die Parameterformate detailliert beschrieben, die für die Anweisung "call" in der CICS-Umgebung verwendet werden.
Für das COMMPTR-Parameterformat werden die Zeiger in den CICS-Kommunikationsbereich (COMMAREA) übergeben. Der COMMAREA wird im COBOL-Arbeitsspeicherbereich des aufrufenden Programms generiert. Das höchstwertige Bit wird auf die letzte Parameteradresse im COMMAREA für das COMMPTR-Parameterformat festgelegt.
In der folgenden Abbildung wird das COMMPTR-Parameterformat dargestellt. Register 1 verweist auf eine Liste von Zeigern. Der erste Parameter ist die Adresse des EXEC-Schnittstellenblocks (EIB), gefolgt von der Adresse des COMMAREA. Die Zeiger zu den Parametern werden im COMMAREA übergeben.

Wenn Sie die Erstellungsdeskriptoroption "endCommarea" auf YES für das aufrufende Programm festlegen, fügt das aufrufende Programm das Vollwort x'FFFFFFFF' zum Ende der Parameterliste hinzu. Sie sollten "endCommarea" nur dann auf YES festlegen, wenn das aufgerufene Programm dieses Terminal-Vollwort benötigt, wie in einem Programm, das zuvor von einem CSP/AE-Programm (Cross System Product/Application Execution) aus aufgerufen wurde. Die Länge des COMMAREA bezieht die 4 Byte für dieses Vollwort nicht ein, es sei denn, "endCommarea" ist auf YES festgelegt. Unter bestimmten Bedingungen übergibt CICS eine Kopie des COMMAREA an das aufgerufene Programm.
Für das COMMDATA-Parameterformat werden die tatsächlichen Daten in einen einzelnen Puffer im CICS-Kommunikationsbereich (COMMAREA) übergeben. Der COMMAREA wird im Arbeitsspeicherbereich des aufrufenden Programms generiert. Alle Parameterwerte werden an den COMMAREA übertragen, wo die Werte ohne Ausrichtung auf Bytegrenze aufeinander folgen. Wenn der Datensatz variabler Länge übergeben wird, wird Platz für den Datensatz maximaler Länge wie für EGL definiert reserviert. Wenn der Datensatz variabler Länge mit festgelegter Eigenschaft "lengthItem" übergeben wird, muss der erforderliche Platz im festgelegten Abschnitt des Datensatzes definiert werden. Das aufgerufene Programm muss die Parameterwerte im COMMAREA in derselben Reihenfolge zurückgeben. Das aufrufende Programm verschiebt die zurückgegebenen Parameterwerte im COMMAREA zurück zu den Originalparametern.
In der folgenden Abbildung wird das COMMDATA-Parameterformat dargestellt. Register 1 verweist auf eine Liste von Zeigern. Der erste Parameter ist die Adresse des EIB, gefolgt von der Adresse des COMMAREA. Die tatsächlichen Parameterdaten werden an den COMMAREA übergeben.

In der folgenden Abbildung wird das OSLINK-Parameterformat dargestellt. Register 1 verweist auf eine Liste von Zeigern, die Adressen der Puffer für die Parameterdaten sind (eine Adresse pro Parameter).

Für das CICSOSLINK-Parameterformat werden EIB und COMMAREA immer als die ersten zwei Parameter übergeben, gefolgt von den Parametern, die in der Anweisung "call" angegeben sind. CICSOSLINK ist nur für die Verbindungstypen STATIC und DYNAMIC gültig.
In der folgenden Abbildung wird das CICSOSLINK-Parameterformat dargestellt. Register 1 verweist auf eine Liste von Zeigern. Der erste Parameter ist die Adresse des EIB, gefolgt von der Adresse des COMMAREA und von den Adressen der Puffer für die Parameterdaten (eine Adresse pro Parameter).

Für das CHANNEL-Parameterformat werden Container in einem Kanal übergeben. Ein Kanal ist eine Gruppe von Containern, die wie Parameter für die Übergabe von Daten zwischen CICS-Programmen fungieren. Es wird kein COMMAREA in das CHANNEL-Parameterformat übergeben.
Wenn ein EGL-generiertes Programm einen Kanal an ein aufgerufenes Programm übergibt, hat der Kanal denselben Namen wie das aufgerufene Programm. Wenn ein aufgerufenes EGL-Programm jedoch einen Kanal empfängt, verwendet das Programm einen CICS-API-Aufruf, um den Namen des übergebenen Kanals abzurufen.
Die Namen der Container lauten EGL-PARM-1 bis EGL-PARM-n, wobei der Maximalwert n 30 ist.
Beispiel: Wenn Sie drei Parameter vom Typ "INT", "Record" (33.000 Byte) und "EGL STRING" übergeben, bezieht der Kanal drei Container ein, wie in der folgenden Tabelle dargestellt:
| Containername | Wert in Container |
|---|---|
| EGL-PARM-1 | 4 Byte zur Darstellung von INT |
| EGL-PARM-2 | 33.000 Byte zur Darstellung des Datensatzes |
| EGL-PARM-3 | 4 Byte zur Darstellung des Zeigers zu STRING (das aufgerufene Programm muss EGL sein) |
Das aufgerufene Programm wird ausgeführt und gibt die Steuerung an das aufrufende Programm zurück, wenn das Programm beendet wird oder die Anweisung "exit program" auftritt. Es können bis zu 30 Parameter an eine "call"-Anweisung übergeben werden. Es tritt kein CICS SYNCPOINT als Ergebnis der Anweisung "call" auf. Die Eigenschaften "type", "linkType" und "parmForm" für ein aufgerufenes Programm müssen identisch sein, wenn sowohl das aufrufende als auch das aufgerufene Programm generiert werden. Wenn der Verbindungstyp oder das Parametertyp geändert werden, müssen das aufgerufene Programm und alle Programme, die es aufrufen, erneut generiert werden. Eine Beschreibung der Parameterformate, die für Aufrufe verwendet werden, finden Sie oben unter "Format aller Aufrufanweisungsparameter".
Sie können ein aufgerufenes Programm für z/OS Batch generieren sowie das Programm unter CICS verwenden. Damit der Aufruf unter CICS funktioniert, führen Sie die Mainframe-Erstellung wie im IBM® Rational COBOL Runtime Guide für zSeries, Kapitel 11, Abschnitt "CICS-Einrichtung zum Aufrufen von z/OS-Batchprogrammen in CICS" beschrieben durch.
Der Benutzerprogrammname muss auf CICS definiert sein und das Programm muss in der Ladebibliothek des Betriebssystems vorhanden sein. Anderenfalls tritt eine NOT FOUND-Bedingung auf. Das Programm muss auch gemäß der Programmierregeln auf CICS-Befehlsebene verknüpfungseditiert sein. Weitere Informationen finden Sie in der CICS-Anwendungsprogrammiererreferenz.
In CICS gibt es Überlegungen, wie Abbrüche gehandhabt werden, wenn ein EGL-Programm den Befehl COBOL CALL statt des CICS-Befehls LINK verwendet, um ein Nicht-EGL-COBOL-Programm aufzurufen. In dieser Situation inaktiviert die COBOL-Laufzeitumgebung die CICS-Abbruchhandhabung, die vom aufrufenden Programm für den Eintrag zum aufgerufenen Programm angefordert wurde. Das aufgerufene Programm sollte den Abbruchhandler für das EGL-Programm wiederherstellen, indem die Anweisung "CICS POP HANDLE" für den Eintrag zum aufgerufenen Programm und die Anweisung "CICS PUSH HANDLE" für die Beendigung des aufgerufenen Programms ausgegeben werden.
Wenn der Abbruchhandler nicht wiederhergestellt wird und das aufgerufene Programm abnormal beendet wird, wird keine normale Fehlerbereinigung für das EGL-Programm durchgeführt. Der Nutzungszähler der gemeinsam genutzten Tabelle wird nicht aktualisiert, wenn das Programm nicht erfolgreich beendet wird. Dies kann dazu führen, dass eine nicht benötigte Kopie der gemeinsam genutzten Tabelle im Speicher bleibt. Es werden keine Fehlermeldungen für Rational COBOL Runtime für zSeries vom Abbruchhandler ausgegeben.
Weitere Informationen zur Verwendung von COBOL-Aufrufen in der CICS-Umgebung finden Sie im Handbuch zur Anwendungsprogrammierung für Ihre CICS-Umgebung.
Wenn ein EGL-Programm CICSLINK und COMMPTR zum Übergeben von Parametern an ein Nicht-EGL-Programm verwendet, werden Zeiger zu den Parametern im CICS-COMMAREA übergeben. In den folgenden Abschnitten sind Beispiele enthalten, wie Nicht-EGL-Programme übergebene Parameter unter Verwendung von CICSLINK und COMMPTR empfangen können.
L PARMPTR,DFHEICAP Address parameter list
USING PARMAREA,PARMPTR
L PARM1PTR,PARM1A Address parameter 1
USING PARM1,PARM1PTR
L PARM2PTR,PARM2A Address parameter 2
USING PARM2,PARM2PTR
L PARM3PTR,PARM3A Address parameter 3
USING PARM3,PARM3PTR
.
. usw.
.
PARMAREA DSECT Define storage layout of parmlist
PARM1A DS F Passed pointer to parameter 1
PARM2A DS F Passed pointer to parameter 2
PARM3A DS F Passed pointer to parameter 3
PARM1 DSECT Define storage layout of passed parm
RECORD EQU * Parameter is a record
FLD1 DS L10 Fields in record structure
FLD2 DS L20 " "
FLD3 DS L200 " "
.
. usw.
.
PARM2 DSECT Define storage layout of passed parm
L7701 DS L5 Parameter is single data item level-77
PARM3 DSECT Define storage layout of passed parm
WORKSTOR EQU * Parameter is working storage
FLD5 DS L5 Fields in working storage
FLD6 DS L5 " "
.
. usw.
.
LINKAGE SECTION.
01 DFHCOMMAREA.
02 PARM1A USAGE IS POINTER.
02 PARM2A USAGE IS POINTER.
02 PARM3A USAGE IS POINTER.
01 PARM1.
02 RECORD.
03 FLD1 PIC X(10).
03 FLD2 PIC X(20).
03 FLD3 PIC X(200).
.
. usw.
.
01 PARM2.
02 L7701 PIC X(5).
01 PARM3.
02 WORKSTOR.
03 FLD5 PIC X(5).
03 FLD6 PIC X(5).
.
. usw.
.
PROCEDURE DIVISION.
SET ADDRESS OF PARM1 TO PARM1A
SET ADDRESS OF PARM2 TO PARM2A
SET ADDRESS OF PARM3 TO PARM3A
.
. usw.
.
Das EGL-Programm muss als aufgerufenes Programm definiert sein. Das aufgerufene Nicht-EGL-Programm ist dafür verantwortlich, die Parameter festzulegen, die im Verbindungsoptionsabschnitt für das aufgerufene Programm bei seiner Generierung angegeben wurden. Diagramme für die Verbindungen, die für verschiedene Parameterformate generiert werden, finden Sie in Format aller Aufrufanweisungsparameter für CICS.
Das Format der Variablen in der Parameterliste muss der Definition entsprechen, die für die vom aufgerufenen Programm empfangenen Parameter angegeben wurde. Wenn sie nicht identisch sind, sind die Ergebnisse nicht vorhersehbar.
EXEC CICS LINK
PROGRAM('MYAPPL') COMMAREA(record of pointers)
LENGTH(length of COMMAREA)
Wenn für "linkType"
DYNAMIC oder STATIC angegeben wurde, wird bei Beendigung des aufgerufenen EGL-Programms das COBOL-Sonderregister RETURN-CODE auf den Wert der EGL-Variable "sysVar.returnCode" festgelegt.
Dieser Rückgabecode, der in Register 15 gespeichert ist, kann vom aufrufenden Nicht-EGL-Programm getestet werden.