EGL-Unterstützung für Laufzeit-PSBs und -PCBs

In diesem Kapitel geht es um Tasks, die in den folgenden Fällen durchgeführt werden müssen:

Passen Sie EGL-Programmelemente nach Bedarf an, um COBOL-Programme zu generieren, mit denen auf die Programmspezifikationsblöcke (PSBs) und Programmkommunikationsblöcke (PCBs) Ihres Unternehmens zugegriffen werden kann. Diese Blöcke werden Laufzeit-PSBs und Laufzeit-PCBs genannt.

Definieren Sie zuerst die DLISegment-Datensatzabschnitte, auf die in den Datenbank-PCB-Datensätzen (sofern vorhanden) referenziert wird. Die nächsten, primären Tasks lauten wie folgt:
  1. Definieren Sie einen PSB-Datensatzabschnitt. Dieser Abschnitt enthält die Gruppe von PCB-Datensätzen, die beim Zugreifen auf IMS-Nachrichtenwarteschlangen, DL/I-Datenbanken oder GSAM-Dateien verwendet werden.
  2. Machen Sie die PSB- und PCB-Informationen im Programm verfügbar:
    • Deklarieren Sie einen Datensatz, der auf dem PSB-Datensatzabschnitt basiert.
    • Legen Sie die Programmeigenschaft '@dli' im Eigenschaftsfeld 'psb' auf den Namen des PSB-Datensatzes fest. Weitere Informationen zur Syntax finden Sie im Kapitel SET-Werteblöcke.
Jeder PCB-Datensatz basiert auf einem der folgenden, vordefinierten PCB-Datensatzabschnitte:
IO_ PCBRecord
Wird zum Interagieren mit einem Eingabe-/Ausgabe-PCB verwendet. Dadurch werden Eingaben von einem Programm oder Terminal und (wenn die Eingabe von einem Terminal stammt) die Ausgabe zum selben Terminal ermöglicht. Mit dem Eingabe-/Ausgabe-PCB wird außerdem der Zugriff auf andere IMS-Funktionen ermöglicht, zum Beispiel das Setzen von Prüfpunkten und das Neustarten von Batchprogrammen.
ALT_PCBRecord
Wird zum Referenzieren von Datenfernverarbeitungs-PCBs außer Eingabe-/Ausgabe-PCBs verwendet. Mit diesem Datensatztyp wird Ihr Code zum Schreiben von Ausgaben in eine Nachrichtenwarteschlange ermöglicht, die entweder einer anderen Transaktion oder einer anderen Einheit als dem Terminal zugeordnet ist, das dem Eingabe-/Ausgabe-PCB zugeordnet ist. Der Laufzeit-PCB kann von einem der folgenden Typen sein:
  • Ein alternativer PCB; in diesem Fall wird die Nachricht nur an ihr Ziel übermittelt, wenn eine Festschreibung erfolgt.
  • Ein sofort wirksamer alternativer PCB; in diesem Fall wird die Nachricht an ihr Ziel unabhängig davon, ob eine Festschreibung oder ein Rollback erfolgt, an ihr Ziel übermittelt.
DB_PCBRecord
Wird zum Referenzieren eines Datenbank-PCBs verwendet, der eine DL/I-Datenbank darstellt, auf die von Ihrem Programm aus zugegriffen werden kann. Mit dem Laufzeitdatenbank-PCB werden die Daten, auf die zugegriffen werden kann, und der gültige Zugriffstyp angegeben.
GSAM_PCBRecord
Wird zum Referenzieren eines GSAM-PCBs verwendet, der verwendet wird, wenn ein z/OS Batch- oder ein IMS-BMP-Programm auf eine serielle Datei zugreift, die als DL/I-Datenbank nur für Root-Zugriff fungiert.
Die nächste Liste enthält Details zu den Laufzeit-PSBs in allen Zielsystemen.
CICS
Der Wert der PSB-Datensatzeigenschaft 'defaultPSBName' ist (standardmäßig) der Name des Laufzeit-PSBs. Dieser Name wird in EGL in das Feld 'psbName' der Systemvariablen 'dliLib.psbData' eingefügt, aber Sie können diesem Bibliothekenfeld auch einen anderen Wert zuweisen. Wenn in Ihrem Programm eine E/A-Operation für eine DL/I-Datenbank durchgeführt wird, wird durch den Wert in 'psbName' bestimmt, welcher Laufzeit-PSB verwendet wird.
Die Systemvariable 'dliLib.psbData' besitzt ein zweites Feld, nämlich 'psbRef'. Der Anfangswert des Feldes ist null. Dadurch wird angegeben, dass kein PSB geplant ist. Wenn die erste DL/I-Ein-/Ausgabe erfolgt, wird zur EGL-Laufzeit ein PSB-Planaufruf abgesetzt, der Folgendes bewirkt:
  • Der Wert in 'dliLib.psbData.psbName' wird zum Planen eines Laufzeit-PSBs verwendet.
  • 'dliLib.psbData.psbRef' wird auf eine Adresse festgelegt, mit der auf den PSB zugegriffen werden kann.
