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