Serielle- und Druckdateien in IMS verwenden

Serielle Dateien müssen als IMS-Nachrichtenwarteschlangen in IMS/VS implementiert werden. Sie können als Nachrichtenwarteschlangen, OS/VS-Dateien, VSAM-Dateien oder GSAM-Dateien für IMS-BMPs implementiert werden. Serielle Dateien können als OS/VS-Dateien, VSAM-Dateien oder GSAM-Dateien für z/OS Batch implementiert werden. Im Folgenden wird die Verwendung serieller Dateien als GSAM-Dateien oder Nachrichtenwarteschlangen beschrieben.

Serielle Dateien als GSAM-Dateien verwenden

In EGL-Programmen, die in IMS-BMPs oder z/OS Batch-Umgebungen ausgeführt werden, können serielle Dateien als GSAM-Dateien implementiert werden. Für serielle Dateien, die Sie als GSAM-Dateien implementieren, können Sie die E/A-Anweisungen ADD, GET NEXT und CLOSE verwenden. Im Folgenden sind die Unterschiede zwischen GSAM-Verarbeitung und der normalen Verarbeitung serieller Dateien aufgelistet:
  • Für GSAM-Dateien ist eine DBD erforderlich.
  • Für GSAM-Dateien ist ein PCB im IMS-PSB erforderlich. Dieser PCB muss im IMS-Laufzeit-PSB und in der EGL-PSB-Definition definiert werden. In Ihren Programm muss eine Datensatzvariable deklariert werden, die auf dem PSB-Datensatzabschnitt basiert.
  • GSAM-Dateien werden über DL/I-Aufrufe gelesen oder geschrieben. Im generierten COBOL-Programm geschieht dies basierend auf den angeforderten E/A-Anweisungen automatisch.
  • GSAM-Dateien werden mit einem Prüfpunkt versehen und auf dieselbe Weise neugestartet wie eine DL/I-Datenbank. Um jedoch die GSAM-Datei wiederherzustellen, muss ein symbolischer Prüfpunkt gesetzt und ein Neustart verwendet werden statt dass ein Basisprüfpunkt gesetzt wird.
In EGL werden das Datensatzsuchargument für GSAM und Datensätze mit nicht definierter Länge nicht unterstützt.

Serielle Dateien oder Druckdateien werden als GSAM-Dateien ermittelt, indem der Ressourcenzuordnungsabschnitt während der Generierung zum Angeben eines Dateityps für GSAM und eines PCB-Namens verwendet wird.

Wenn Sie einer GSAM-Datei eine serielle Datei zuordnen, müssen Sie die folgenden Informationen einschließen:
Ressourcenname
Zum Angeben des Dateinamens mit 1-44 Zeichen, der in der Beispiellaufzeit-JCL verwendet wird. Der Dateiname der Datensatzdefinition wird in der Beispiellaufzeit-JCL als DD-Name verwendet.
Dateityp
Zum Angeben der GSAM als Dateityp zum Zuordnen der seriellen Datei oder der Druckausgabe zu einer GSAM-Datei.
Name des PCBs
Zum Angeben eines Namens für einen PCB für die serielle Datei, die der GSAM-Datei zugeordnet ist. Wenn kein Name angegeben wird, ist der Standardwert der erste GSAM-PCB im EGL-PSB.

Serielle Dateien als Nachrichtenwarteschlangen verwenden

Mit Onlineprogrammen, die in IMS/VS ausgeführt werden, werden serielle Dateien als IMS-Nachrichtenwarteschlangen implementiert. In Programmen, die als IMS-BMP-Programme ausgeführt werden, können auch serielle Dateien als Nachrichtenwarteschlangen implementiert werden. Für Ausgabedateien können Sie die E/A-Anweisungen ADD, GET NEXT und CLOSE verwenden. Wenn Sie als Ziellaufzeitumgebung IMS/VS oder ein IMS-BMP auswählen, können Sie zum Zuordnen zu einer Nachrichtenwarteschlange serielle oder Druckdateien definieren. Alle seriellen und Druckdateien müssen Nachrichtenwarteschlangen für IMS/VS zugeordnet werden. Nur eine einzelne Eingabedatei kann der Nachrichtenwarteschlange zugeordnet werden.

Serielle Dateien oder Druckdateien können einer Nachrichtenwarteschlange durch Verwenden eines Ressourcenzuordnungsabschnitts während der Generierung und durch Angeben des Dateityps und eines PCB-Namens zugeordnet werden. Wenn Sie einer Nachrichtenwarteschlange eine serielle Datei zuordnen, müssen Sie die folgenden Ressourceninformationen definieren:
Ressourcenname

Sie müssen eine Ziel-ID mit 1-8 Zeichen für die Daten einer seriellen oder Druckerdatei angeben. Der Name muss mit der ID eines logischen IMS-Terminals oder eines Transaktionscodes übereinstimmen, der in der IMS-Systemdefinition definiert ist.

Der Dateiname ist der Standardressourcenname für die Nachrichtenwarteschlange. Diese Standardeinstellung kann im Ressourcenzuordnungsabschnitt überschrieben werden.