Anmerkung: Es sollten keine Logiken geschrieben werden, mit denen 'dliLib.psbData.psbRef' Werte zugewiesen werden.

Während eines Aufrufs können Sie die Variable 'dliLib.psbData' zum Übergeben des PSBs verwenden. Dabei werden ein Name und die dazugehörige Adresse übergeben.

Während der Übertragung hängen die Details des Laufzeitverhaltens davon ab, wie die Übertragung durchgeführt wird:
  • Wenn die Übertragung mithilfe einer SHOW-Anweisung mit einer RETURNING-Klausel oder mithilfe der Anweisung TRANSFER TO TRANSACTION erfolgt, wird der geplante PSB beendet, da während der Übertragung ein Festschreibungspunkt auftritt. Der PSB wird dann nicht an das Zielprogramm übergeben.
  • Wenn die Übertragung mithilfe der Anweisung TRANSFER TO PROGRAM erfolgt, hängt das Standardverhalten davon ab, ob ein PSB geplant ist:
    • Wenn kein PSB geplant ist, tritt kein Festschreibungspunkt auf.
    • Wenn ein PSB geplant ist, wird dieser PSB beendet, da während der Übertragung ein Festschreibungspunkt auftritt. Der PSB wir dann nicht an das Zielprogramm übergeben. In diesem Fall ist jedoch auch ein anderes Ergebnis möglich. Dabei besteht der Vorteil, dass der Verhaltensunterschied minimiert werden kann, wenn das übertragende Programm für CICS generiert wird, im Gegensatz dazu, wenn dieses Programm für IMS/VS generiert wird. Das alternative Ergebnis tritt ein, wenn die folgenden vier Bedingungen erfüllt sind:
      • Beim Zielsystem handelt es sich um z/OS CICS;
      • Das Zielprogramm wird in EGL generiert;
      • Die Erstellungsdeskriptoroption 'synchOnPgmTransfer' ist auf NO festgelegt;
      • Der im PSB-Datensatz des übertragenden Programms referenzierte PSB ist derselbe wie der im PSB-Datensatz des Zielprogramms referenzierte Standard-PSB.

      In diesem Fall tritt kein Festschreibungspunkt auf und in EGL wird der geplante PSB an das Zielprogramm übergeben.

      Anmerkung: Der Standard-PSB ist der Wert der Eigenschaft 'defaultPSBName', die im PSB-Datensatzabschnitt festgelegt ist, der die Basis des PSB-Datensatzes eines Programms darstellt. Der Standardwert dieser Eigenschaft ist der Name des Datensatzabschnitts. Beispiele für PSB-Datensätze finden Sie im Kapitel Stereotyp 'DLISegment'.

DB-PCBs sind im Laufzeit-PSB gültig.

IMS BMP
Durch den PSB-Parameter in der Laufzeit-JCL wird der während des Jobabschnitts verwendete Laufzeit-PSB angegeben. Sie können die JCL zwar zur Implementierungszeit anpassen, aber in EGL wird der Standard-PSB-Parameterwert in der Laufzeit-JCL generiert, indem der Wert der PSB-Datensatzeigenschaft 'defaultPSBName' zugewiesen wird.
In IMS-BMPs ist in EGL erforderlich, dass sich die folgenden PCBs im Laufzeit-PSB befinden:
  1. Der Eingabe-/Ausgabe-PCB an der Position null (erste Position). Stellen Sie sicher, dass CMPAT vom IMS-Systemprogrammierer beim Entwickeln des PSBGEN-Jobs auf YES gesetzt wird, auch wenn Sie ein stapelorientiertes BMP generieren.
  2. Ein alternativer PCB. Dieser befindet sich in der Regel an der zweiten Position.
  3. Ein sofort wirksamer alternativer PCB. Dieser befindet sich in der Regel an der dritten Position.

