call
Vom Hauptprogramm können gegebenenfalls Parameter an das aufgerufene Programm übergeben werden. Werden übergebene Daten vom aufgerufenen Programm geändert, wird der Speicherbereich, der für das aufrufende Programm verfügbar ist, ebenfalls geändert. Weitere Informationen zum Unterschied zwischen Hauptprogramm und aufgerufenen Programmen finden Sie im Abschnitt 'Programmabschnitt'.
- Bei Java™ handelt es sich um einen Aufruf für ein generiertes Java-Programm, das in derselben JVM ausgeführt wird.
- Bei z/OS batch handelt es sich um einen Aufruf für ein anderes COBOL-Programm auf demselben System.
- Bei CICS handelt es sich um einen Aufruf für ein anderes COBOL-Programm in derselben Region.
Das aufgerufene Programm wird entweder von EGL generiert oder es wird als extern definiert betrachtet. In der Beschreibung zur Eigenschaft isExternal unter der Überschrift 'Syntax' im vorliegenden Abschnitt wird erläutert, wie Sie angeben können, dass es sich bei einem Programm um ein extern definiertes Programm handelt.
Anzahl, Typ und Reihenfolge der Argumente, die Sie in einer Anweisung call übergeben, müssen mit Anzahl, Typ und Reihenfolge der Parameter übereinstimmen, die vom aufgerufenen Programm erwartet werden. Es gibt keine Begrenzung für die Anzahl der Parameter, die Sie in einem lokalen Aufruf übergeben können. Bei fernen Aufrufen sind Anzahl und Gesamtlänge der Parameter, die übergeben werden können, begrenzt. Alle Implementierungen für Fernaufrufe unterstützen die Übergabe von zumindest 30 Parametern mit einer Gesamtlänge unter 32 000 Byte. Erfordert Ihr Entwurf eine Übergabe von mehr als 30 Parameter oder mehr als 32 000 Byte pro Aufruf, müssen Sie einen Test mit allen erforderlichen Implementierungen durchführen, um sicherzustellen, dass alle Implementierungen den Umfang der zu übergebenden Daten unterstützen.
- Die Größe eines übergebenen Literals oder einer übergebenen Konstanten muss mit der Größe des empfangenden Parameters übereinstimmen.
- Ein numerisches Literal oder eine numerische Konstante kann nicht als Argument übergeben werden.
- Ein Literal oder eine Konstante, das/die ausschließlich Einzelbytezeichen enthält, kann an einen Parameter des Typs CHAR oder MBCHAR übergeben werden.
- Ein Literal oder eine Konstante, das/die ausschließlich Doppelbytezeichen enthält, kann nur an einen Parameter des Typs DBCHAR übergeben werden.
- Ein Literal oder eine Konstante, das/die eine Kombination von Einzelbytezeichen und Doppelbytezeichen enthält, kann an einen Parameter des Typs MBCHAR übergeben werden.
Weitere Angaben zur Verwendung der Anweisung call für den Serviceaufruf finden Sie im Abschnitt 'Anweisung 'call' und Rückruffunktionen für Servicezugriff codieren'.
Wenn Sie ein Programm aufrufen, das von VisualAge Generator migriert wurde, ist zu beachten, dass VisualAge Generator-Entwickler im Allgemeinen Variablentypen mit festgelegtem Text verwenden. Sie können den Typ der Zeichenliterale über die Eigenschaft textLiteralDefaultIsString steuern oder indem Sie einen Typ mit dem Literal angeben. Weitere Informationen zur Eigenschaft textLiteralDefaultIsString finden Sie in textLiteralDefaultIsString, weitere Informationen zu Literalen in Literale.
Syntax

