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'.
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.
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.

Für lokale Aufrufe ist das Attribut pgmType des Elements callLink relevant, für Fernaufrufe und EJB-Aufrufe das Attribut remotePgmType.
Für diese Eigenschaft sind zwei Werte verfügbar:
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 C++ geschriebenes 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 C++ geschriebenes 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 C++ geschriebenes, 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 C++ geschriebenes, 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.
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
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.
| Plattform | Problem |
|---|---|
| Java-Generierung |
|
| COBOL-Generierung | Rekursive Programmaufrufe 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'. |