Verwenden Sie Programmspezifikationsblöcke (PSBs) und Programmkommunikationsblöcke (PCBs), um die logischen Strukturen in einem für COBOL generierten Programm zu beschreiben.
In EGL werden PSBs mit dem Stereotyp 'PSBRecord' dargestellt. Wenn Sie einen Datensatzabschnitt mit diesem Stereotyp anpassen, dann deklarieren Sie (wie bei anderen Datensatzabschnitten auch) anschließend eine Variable auf Basis der PSB-Datensatzdefinition. Darüber hinaus umfasst EGL vier Typen von PCB-Datensatzdefinitionen. Mithilfe von PCB-Datensatzdefinitionen deklarieren Sie PCB-Datensatzvariablen innerhalb der PSB-Datensatzdefinition.
Sie müssen auch die tatsächlichen PSBs und PCBs in Ihrer COBOL-Umgebung erstellen. Die Informationen in diesen PSBs und PCBs müssen mit den Informationen in Ihren EGL-PSBs und -PCBs übereinstimmen.
Jeder PCB-Datensatz basiert auf einer der vordefinierten PCB-Datensatzdefinitionen, die von EGL bereitgestellt werden. Siehe PCB-Datensatz - Stereotypen.
Auf bestimmten Plattformen müssen Sie einen anfänglichen Eingabe-/Ausgabe-PCB und mindestens einen Datenfernverarbeitungs-PCB deklarieren. Weitere Informationen finden Sie unter 'Kompatibilität' in diesem Thema. Wenn Sie diese PCBs im EGL-PSB-Datensatz deklarieren und die Laufzeitumgebung die PCBs nicht unterstützt, dann werden die zugehörigen EGL-PCBs nicht in den generierten COBOL-Code eingeschlossen.
callInterface = DLICallInterfaceKind.CBLTDLI
Mit dieser Zuordnung wird die Anzahl der PCBs in DL/I-Aufrufen entsprechend angepasst, um der fehlenden CICS-Unterstützung für Ein-/Ausgabe- und Datenfernverarbeitungs-PCBs Rechnung zu tragen.
ELAALT PCB TYPE=TP,MODIFY=YES
PCB TYPE=TP,MODIFY=YES,EXPRESS=YES,PCBNAME=ELAEXP
ELAPCB LABEL=ELAWORK
In diesem Fall brauchen Sie die PCB-Datensätze nicht in Ihren PSB-Datensatzabschnitt einzuschließen.
PCB TYPE=TP,MODIFY=YES,PCBNAME=MYALTPCB
PCB TYPE=TP,MODIFY=YES,EXPRESS=YES,PCBNAME=MYEXPPCB
ELAPCB LABEL=MYWORKDB
Record MYPSB type PSBRecordPart
ELAALT ALT_PCBRecord {@PCB {pcbType = PCBKind.TP, PCBName = "MYALTPCB"}};
ELAEXP ALT_PCBRecord {@PCB {pcbType = PCBKind.TP, PCBName = "MYEXPPCB"}};
ELAWORK DB_PCBRecord {@PCB {pcbType = PCBKind.DB, PCBName = "MYWORKDB"}};
end
Wenn das Eigenschaftsfeld 'callInterface' auf AIBTDLI gesetzt ist, müssen Sie nur diejenigen PCB-Datensätze deklarieren, die in Ihrem Programm verwendet werden, sowie alle diejenigen erforderlichen PCBs, deren Laufzeitname von dem für EGL erforderlichen Namen abweicht. Diese Regel gilt für Hauptprogramme und aufgerufene Programme.
Wenn Sie das Eigenschaftsfeld 'callInterface' auf CBLTDLI setzen, erfolgt der Zugriff auf einen bestimmten Laufzeit-PCB nach Adresse und nicht nach Name.
Wenn das Zielsystem IMS/VS ist und Sie eine DL/I-Datenbank als EGL-Arbeitsdatenbank verwenden, brauchen Sie die Informationen zur Datenbankhierarchie nicht in den EGL-PCB-Datensatz einzuschließen, und Ihr IMS-Systemprogrammierer sollte beim Definieren des Laufzeit-PSB das Makro ELAPCB verwenden. Akzeptieren Sie zur Generierungszeit den Standardwert für die Erstellungsdeskriptoroption 'workDBType', um anzugeben, dass es sich bei der Arbeitsdatenbank um eine DL/I-Datenbank handelt.
Wenn Sie die Eigenschaften 'pcbParms' und 'psbParm' in einem aufgerufenen Programm angeben, überschreiben die PCB-spezifischen Adressen in 'pcbParms' die entsprechenden Adressen in 'psbParm'; der übergebene PSB-Datensatz wird ignoriert.
Wenn Sie ELAALT als Namen für einen anderen Datensatz als den zweiten Datensatz verwenden oder wenn Sie ELAEXP als Namen für einen anderen Datensatz als den dritten Datensatz verwenden, hat der Name Vorrang; EGL geht davon aus, dass der benannte PCB-Datensatz auf den entsprechenden Laufzeit-PCB-Typ verweist.
| Plattform | Problem |
|---|---|
| Java™-Generierung | Der Stereotyp 'PSBRecord' wird nicht unterstützt. |
| CICS | Der Wert der PSB-Datensatzeigenschaft 'defaultPSBName' ist standardmäßig der Name des Laufzeit-PSB. EGL stellt diesen Namen in das Feld 'psbName' der Systemvariablen 'dliLib.psbData'; Sie können diesem Bibliotheksfeld jedoch auch einen anderen Wert zuordnen. Wenn Ihr Programm versucht, eine E/A-Operation für eine DL/I-Datenbank auszuführen, wird mit dem Wert in 'psbName' festgelegt, welcher Laufzeit-PSB verwendet wird. Die Systemvariable 'dliLib.psbData' hat ein
zweites Feld: psbRef. Der Anfangswert des Felds ist Null. Dieser Wert gibt an, dass kein PSB terminiert ist. Bei der
ersten DL/I-Ein-/Ausgabe gibt die EGL-Laufzeit einen Aufruf für PSB-Terminierung aus; dieser Aufruf führt die folgenden Aktionen aus:
Vermeiden Sie das Schreiben von Logik, die einen Wert zu 'dliLib.psbData.psbRef' zuordnet. Verwenden Sie während eines Aufrufs die Variable 'dliLib.psbData', um "den PSB zu übergeben" (d. h. um einen Namen und die zugehörige Adresse zu übergeben). Während einer
Übertragung hängt das genaue Laufzeitverhalten davon ab, wie die Übertragung erfolgt:
Datenbank-PCBs sind im Laufzeit-PSB gültig. |
| IMS BMP | Der PSB-Parameter in der Laufzeit-JCL (Jobsteuersprache) gibt den Laufzeit-PSB an, der im gesamten Jobschritt verwendet wird. Wenngleich Sie die JCL zur Implementierungszeit anpassen können, generiert EGL den Standardwert des PSB-Parameters in der Laufzeit-JCL durch Zuordnung des Werts der PSB-Datensatzeigenschaft 'defaultPSBName'. Bei IMS BMP müssen für EGL die folgenden
PCBs im Laufzeit-PSB vorhanden sein:
Datenbank- und GSAM-PCBs sind ebenfalls gültig. |
| IMS/VS | Anhand der Regeln der IMS-Systemdefinition wird sichergestellt, dass der Name des Hauptprogramms dem Namen des Laufzeit-PSB entspricht, der in der gesamten Transaktion verfügbar ist. Bei IMS/VS müssen für EGL die folgenden
PCBs im Laufzeit-PSB vorhanden sein:
Datenbank-PCBs sind ebenfalls gültig. Wenn der Wert der Erstellungsdeskriptoroption 'workDBType' DLI lautet (der Standardwert), setzen Sie einen Ihrer Laufzeit-Datenbank-PCBs für die EGL-Arbeitsdatenbank. Die EGL-Arbeitsdatenbank wird als ELAWORK entweder im Laufzeit-PSB oder als Name des EGL-PCB-Datensatzes angegeben. Die größtmögliche Flexibilität erzielen Sie, wenn Sie den letzten Datenbank-PCB in Ihrem Laufzeit-PSB als ELAWORK angeben. Wenn Sie sich später für einen Wechsel zu einer SQL-Arbeitsdatenbank entscheiden sollten, können Sie diesen PCB ohne großen Aufwand entfernen. |
| z/OS Batch | Der PSB-Parameter in der Laufzeit-JCL (Jobsteuersprache) gibt den Laufzeit-PSB an, der im gesamten Jobschritt verwendet wird. Wenngleich Sie die JCL zur Implementierungszeit anpassen können, generiert EGL den Standardwert des PSB-Parameters durch Zuordnung des Werts der PSB-Datensatzeigenschaft 'defaultPSBName'. Bei z/OS Batch muss für EGL der erste Laufzeit-PCB der Eingabe-/Ausgabe-PCB sein. Stellen Sie sicher, dass Ihr IMS-Systemprogrammierer beim Entwickeln des Jobs PSBGEN für CMPAT den Wert YES angibt. Darüber hinaus müssen für EGL zwei zusätzliche PCBs eines beliebigen Typs im Laufzeit-PSB vorhanden sein. Datenbank- und GSAM-PCBs sind gültig, ebenso alternative PSBs. Ihr Code kann die alternativen PSBs jedoch nicht verwenden; ihre Gültigkeit ermöglicht die Verwendung desselben Laufzeit-PSB für z/OS Batch und IMS BMP. |