- Programmname
- Der Name des aufgerufenen Programms. Das Programm wird entweder von EGL generiert oder es wird als extern definiert betrachtet. Bei vielen Programmnamen, z. B. UNIX-Programmnamen oder den Namen von in Java geschriebenen Programmen, ist die Groß-/Kleinschreibung zu beachten. Bei den Programmnamen im EGL-Debugger ist dies nicht der Fall. Bei dem Namen kann es sich um eine direkte Abschnittsreferenz ohne Anführungszeichen, eine in Anführungszeichen gesetzte Literalzeichenfolge oder einen Variablen- oder Konstantennamen handeln.
- Argument
- Eine durch Kommata unterteilte Folge von Wertreferenzen. Bei einem Argument kann es sich um eine Basiselementvariable, ein Formular, einen Datensatz, eine Feldgruppe mit Basiselementtypen, eine Feldgruppe mit Datensätzen, ein nicht numerisches Literal oder eine nicht numerische Konstante handeln. Kann EGL zur Generierungszeit auf das aufgerufene Programm zugreifen, kann es sich bei dem Argument um einen komplexeren Ausdruck mit einem Datum/Uhrzeittyp, einem numerischen Typ oder einem Texttyp handeln. Felder des Typs 'ANY', 'ArrayDictionary', 'BLOB', 'CLOB', 'DataTable' oder 'Dictionary' können nicht übergeben werden. Ebensowenig können Feldgruppen dieser Typen oder Datensätze übergeben werden, die diese Typen enthalten. Bei lokalen Aufrufen ist die Anzahl der Argumente nicht begrenzt. Fernaufrufe unterstützen möglicherweise nur maximal 30 Argumente.
- Eigenschaften
- Die folgenden Eigenschaften werden unterstützt:
- isExternal
- Eine boolesche Eigenschaft:
- Der Standardwert NO gibt an, dass das Element callLink
im Verbindungsoptionsabschnitt festlegt, ob ein externes Programm aufgerufen wird. Eine
höhere Flexibilität kann erzielt werden, indem ein Wert in das Element
callLink eingefügt wird. Auf diese Weise ist die Einstellung nicht im
Code integriert.
Für lokale Aufrufe ist das Attribut pgmType des Elements callLink relevant, für Fernaufrufe und EJB-Aufrufe das Attribut remotePgmType.
- YES gibt an, dass ein Programm aufgerufen wird, das nicht mit EGL generiert wurde.
- Der Standardwert NO gibt an, dass das Element callLink
im Verbindungsoptionsabschnitt festlegt, ob ein externes Programm aufgerufen wird. Eine
höhere Flexibilität kann erzielt werden, indem ein Wert in das Element
callLink eingefügt wird. Auf diese Weise ist die Einstellung nicht im
Code integriert.
- isNoRefresh
- Eine boolesche Eigenschaft, die nur von Bedeutung ist, wenn das aufrufende Programm
Textformulare anzeigt und eine der folgenden Situationen vorliegt:
- Das aufgerufene Programm zeigt kein Textformular an.
- Das aufrufende Programm schreibt nach dem Aufruf ein Textformular für die Gesamtanzeige.
Für diese Eigenschaft sind zwei Werte verfügbar:
- Der Standardwert NO gibt an, dass das Element callLink im Verbindungsoptionsabschnitt festlegt, ob eine Anzeigeaktualisierung vermieden wird. Eine höhere Flexibilität kann erzielt werden, indem ein Wert im Element callLink (Attribut refreshScreen) definiert wird. Auf diese Weise ist die Entscheidung nicht im Code integriert.
- YES gibt an, dass eine automatische Anzeigenaktualisierung vermieden wird, wenn das aufgerufene Programm die Steuerung zurückgibt.
- linkageKey
- Eine Zeichenfolge, die das Element callLink in einem Verbindungsoptionsabschnitt referenziert. Die Zeichenfolge stimmt mit dem Attribut pgm in dem betreffenden Element überein. Weitere Angaben hierzu finden Sie im Abschnitt zu 'linkageKey'.
- timeout
- Eine ganze Zahl, die die maximal zulässige Länge des Zeitraums zwischen einem Serviceaufruf und der zugehörigen Antwort in Millisekunden angibt. Bei einer Anweisung call ist diese Eigenschaft nur für Rich-UI-Anwendungen vorgesehen und gibt die maximal zulässige Länge des Zeitraums zwischen dem Serviceaufruf des EGL Rich UI-Proxys auf dem Webserver und dem Empfang einer Antwort beim Proxy in Millisekunden an. Nähere Angaben hierzu finden Sie im Abschnitt 'Anweisung 'call' und Rückruffunktion für Servicezugriff codieren'.
Gültige Aufrufe
Die folgende Tabelle enthält die gültigen Aufrufe, die von mit EGL generiertem Code ausgehen und von diesem Code empfangen werden können.
| Aufrufendes Objekt | Aufgerufenes Objekt |
|---|---|
| Ein mit EGL generierter Java-Wrapper in einer Java-Klasse außerhalb von J2EE | Ein mit EGL generiertes Java-Programm (nicht J2EE) |
| Ein mit EGL generiertes Java-Programm in einem J2EE-Anwendungsclient | |
| Eine mit EGL generierte EJB-Session-Bean | |
| Ein IMS/VS-Programm (mit EGL generiert oder nicht) | |
| Eine IMS-Transaktion | |
| Ein CICS-Programm (mit EGL generiert oder nicht) | |
| Ein mit EGL generierter Java-Wrapper in einem J2EE-Anwendungsclient | Ein mit EGL generiertes Java-Programm (nicht J2EE) |
| Ein mit EGL generiertes Java-Programm in einem J2EE-Anwendungsclient | |
| Eine mit EGL generierte EJB-Session-Bean | |
| Ein IMS/VS-Programm (mit EGL generiert oder nicht) | |
| Eine IMS-Transaktion | |
| Ein CICS-Programm (mit EGL generiert oder nicht) | |
| Ein mit EGL generierter Java-Wrapper in einer J2EE-Webanwendung | Ein mit EGL generiertes Java-Programm (nicht J2EE) |
| Ein mit EGL generiertes Java-Programm in einem J2EE-Anwendungsclient | |
| Ein mit EGL generiertes Java-Programm in derselben J2EE-Webanwendung | |
| Eine mit EGL generierte EJB-Session-Bean | |
| Ein IMS/VS-Programm (mit EGL generiert oder nicht) | |
| Eine IMS-Transaktion | |
| Ein CICS-Programm (mit EGL generiert oder nicht) | |
| Ein mit EGL generiertes Java-Programm außerhalb von J2EE | Ein EGL-Java-Programm (nicht J2EE) |
| Ein EGL-Java-Programm in einem J2EE-Anwendungsclient | |
| Eine EGL-EJB-Session-Bean | |
| Ein Java-Programm unter IBM® i | |
| Ein COBOL-Programm unter IBM i | |
| Ein in C oder Cgeschriebenes Nicht-EGL-Programm | |
| Ein IMS/VS-Programm (mit EGL generiert oder nicht) | |
| Eine IMS-Transaktion | |
| Ein CICS-Programm (mit EGL generiert oder nicht) | |
| Ein EGL-Java-Programm in einem J2EE-Anwendungsclient | Ein EGL-Java-Programm (nicht J2EE) |
| Ein EGL-Java-Programm in einem J2EE-Anwendungsclient | |
| Eine EGL-EJB-Session-Bean | |
| Ein Java-Programm unter IBM i | |
| Ein COBOL-Programm unter IBM i | |
| Ein in C oder Cgeschriebenes Nicht-EGL-Programm | |
| Ein IMS/VS-Programm (mit EGL generiert oder nicht) | |
| Eine IMS-Transaktion | |
| Ein CICS-Programm (mit EGL generiert oder nicht) | |
| Ein EGL-Java-Programm in einer J2EE-Webanwendung | Ein EGL-Java-Programm (nicht J2EE) |
| Ein EGL-Java-Programm in einem J2EE-Anwendungsclient | |
| Ein EGL-Java-Programm in derselben J2EE-Webanwendung | |
| Ein Java-Programm unter IBM i | |
| Ein COBOL-Programm unter IBM i | |
| Ein in C oder Cgeschriebenes, nicht generiertes Programm | |
| Ein CICS-Programm (mit EGL generiert oder nicht) | |
| Eine EGL-EJB-Session-Bean | Ein EGL-Java-Programm (nicht J2EE) |
| Ein EGL-Java-Programm in einem J2EE-Anwendungsclient | |
| Eine EGL-EJB-Session-Bean | |
| Ein in C oder Cgeschriebenes, nicht generiertes Programm | |
| Ein CICS-Programm (mit EGL generiert oder nicht) | |
| Ein EGL-CICS-Programm | Ein CICS-Programm (mit EGL generiert oder nicht) |
| Ein EGL-z/OS batch-Programm | |
| Ein EGL-z/OS batch-Programm | Ein in einer beliebigen Programmiersprache (EGL eingeschlossen) geschriebenes Batchprogramm, das unter z/OS (außerhalb von CICS oder IMS) ausgeführt wird |
| Ein Nicht-EGL-CICS-Programm | Ein CICS-COBOL-Programm (mit EGL generiert oder nicht) |
| Ein in einer beliebigen Programmiersprache (EGL eingeschlossen) geschriebenes Batchprogramm, das unter z/OS (außerhalb von CICS oder IMS) ausgeführt wird | |
| Ein EGL-COBOL-Programm unter IBM i | Ein EGL-COBOL-Programm unter IBM i |
| Ein in einer beliebigen Programmiersprache geschriebenes Nicht-EGL-Programm, das unter IBM i ausgeführt wird | |
| Ein in einer beliebigen Programmiersprache geschriebenes Nicht-EGL-Programm, das unter IBM i ausgeführt wird | Ein EGL-COBOL-Programm unter IBM i |
| Ein in einer beliebigen Programmiersprache geschriebenes Nicht-EGL-Programm, das unter IBM i ausgeführt wird |
Verwenden Sie einen externen EGL-Typ oder eine Java-Zugriffsfunktion, wenn ein mit EGL generierter Java-Code von einem nicht mit EGL generierten Java-Code aus aufgerufen werden soll.
Beispiel
Das folgende Beispiel veranschaulicht ein aufgerufenes Programm, das die Zinsen bei einem Darlehen berechnet:
if (userRequest == "C")
try
call programA(myCustomer, interestRate);
onException(myEx InvocationException)
myErrorHandler(12);
end
end
Fehlerbedingungen
Die Anzahl der Bytes, die in den einzelnen Argumenten übergeben werden, muss mit der Anzahl der Bytes übereinstimmen, die vom empfangenden Parameter erwartet werden. Weitere Informationen hierzu finden Sie im Abschnitt 'Kompatibilität'.
Eine Ausnahmebedingung in einem über Fernzugriff aufgerufenen Programm wird nie direkt an das aufrufende Programm weitergegeben. Die Ausnahmebedingung wird stattdessen in eine Ausnahmebedingung des Typs 'InvocationException' eingeschlossen. Werden Ausnahmebedingungen von dem über Fernzugriff aufgerufenen Programm nicht bearbeitet, wird das aufgerufene Programm beendet und das aufrufende Programm löst eine Ausnahmebedingung des Typs 'InvocationException' aus.
Kompatibilität
| Plattform | Problem |
|---|---|
| Java-Generierung |
|
| COBOL-Generierung | Aufrufe von rekursiven Programmen sind nur für zSeries zulässig. Diese Unterstützung hängt davon ab, ob die Rekursion für COBOL möglich ist. Unter CICS ist dies für gewöhnlich kein Problem. Im Stapelbetrieb könnte dies jedoch zu Problemen führen. Rekursive Aufrufe müssen ermöglicht werden, indem der symbolische Parameter ALLOWRECURSIVEPROGRAMS mit YES definiert wird. Weitere Informationen finden Sie unter Vordefinierte symbolische Parameter, die vom Benutzer gesetzt werden können. |
| CICS | Entspricht die in den einzelnen Argumenten übergebene Byteanzahl nicht der vom CICS-Programm erwarteten Anzahl, führt dies bei der Laufzeitumgebung zu einer abnormalen Beendigung. |
| Rich-UI | Eine Version der Anweisung call wird unterstützt, jedoch nur für den Aufruf von Services. Nähere Angaben hierzu finden Sie im Abschnitt 'Anweisung 'call' und Rückruffunktion für Servicezugriff codieren'. |
- Ändern Sie die Einstellung für die Verbindungsdatei in remotePgmType=EXTERNALLYDEFINED
- Kopieren Sie das Member QVGNRNCL aus QEGL in Ihre Bibliothek