Datenbank- und GSAM-PCBs sind ebenfalls gültig.

IMS/VS
Durch die Regeln der IMS-Systemdefinition wird sichergestellt, dass der Name des Hauptprogramms der Name des Laufzeit-PSBs ist, der während der gesamten Transaktion verfügbar ist.
Für IMS/VS ist in EGL erforderlich, dass sich die folgenden PCBs im Laufzeit-PSB befinden:
  1. Der Eingabe-/Ausgabe-PCB an der Position null (erste Position). Der IMS-Systemprogrammierer kann CMPAT beim Entwickeln des PSBGEN-Jobs auf YES setzen, diese Aktion ist jedoch optional.
  2. Ein alternativer PCB. Dieser befindet sich in der Regel an der zweiten Position.
  3. Ein sofort wirksamer alternativer PCB. Dieser befindet sich in der Regel an der dritten Position.

DB-PCBs sind ebenfalls gültig.

Wenn der Wert der Erstellungsdeskriptoroption 'workDBType' 'DLI' lautet (das ist der Standardwert), legen Sie einen der Laufzeit-DB-PCBs für die EGL-Arbeitsdatenbank fest. Diese wird im Laufzeit-PSB entweder als ELAWORK angegeben oder als der Name des EGL-PCB-Datensatzes.
Anmerkung: Es empfiehlt sich, den letzten Datenbank-PCB in Ihrem Laufzeit-PSB als ELAWORK anzugeben, sodass Sie diesen PCB einfach entfernen können, wenn Sie zu einer SQL-Arbeitsdatenbank wechseln möchten.
z/OS Batch
Durch den PSB-Parameter in der Laufzeit-JCL wird der während des Jobabschnitts verwendete Laufzeit-PSB angegeben. Sie können die JCL zwar zur Implementierungszeit anpassen, aber in EGL wird der Standard-PSB-Parameterwert generiert, indem der Wert der PSB-Datensatzeigenschaft 'defaultPSBName' zugewiesen wird.

Für z/OS Batch ist in EGL erforderlich, dass der erste Laufzeit-PCB der Eingabe-/Ausgabe-PCB ist. Stellen Sie sicher, dass CMPAT vom IMS-Systemprogrammierer beim Entwickeln des PSBGEN-Jobs auf YES gesetzt wird.

In EGL müssen außerdem zwei weitere PCBs eines beliebigen Typs im Laufzeit-PSB vorhanden sein. Datenbank- und GSAM-PCBs sowie alternative PSBs sind ebenfalls gültig. In Ihrem Code dürfen jedoch keine alternativen PSBs verwendet werden. Wenn diese gültig sind, wird die Verwendung desselben Laufzeit-PSBs für z/OS Batch und IMS-BMPs erlaubt.

EGL lässt sich für ursprünglich zwei oder drei Ein-/Ausgabe- und Datenfernverarbeitungs-PCBs anpassen, wenn diese im PSB-Datensatz deklariert werden, sie sind jedoch nicht im Laufzeit-PSB vorhanden. Durch diese Anpassung können Sie dasselbe Programm über unterschiedliche Umgebungen hinweg generieren. In Bezug auf CICS zum Beispiel werden die ursprünglichen Ein-/Ausgabe- und alternativen PCB-Datensätze von der EGL-Laufzeit ignoriert, wenn sie in Ihrem Code vorhanden sind.

Anforderungen für den PSB-Datensatzabschnitt

