Format des IMS-Arbeitspufferbereichs für die Nachrichtenumschaltung

EGL definiert das Format des IMS-Arbeitspufferbereichs anhand der folgenden Erstellungsdeskriptoroptionen:
spaSize
Gibt die Gesamtlänge des Arbeitspufferbereichs an, einschließlich der Felder, die von IMS benötigt werden (Länge und ID des Arbeitspufferbereichs und IMS-Transaktionsname) sowie die EGL-Anforderung für ein Segmentierungsstatusbyte.
spaStatusBytePosition
Dieses optionale Feld wird entweder auf "15" (wenn das Statusbyte den Daten vorangestellt wird) oder auf denselben Wert wie "spaSize" (wenn das Statusbyte nach den Daten folgt) festgelegt.
Tabelle 1. Format des IMS-Arbeitspufferbereichs
Feld Länge in Byte Datentyp Beschreibung
Länge des Arbeitspufferbereichs 2 Binär Die Länge des Segments.
Arbeitspufferbereichs-ID 4 Binär Ein eindeutiger Name, der zum Identifizieren des Arbeitspufferbereichs für IMS verwendet wird. Dieser Name darf von MPP nicht geändert werden.
IMS-Transaktionsname 8 Zeichen Der IMS-Transaktionsname für das EGL-Programm.
Segmentierungsstatusbyte (optional) 1 Hexadezimal Dieses optionale Byte ist vorhanden, wenn "spaSize=n" und "spaStatusBytePosition=15" angegeben wurden und es sich um eine verzögerte Umschaltung handelt. Es gibt an, ob die Daten in der Arbeitsdatenbank gespeichert wurden.
Programmdaten Variable Variable Dieser Bereich enthält den Datensatz, der an die Anweisung "transfer to transaction" übergeben und vom Zielprogramm in seinem Eingabedatensatz empfangen wurde.
Segmentierungsstatusbyte (optional) 1 Hexadezimal Dieses optionale Byte ist vorhanden, wenn es sich um eine direkte Umschaltung handelt und wenn "spaSize=n" und "spaStatusBytePosition=n" angegeben wurden. (Die Position des Statusbyte ist entweder immer "15", wenn das Statusbyte den Daten vorangestellt wird, oder mit der Größe des Arbeitspufferbereichs identisch, wenn das Statusbyte nach den Daten folgt.) In diesem Fall werden die Inhalte des Byte ignoriert. Dieses optionale Byte ist auch vorhanden, wenn "spaSize=n" und "spaStatusBytePosition=n" angegeben wurden und es sich um eine verzögerte Umschaltung handelt. In diesem Fall wird angegeben, ob die Daten in der Arbeitsdatenbank gespeichert wurden.

Im folgenden Beispiel wird die COBOL-Definition für einen Arbeitspufferbereich dargestellt, der entweder in einer verzögerten oder direkten Programm-zu-Programm-Nachrichtenumschaltung für eine interaktive Verarbeitung übergeben wurde. Denken Sie daran, dass PL/I ein 4 Byte langes Feld und kein 2 Byte langes Feld wie für COBOL benötigt. Weitere Informationen finden Sie in der IMS/VS-Dokumentation für Ihr System. Die spezifischen Feldnamen werden nur zu Darstellungszwecken verwendet. Die tatsächlichen Feldnamen variieren je nach generiertem Code.

* SPA IO area.
 01 SPA.
   05 SPA-LENGTH                PIC S9(4) COMP.
   05 SPA-ID                    PIC S9(9) COMP.
   05 IMS-TRAN-NAME             PIC X(8).
   05 CSP-OPTIONAL-SSM-BYTE     PIC X(1).      Siehe Hinweis 1.
   05 CSP-APPL-WS-DATA.
     10 data-item-1             PIC ........................
     10 data-item-2             PIC ........................
         .
      .
      .
   05 CSP-OPTIONAL-SSM-BYTE     PIC X(1).      Siehe Hinweis 2.
Hinweise zu diesem Beispiel:
  1. Dieses optionale Byte ist vorhanden, wenn "spaSize=n" und "spaStatusBytePosition=15" angegeben wurden und es sich um eine verzögerte Umschaltung handelt. Es gibt an, ob die Daten in der Arbeitsdatenbank gespeichert wurden.
  2. Dieses optionale Byte ist vorhanden, wenn "spaSize=n" und "spaStatusBytePosition=n" angegeben wurden und es sich um eine direkte Umschaltung handelt. In diesem Fall werden die Inhalte des Byte ignoriert. Dieses optionale Byte ist auch vorhanden, wenn "spaSize=n" und "spaStatusBytePosition=n" angegeben wurden und es sich um eine verzögerte Umschaltung handelt. In diesem Fall wird angegeben, ob die Daten in der Arbeitsdatenbank gespeichert wurden.

Die in der Tabelle oben als "Programmdaten" identifizierten Daten werden als Eingabedatensatz für das Zielprogramm behandelt. Mit diesem Verfahren kann ein Nicht-EGL-Programm Daten im Arbeitspufferbereich speichern und zu einem EGL-Programm (oder zu einer Reihe von EGL-Programmen) umschalten, die die Arbeitspufferbereichsdaten verwenden oder ändern. Das EGL-Programm kann schließlich zurück zum Nicht-EGL-Programm mit Informationen vom EGL-Programm, das im Arbeitspufferbereich enthalten ist, schalten. Befolgen Sie die IMS-Einschränkungen im Hinblick auf die Größe des Arbeitspufferbereichs.

Größe des Arbeitspufferbereichs und Größe des Übertragungsdatensatzes

In der folgenden Tabelle wird definiert, wie der Arbeitspufferbereich, der in der Anweisung "transfer to transaction" oder "show" angegebene Datensatz und der Eingabedatensatz für das Zielprogramm für eine interaktive Verarbeitung zusammengehören.

Tabelle 2. Beziehung des IMS-Arbeitspufferbereichs zum Übertragungsdatensatz
Funktion Größe des Datenbereichs vs. Größe des Übertragungsdatensatzes Ergebnisse
transfer to transaction Die Größe des Programmdatenbereichs im Arbeitspufferbereich überschreitet die Größe des EGL-Datensatzes in der Anweisung "transfer to transaction" oder "show". Der Programmdatenbereich im Arbeitspufferbereich wird unter Verwendung des gesamten EGL-Datensatzes erstellt. Die verbleibenden Byte des Arbeitspufferbereichs werden als leer festgelegt.
transfer to transaction Die Größe des Programmdatenbereichs im Arbeitspufferbereich ist kleiner als die Größe des EGL-Datensatzes in der Anweisung "transfer to transaction". Zusätzliche Byte des EGL-Datensatzes werden abgeschnitten.
Initialisierung des Eingabedatensatzes des Zielprogramms Die Größe des Programmdatenbereichs im Arbeitspufferbereich überschreitet die Größe des EGL-Datensatzes im Eingabedatensatz für das Zielprogramm. Zusätzliche Byte des Programmdatenbereichs im Arbeitspufferbereich werden abgeschnitten, wenn er in den Eingabedatensatz verschoben wird.
Initialisierung des Eingabedatensatzes des Zielprogramms Die Größe des Programmdatenbereichs im Arbeitspufferbereich ist kleiner als die Größe des EGL-Datensatzes im Eingabedatensatz für das Zielprogramm. Der Eingabedatensatz wird vom Programmdatenbereich im Arbeitspufferbereich aus und die verbleibenden Byte des Eingabedatensatzes werden anhand des Datentyps initialisiert.

Feedback