GSAM und IMS-Nachrichtenwarteschlangen sind zwei Beispiele für den Zugriff auf serielle Dateien über EGL.
Sie ordnen einen seriellen Datensatz (eine Datensatzdefinition mit dem Stereotyp 'SerialRecord') einer bestimmten Datei zu, indem Sie bei der Generierung einen Ressourcenzuordnungsabschnitt (ResourceAssociation) verwenden. Mit diesem Prozess wird festgelegt, ob EGL den Datensatz für VSAM-, GSAM- oder IMS-Nachrichtenwarteschlangenzugriff verwendet. Weitere Informationen hierzu finden Sie im Handbuch für EGL-Generierung.
EGL-Programme, die in einer IMS BMP- oder z/OS Batch-Umgebung ausgeführt werden, können serielle Dateien als GSAM-Dateien implementieren. Dadurch wird auf diesen Systemen eine sehr grundlegende Datenbankfunktionalität bereitgestellt. Für serielle Dateien, die als GSAM-Dateien implementiert werden, können Sie die E/A-Anweisungen 'add', 'get next' und 'close' verwenden.
Programme, die unter IMS/VS ausgeführt werden, implementieren serielle Dateien als IMS-Nachrichtenwarteschlangen. Programme, die als IMS BMP-Programme ausgeführt werden, können serielle Dateien auch als Nachrichtenwarteschlangen implementieren. Für Ausgabedateien können Sie die Ein-/Ausgabe-Anweisungen 'add' und 'get next' sowie die Anweisung 'close' verwenden. Wenn Sie IMS/VS oder IMS BMP als Ziellaufzeitumgebung auswählen, können Sie serielle Dateien oder Druckdateien so definieren, dass sie einer Nachrichtenwarteschlange zugeordnet sind. Bei IMS/VS müssen Sie alle seriellen Dateien und Druckdateien zu Nachrichtenwarteschlangen zuordnen. Sie können einer Nachrichtenwarteschlange nur eine einzige Eingabedatei zuordnen.
Wenn Sie einen seriellen Datensatz einer Nachrichtenwarteschlange zuordnen, definieren Sie nur die Programmdaten. Das generierte COBOL-Programm fügt den IMS-Nachrichtenheader (Länge, ZZ und Transaktionscode) für eine Anweisung 'add' hinzu und entfernt diesen Nachrichtenheader für eine Anweisung 'get next'.
Nach einem DL/I-Aufruf, der entweder die Nachrichtenwarteschlange oder GSAM betrifft, werden die dliVar-Felder nicht aktualisiert. Diese Felder werden nur für Funktionen aktualisiert, die auf DL/I-Segmentdatensätze zugreifen. Dadurch kann ein Programm, das für eine CICS-Warteschlange mit transienten Daten oder eine serielle OS/VS-Datei geschrieben ist, konsistent ausgeführt werden, wenn die Datei in eine Nachrichtenwarteschlange oder GSAM-Datenbank in einer IMS-Umgebung geändert wird. Prüfen Sie die E/A-Fehlerwerte, um zu ermitteln, ob Fehler vom Typ 'endOfFile' (Dateiende) oder 'noRecordFound' (kein Datensatz gefunden) oder andere Fehler in der seriellen Datei aufgetreten sind. Wenn Sie detailliertere Informationen aus dem Programmkommunikationsblock (PCB) benötigen, verwenden Sie die Feldnamen in 'IO_PCBRecord' oder 'ALT_PCBRecord'.
Betrachten Sie eine Situation, in der Ihre PSB-Variable (namens myPSB) einen Datensatz vom Typ 'ALT_PCBRecord' namens myAltPCB deklariert und Sie myAltPCB als PCB-Namen in Ihrer Ressourcenzuordnung verwendet haben. Um den DL/I-Statuscode nach einer Anweisung 'add' zu referenzieren, verwenden Sie myPSB.myAltPCB.statusCode.
| EGL-E/A-Fehlercode | Statuscode der IMS-Nachrichtenwarteschlange | Wertigkeit |
|---|---|---|
| endOfFile | QC | Sporadisch |
| noRecordFound | QD | Sporadisch |
| ioError | Beliebiger belegter Statuscode (nicht leer) | Permanent oder sporadisch |
| hardIOError | Belegter Statuscode (nicht leer) mit Ausnahme von QC, QD, CE, CF, CG, CI, CJ, CK, CL | Permanent |
| EGL-E/A-Fehlercode | GSAM-Statuscode | Wertigkeit |
| endOfFile | GB | Sporadisch |
| ioError | Beliebiger belegter Statuscode (nicht leer) | Permanent oder sporadisch |
| hardIOError | Belegter Statuscode (nicht leer) mit Ausnahme von GB | Permanent |