Die Struktur Ihres PSB-Datensatzabschnitts hängt eng mit der Struktur Ihres Laufzeit-PSBs zusammen und ist zusammen mit zwei weiteren Aspekten relevant:
  • Das Zielsystem wirkt sich, wie bereits beschrieben, darauf aus, welche PCBs im PSB-Datensatzabschnitt erforderlich sind.
  • Der Wert der Programmeigenschaft '@dli' im Eigenschaftsfeld 'callInterface' (unabhängig davon, ob AIBTDLI oder CBLTDLI) beeinflusst auch die Anforderungen für Ihren PSB-Datensatzabschnitt.

Wenn 'callInterface' AIBTDLI ist

Wenn das Feld 'callInterface' auf AIBTDLI festgelegt (dies ist der Standardwert), erfolgt der Zugriff auf einen bestimmten Laufzeit-PCB anhand des PCB-Namens und die Struktur des PSB-Datensatzes in Ihrem Programm muss nicht die Struktur eines Laufzeit-PSBs wiedergeben. Die Laufzeit-PCBs müssen jedoch in EGL verfügbar sein:
  • Für IMS/VS, IMS-BMPs und z/OS Batch muss es sich beim ersten PCB im Laufzeit-PSB um einen Eingabe-/Ausgabe-PCB handeln. Für IMS wird immer der Name IOPCB als Name für den Eingabe-/Ausgabe-PCB verwendet;
  • Für IMS/VS und IMS-BMPs werden in EGL die folgenden Namen für die anderen erforderlichen PCBs verwendet:
    • ELAALT für den alternativen PCB
    • ELAEXP für den sofort wirksamen alternativen PCB
    • ELAWORK, wenn Sie eine DL/I-Datenbank als EGL-Arbeitsdatenbank in der IMS/VS-Umgebung verwenden. In diesem Fall müssen Sie die Datenbankhierarchieinformationen nicht in den EGL-PCB-Datensatz aufnehmen und Ihr IMS-Systemprogrammierer sollte, wie an anderer Stelle gezeigt, das Makro ELAPCB beim Definieren des Laufzeit-PSBs verwenden. (Geben Sie zur Generierungszeit an, dass es sich bei der Arbeitsdatenbank um eine DL/I-Datenbank handelt, indem Sie den Standardwert für die Erstellungsdeskriptoroption 'workDBType' akzeptieren.)
    Sie können die Namen für diese PCBs auf die folgenden Arten angeben:
    • Bitten Sie Ihren IMS-Systemprogrammierer, den in EGL erforderlichen PCB-Namen im PSBGEN-Job anzugeben, mit dem der Laufzeit-PSB erstellt wird. Im folgenden Beispiel wird eine Kennzeichnung verwendet, um den Namen für den alternativen PCB anzugeben und der Parameter PCBNAME wird eingefügt, um den Namen für den sofort wirksamen alternativen PCB und den Arbeitsdatenbank-PCB bereitzustellen:
      ELAALT   PCB    TYPE=TP,MODIFY=YES
               PCB    TYPE=TP,MODIFY=YES,EXPRESS=YES,PCBNAME=ELAEXP
               ELAPCB LABEL=ELAWORK 

      In diesem Fall müssen Sie die PCB-Datensätze nicht in Ihren PSB-Datensatzabschnitt aufnehmen.

    • Wenn der IMS-Programmierer unterschiedliche Namen für die von EGL erforderlichen Namen verwendet, müssen Sie die erforderlichen PCB-Datensätze in Ihren PSB-Datensatzabschnitt aufnehmen und den in EGL erforderlichen Namen dem Namen in Ihrem Laufzeit-PSB zuordnen. Angenommen, Ihr Laufzeit-PSB enthält beispielsweise die folgenden PCBs:
               PCB    TYPE=TP,MODIFY=YES,PCBNAME=MYALTPCB
               PCB    TYPE=TP,MODIFY=YES,EXPRESS=YES,PCBNAME=MYEXPPCB
               ELAPCB LABEL=MYWORKDB
      In diesem Fall enthält Ihr PSB-Datensatzabschnitt die folgenden PCB-Datensätze:
      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 Feld 'callInterface' auf AIBTDLI festgelegt ist, müssen Sie nur die PCB-Datensätze deklarieren, die in Ihrem Programm verwendet werden, sowie alle erforderlichen PCBs, die einen anderen Laufzeitnamen als den in EGL erforderlichen Namen besitzen. Diese Regel gilt für Hauptprogramme und aufgerufene Programme.