Wenn es sich bei dem ausgewählten PCB um einen änderbaren oder um einen sofort wirksamen alternativen PCB handelt, kann der Standardname der Nachrichtenwarteschlange zur Laufzeit durch Festlegen eines Wertes für 'datensatz.resourceAssociation' für eine Datei oder 'converseVar.printerAssociation' für einen Drucker im Programm überschrieben werden. 'datensatz.resourceAssociation' wird als lokale Variable behandelt. Durch Festlegen von 'datensatz.resourceAssociation' für einen Datensatz in einem Programm wird 'datensatz.resourceAssociation' in einem anderen Programm nicht beeinflusst. Durch eine ADD-Anweisung wird in die durch die Festlegung von 'datensatz.resourceAssociation' für dieses Programm angegebene Nachrichtenwarteschlange geschrieben.

Typ der Nachrichtenwarteschlange
Es können Nachrichtenwarteschlangen mit einem einzigen Segment oder mit mehreren Segmenten angegeben werden.
SMSGQs (Single-Segment Message Queues = Nachrichtenwarteschlangen mit einem einzigen Segment)
Bei Nachrichtenwarteschlangen mit einem einzigen Segment ist jeder Datensatz, der (mit einer GET NEXT-Anweisung) zur seriellen Datei hinzugefügt oder aus dieser ausgelesen wird, eine abgeschlossene Nachricht. Im generierten COBOL-Programm wird ein IMS-PURG-Aufruf zwischen den zu einer Nachrichtenwarteschlange mit einem einzigen Segment hinzugefügten Datensätzen abgesetzt. Im generierten COBOL-Programm wird für jede GET NEXT-Anweisung eine IMS-GET UNIQUE-Anweisung abgesetzt.
MMSGQs (Multiple-Segment Message Queues = Nachrichtenwarteschlangen mit mehreren Segmenten)

Bei Nachrichtenwarteschlangen mit mehreren Segmenten wird eine Reihe von Hinzufügungen zur seriellen Datei so behandelt, als wäre jede ADD-Anweisung für ein Segment einer einzigen Nachricht bestimmt. Die Nachricht endet erst, wenn eine CLOSE-Anweisung abgesetzt oder ein Festschreibungspunkt erreicht wird. Im generierten COBOL-Programm wird für die CLOSE-Anweisung ein IMS-PURG-Aufruf abgesetzt. Danach können Sie mit dem Hinzufügen von Segmenten einer anderen Nachricht beginnen und das Programm schließen. Nachrichtenwarteschlangen mit mehreren Segmenten sind für Druckdateien nicht gültig.

Wenn Sie für eine serielle MMSGQ-Datei eine GET NEXT-Anweisung absetzen, wird im generierten Programm ein IMS-Aufruf GET UNIQUE zum Abrufen des ersten Segments der Nachricht abgesetzt. Zusätzliche GET NEXT-Anweisungen führen zu GN-Aufrufen zum Abrufen der übrigen Segmente der Nachricht. Am Ende aller Segmente in einer Nachricht wird im generierten COBOL-Programm der Datensatzstatus 'noRecordFound' gesetzt. Wenn weitergesucht wird, wird im generierten Programm eine weitere Reihe von GU-Aufrufen (GET UNIQUE), gefolgt von GN-Aufrufen (GET NEXT) gestartet. Wenn keine weiteren Nachrichten gefunden werden, wird im generierten Programm der Status 'endOfFile' zurückgegeben.

PCB-Name

Für die serielle Datei, die einer Nachrichtenwarteschlange zugeordnet werden soll, muss auch ein PCB-Name angegeben werden. Dabei muss der Name angegeben werden, der dem Eingabe-/Ausgabe-PCB als PCB-Name für eine serielle Eingabedatei zugeordnet ist. Der Eingabe-/Ausgabe-PCB ist die einzige für die Eingabe verwendete Nachrichtenwarteschlange. Wenn Sie eine serielle Eingabedatei verwenden, müssen Sie einen Hauptstapel oder ein einen aufgerufenen Stapel verwenden. Im generierten Programm wird die gesamte Logik des Eingabe-/Ausgabe-PCBs für Haupt-textUI-Programme abgewickelt.

Sie können den PCB-Namen für eine serielle Ausgabedatei angeben. Der PCB-Name muss der Name sein, der einem alternativen PCB-Datensatz zugeordnet ist. Der Standard-PCB-Name ist der Name des ersten alternativen PCBs im PSB. Ausgaben können nur mithilfe einer der folgenden Systemfunktionen an den Eingabe-/Ausgabe-PCB gesendet werden:
  • vgLib.VGTDLI()
  • dliLib.AIBTDLI()
  • dliLib.EGLTDLI()

Datensätze für die Verwendung mit Nachrichtenwarteschlangen definieren

Wenn Sie einen seriellen Datensatz zum Zuordnen zu einer Nachrichtenwarteschlange definieren, dürfen nur die Programmdaten definiert werden. Im generierten COBOL-Programm werden die IMS-Nachrichtenheader (Länge, ZZ und Transaktionscode) für eine ADD-Anweisung hinzugefügt und für eine GET NEXT-Anweisung wieder entfernt.

