Programme in CICS-Umgebungen aufrufen
- localCall
- Ein Aufruf, der in derselben CICS-Region durchgeführt wird.
- remoteCall
- Ein Aufruf, der von einer CICS-Region zu einer anderen Region oder von einem generierten Java™-Programm aus zu einem generierten COBOL-Programm, das in CICS ausgeführt wird, durchgeführt wird.
- DYNAMIC
- Dynamischer COBOL-Standardaufruf.
- STATIC
- Statischer COBOL-Standardaufruf. Das aufgerufene Programm muss mit dem aufrufenden Programm bearbeitet werden.
- CICSLINK
- CICS-Befehl LINK command (Standardbefehl für
CICS-Programme). CICSLINK wird nur in folgenden Situationen unterstützt:
- Das Element "callLink" für das aufgerufene Programm gibt "remoteCall" an.
- Das Element "callLink" für das aufgerufene Programm gibt "parmForm = CHANNEL" an.
- Die Anweisung "call" gibt "isExternal = YES" oder das Element "callLink" für das aufgerufene Programm gibt "pgmType = EXTERNALLYDEFINED" an.
- In allen anderen Fällen (auch wenn CICSLINK der Standardbefehl ist) generiert EGL keinen CICS-Befehl LINK für "linkType = CICSLINK". Stattdessen generiert EGL einen dynamischen COBOL-Standardaufruf, derselbe Aufruf wie mit der Angabe von "linkType = DYNAMIC" für das Element "callLink" für das aufgerufene Programm.
- "localCall" mit der auf DYNAMIC oder CICSLINK festgelegten Eigenschaft "linkType". Sie können alternativ für "localCall" die CICS-Funktion für eine automatische Installation von Programmen verwenden.
- remoteCall
- COMMPTR
- Die Zeiger zu den Parametern werden an den COMMAREA übergeben (standardmäßig für CICS-Programme, wenn die Eigenschaft "type" den Wert "localCall" hat).
- COMMDATA
- Die Parameterdaten werden an den COMMAREA übergeben (standardmäßig für CICS-Programme, wenn die Eigenschaft "type" den Wert "remoteCall" hat).
- OSLINK
- Die Parameter werden mit der standardmäßigen COBOL-Parameterliste übergeben. Das aufgerufene Programm kann keine CICS-Anweisungen enthalten und kann kein EGL-Programm sein.
- CICSOSLINK
- Es wird eine standardmäßige COBOL-Parameterliste verwendet. Die ersten zwei Parameter sind der EXEC-Schnittstellenblock (EIB) und der COMMAREA, gefolgt von den Parametern der Anweisung "call".
- CHANNEL
- Die Parameter werden in Containern über einen Kanal übergeben. Die Namen der Container lauten EGL-PARM-1 bis EGL-PARM-n, wobei der Maximalwert n 30 ist. Es wird kein COMMAREA in das CHANNEL-Parameterformat übergeben.
| 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 beide Programme in CICS ausgeführt werden, legen Sie die Eigenschaft "type" auf "remoteCall" und die Eigenschaft "linkType" auf COMMDATA fest. Die Anweisung "call" wird als CICS-Befehl LINK generiert und Daten werden an den COMMAREA-Steuerblock (COMMDATA) übergeben.
- Wenn das aufrufende Programm ein generiertes Java-Programm ist und das aufgerufene Programm unter CICS ausgeführt wird, legen Sie die Eigenschaft "type" auf "remoteCall" und die Eigenschaft "linkType" auf COMMPTR oder COMMDATA fest, je nachdem, wie beim aufgerufenen Programm die Parameter empfangen werden sollen.
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".
Format aller Aufrufanweisungsparameter für CICS
In den folgenden Abschnitten werden die Parameterformate detailliert beschrieben, die für die Anweisung "call" in der CICS-Umgebung verwendet werden.
COMMAREA-Zeiger (COMMPTR) - Parameterformat
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 Builddeskriptoroption "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.
COMMAREA-Daten (COMMDATA) - Parameterformat
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.

OSLINK-Parameterformat
- Ein Nicht-EGL-Programm, das keine EXEC CICS-Befehle enthält.
- Ein EGL-Programm, das für die ZOSBATCH-Umgebung generiert wurde. In diesem Fall darf das aufgerufene EGL-Programm keine Ein-/Ausgaben durchführen. Außerdem müssen Sie 'linkType = DYNAMIC' im Eintrag 'callLink' für das aufgerufene EGL-Programm angeben.
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).

CICSOSLINK-Parameterformat
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).

CHANNEL-Parameterformat
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) |
Aufrufe von EGL-Programmen zu EGL-Programmen
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.
Aufrufe von EGL-Programmen zu Nicht-EGL-Programmen
- Legen Sie die Eigenschaft "isExternal" auf YES in der EGL-Anweisung "call" fest.
- Geben Sie "pgmType = EXTERNALLYDEFINED" im Eintrag "callLink" für das aufgerufene Programm an.
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.
Handhabung von Abbrüchen bei Aufrufen von EGL-Programmen zu Nicht-EGL-Programmen
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.
Beispiele für COMMPTR-Definitionen in Programmen
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.
Parameter von CICSLINK mit COMMPTR per Assemblersprache empfangen
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.
.
Parameter von CICSLINK mit COMMPTR per COBOL empfangen
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.
.
Aufrufe von Nicht-EGL-Programmen zu EGL-Programmen
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.