Wenn 'callInterface' CBLTDLI ist

Wenn Sie das Feld 'callInterface' auf CBLTDLI festlegen, erfolgt der Zugriff auf einen bestimmten Laufzeit-PCB anhand der Adresse statt anhand des Namens.

Mit der Ausnahme für Ein-/Ausgabe- und alternative PCB-Datensätze, die von EGL ignoriert werden, damit Sie dasselbe Programm über unterschiedliche Umgebungen hinweg generieren können, muss die Struktur des PSB-Datensatzes in einem Hauptprogramm mindestens die ursprünglichen PCBs im Laufzeit-PSB wiedergeben:
  • Der PSB-Datensatz darf nicht mehr PCB-Datensätze enthalten, als PCBs im Laufzeit-PSB vorhanden sind, es dürfen jedoch weniger sein.
  • Die Position aller PCB-Datensätze muss mit der Position des dazugehörigen Laufzeit-PCBs übereinstimmen und vom selben Typ sein wie dieser PCB.

Wenn es sich beim Zielsystem um ein IMS/VS-System handelt und Sie eine DL/I-Datenbank als EGL-Arbeitsdatenbank verwenden, müssen Sie die Datenbankhierarchieinformationen nicht in den EGL-PCB-Datensatz aufnehmen und der IMS-Systemprogrammierer sollte beim Definieren des Laufzeit-PSBs das Makro ELAPCB verwenden. (Geben Sie zur Generierungszeit an, dass es sich bei der Arbeitsdatenbank um eine DL/I-Datenbank handelt, indem Sie den Standardwert für die Erstellungsdeskriptoroption 'workDBType' akzeptieren.)

Bei aufgerufenen Programmen ist Folgendes der Fall:
  • Wenn Sie einen PSB-Datensatz an das aufgerufene Programm weitergeben, geben Sie eine zum Zugreifen auf den Laufzeit-PSB verwendete Adresse weiter. Sie müssen mindestens wie im Hauptprogramm den ersten Teil des PSB-Datensatzabschnitts festlegen, einschließlich der PCB-Datensätze für Ein-/Ausgabe-, alternative und alternative sofort wirksame PCBs (sofern in der jeweiligen Umgebung verwendet) sowie andere für das aufgerufene Programm benötigte PCB-Datensätze. Sie müssen zudem die Programmeigenschaft '@dli' im Eigenschaftsfeld 'psbParm' festlegen.
  • Wenn Sie PCB-Datensätze an das aufgerufene Programm weitergeben (bevorzugt), geben Sie die zum Zugreifen auf die einzelnen Laufzeit-PCBs benötigten Adressen weiter. Dennoch müssen Sie mindestens die Ein-/Ausgabe-, alternativen und alternativen sofort wirksamen PCBs festlegen (sofern in der jeweiligen Umgebung verwendet); außer diesen müssen Sie nur die PCB-Datensätze deklarieren, die im aufgerufenen Programm benötigt werden. Sie müssen zudem die Programmeigenschaft '@dli' im Eigenschaftsfeld 'pcbParms' festlegen.

Wenn Sie die Eigenschaften 'pcbParms' und 'psbParm' in einem aufgerufenen Programm angeben, werden die entsprechenden Adressen im späteren Teil mit den PCB-spezifischen Adressen im ersten Teil überschrieben. Der übergebene PSB-Datensatz wird ignoriert.

Hauptprogramme oder aufgerufene Programme, die für IMS/VS oder IMS-BMPs generiert wurden, weisen das folgende Standardverhalten auf:
  • Der zweite PCB-Datensatz bezieht sich auf den alternativen PCB
  • Der dritte PCB-Datensatz bezieht sich auf den sofort wirksamen alternativen PCB

Wenn Sie ELAALT als Namen für einen anderen als den zweiten Datensatz verwenden oder wenn Sie ELAEXP als Name für einen anderen als den dritten Datensatz verwenden, hat der Name jeweils Vorrang. In EGL wird angenommen, dass der benannte PCB-Datensatz sich auf den entsprechenden Typ des Laufzeit-PCBs bezieht.


Feedback