Ergebnisse der E/A-Anweisungen einer seriellen Datei prüfen

Wenn eine serielle Datei einer Nachrichtenwarteschlange oder GSAM-Datenbank zugeordnet wird, wird im generierten Programm ein DL/I-Aufruf zum Implementieren der E/A-Operation abgesetzt. Wenn der DL/I-Aufruf abgeschlossen wird, werden in Rational COBOL Runtime for zSeries die folgenden Funktionen durchgeführt:
  • Bei GET NEXT-Anweisungen basiert der Datensatzstatus auf dem DL/I-Statuscode. Die Felder 'sysVar.sessionID' und 'sysVar.userID' werden vom Benutzer-ID-Feld des Eingabe-/Ausgabe-PCBs aktualisiert, wenn im generierten Programm ein GU-Aufruf für den Eingabe-/Ausgabe-PCB abgesetzt wird. Dies geschieht bei einer seriellen Datei, die als MMSGQ (Multiple-Segment Message Queue = Nachrichtenwarteschlange mit mehreren Segmenten) definiert ist, bei der ersten GET NEXT-Anweisung und bei einem SMSGQ (Single-Segment Message Queue = Nachrichtenwarteschlange mit einem einzigen Segment) bei jeder GET NEXT-Anweisung. Das EGL-Feld 'sysVar.transactionID' wird vom Transaktionsnamen im IMS-Nachrichtenheader nach jeder GET NEXT-Anweisung aktualisiert, die zu einem GU-Aufruf für den Eingabe-/Ausgabe-PCB führt.
  • Bei ADD- oder CLOSE-Anweisungen wird der Datensatzstatus anhand des DL/I-Statuscodes aktualisiert.
Nach einem DL/I-Aufruf mit entweder der Nachrichtenwarteschlange oder GSAM werden die 'dliVar'-Felder nicht aktualisiert. Diese Felder werden nur bei Funktionen aktualisiert, mit denen auf DL/I-Segmentdatensätze zugegriffen wird. Damit kann ein Programm, das für eine CICS-Warteschlange mit transienten Daten oder eine serielle OS/VS-Datei geschrieben wurde, konsistent ausgeführt werden, wenn die Datei in einer IMS-Umgebung in eine Nachrichtenwarteschlange oder GSAM-Datenbank geändert wird. Prüfen Sie die E/A-Fehlerwerte, um zu bestimmen, ob bei der seriellen Datei die Fehler 'endOfFile', 'noRecordFound' oder andere Fehler aufgetreten sind. Wenn Sie nähere Informationen vom PCB benötigen, verwenden Sie die Feldnamen in 'IO_PCBRecord' oder 'ALT_PCBRecord'. Stellen Sie sich vor, Ihre PSB-Variable ('myPSB') deklariert einen Datensatz ALT_PCBRecord mit dem Namen 'myAltPCB' und Sie haben 'myAltPCB' als PCB-Namen in Ihrer Ressourcenzuordnung verwendet. Verwenden Sie zum Referenzieren des DL/I-Statuscodes nach einer ADD-Anweisung 'myPSB.myAltPCB.statusCode'.
EGL-E/A-Fehlercode Statuscode der IMS-Nachrichtenwarteschlange Schweregrad
endOfFile QC Niedrig
noRecordFound QD Niedrig
ioError jeder nicht leere Statuscode Schwer oder leicht
hardIOError nicht leer außer QC, QD, CE, CF, CG, CI, CJ, CK, CL Schwer
EGL-E/A-Fehlercode GSAM-Statuscode Schweregrad
endOfFile GB Niedrig
ioError jeder nicht leere Statuscode Schwer oder leicht
hardIOError nicht leer außer GB Schwer

Druckdateien als Nachrichtenwarteschlangen verwenden

Für IMS/VS müssen Nachrichtenwarteschlangen Druckdateien zugeordnet werden. Bei IMS-BMPs können Nachrichtenwarteschlangen Druckdateien zugeordnet werden. Druckdateien werden auf dieselbe Weise Nachrichtenwarteschlangen zugeordnet wie serielle Dateien Nachrichtenwarteschlangen zugeordnet werden, außer dass SMSGQ der einzige gültige Dateityp für eine Ressourcenzuordnung ist, deren Dateiname 'printer' ist. In der IMS-Systemdefinition muss der Name für die Nachrichtenwarteschlange definiert werden, der in der Laufzeitumgebung als logisches Terminal verwendet wird. Zum Ändern des Druckerziels zur Laufzeit kann 'converseVar.printerAssociation' verwendet werden. Es kann zum Beispiel eine Tabelle mit Benutzer-IDs und Drucker-IDs definiert werden, die die einzelnen Benutzer in der Regel verwenden. Durch Festlegen von 'converseVar.printerAssociation' kann die Druckausgabe an einen Drucker in der Nähe des Programmbenutzers weitergeleitet werden.


Feedback