Von und zu IMSADF II-Programmen übertragen

Generierte EGL-Programme können Übertragungen zu oder von IMSADF-Programmen durchführen. Verzögerte Programm-zu-Programm-Nachrichtenumschaltungen können zwischen interaktiven IMSADF II-Programmen und segmentierten, interaktiven EGL-Programmen, die mit der auf YES festgelegten Erstellungsdeskriptoroption "spaADF" generiert wurden, durchgeführt werden. Darüber hinaus können sekundäre IMSADF II-Transaktionen von EGL-Batchprogrammen verarbeitet werden.

Beachten Sie jedoch Folgendes:

Interaktive IMSADF II-Verarbeitung

EGL kann zum Initialisieren von IMSADF II nicht verwendet werden, kann aber zum Empfangen der Steuerung vom IMSADF II-Transaktionstreiber sowie zum Zurückgeben der Steuerung an den IMSADF II-Transaktionstreiber genutzt werden. Dies wird nur unterstützt, wenn das IMSADF II-Programmsystem den IMSADF II-28-Byte-Arbeitspufferbereich mit einer Arbeitsdatenbank verwendet.

Im Codebeispiel unten wird die Datensatzdefinition "EGL DLISegment" für die Arbeitsdatenbank IMSADF II, Version 2, Release 2 dargestellt. Die Felder in dieser Definition sind auf die Felder begrenzt, die bearbeitet werden müssen, wenn ein EGL-Programm eine direkte Übertragung an einen interaktiven IMSADF II-Transaktionstreiber durchführt.
//*** RECORD=ADFWKDB ****
// The sample segment layout of the ADFWORK database default
// segment size is 6000 bytes.  Use this DLISegment definition
// to retrieve data from and store data into the ADF work database.
// Refer to the IMSADF Application Development Guide
// Appendix E for details on which fields to update.
// ***********************
Record ADFWKDB type DLISegment  {
  keyItem = "LTERMNME"
  }
  3 LTERMNME char(8) ; 
  3 SPALEGTH smallint ; 
  3 * char(4) ; 
  3 SPATRANS char(8) ; 
  3 * char(397) ; 
  3 SPABITS hex(2) ; 
  3 * char(6) ; 
  3 SPAFIRST smallint ; 
  3 SPARTNCD int ; 
  3 SPASECTX smallint ; 
  3 * char(4) ; 
  3 SPAPGOPT smallint ; 
  3 SPASWITH char(2) ; 
    4 RDFSWITH smallint ; 
  3 SPATRX char(3) ; 
  3 SPACGTRX char(3) ; 
  3 * char(66) ; 
  3 SPASHOTR char(8) ; 
  3 * char(31) ; 
  3 SPAKEYID char(255) ; 
  3 SPAFLDSG char(5192) ; 
end   // end ADFWKDB

Rational COBOL Runtime für zSeries verwendet seine Arbeitsdatenbank nicht gemeinsam mit IMSADF II. Die beiden Datenbanken haben ein unterschiedliches Format. Änderungen an der IMSADF II-Arbeitsdatenbank haben keine Auswirkungen auf die Rational COBOL Runtime-Datenbank. Auch Änderungen durch das EGL-Programm an der Rational COBOL Runtime-Arbeitsdatenbank haben keine Auswirkungen auf die IMSADF II-Arbeitsdatenbank.

Definieren Sie von der IMSADF II-Seite aus das EGL-Programm zu IMSADF II auf dieselbe Weise wie bei der Definition einer Transaktion, die vollständig in COBOL geschrieben ist. Weitere Informationen finden Sie in der IMSADF II-Dokumentation für Ihr System. Der EGL-generierte Programmname (und daher der Lademodulname) müssen der folgenden IMSADF II-Namenskonvention folgen:
ssssTcc
ssss
Die IMSADF II-Programmsystem-ID.
T
Eine Konstante.
cc
Der Operand des Clustercodes (SOMTX), der zum Generieren der Transaktion verwendet wird, die die Umschaltung zum EGL-Programm verursacht.

Vom IMSADF II-Transaktionstreiber zum EGL-Programm

Wenn der Programmbenutzer die IMSADF II-Transaktions-ID eingibt, die dem EGL-Programm entspricht, führt IMSADF II eine direkte Programm-zu-Programm-Nachrichtenumschaltung für die angeforderte Transaktion durch. IMSADF II schreibt seinen eigenen 28-Byte-Arbeitspufferbereich in die IMS-Nachrichtenwarteschlange, um die Umschaltung durchzuführen.

Das EGL-Programm muss mit der auf YES festgelegten Erstellungsdeskriptoroption "spaADF" sowie mit der auf "28" festgelegten "spaSize" generiert werden, damit die Größe des IMSADF II-Arbeitspufferbereichs übereinstimmt. Wenn IMS die neue Transaktion terminiert, liest die EGL-Programmsteuerungslogik den IMSADF II-Arbeitspufferbereich aus dem Eingabe-/Ausgabe-PCB. Aufgrund dieser Erstellungsdeskriptoroptionen nimmt die EGL-Programmsteuerungslogik keine Änderungen am Arbeitspufferbereich vor. Deshalb kann das EGL-Programm eine mögliche direkte Programm-zu-Programm-Nachrichtenumschaltung zurück zum interaktiven IMSADF II-Transaktionstreiber vornehmen. Ein direktes Umschalten zur IMSADF II-Anmeldetransaktion wird nicht unterstützt.

Wenn mehrere EGL-Programme ausgeführt werden, bevor sie zurück zum interaktiven IMSADF II-Transaktionstreiber übertragen werden, müssen alle EGL-Programme mit denselben Erstellungsdeskriptoroptionen generiert werden. Die Programmsteuerungslogik verwendet die Rational COBOL Runtime-Arbeitsdatenbank oder ein sekundäres Nachrichtensegment, gefolgt vom Arbeitspufferbereich, um Datensätze zwischen den EGL-Programmen zu übergeben. Daher wird der IMSADF II-formatierte Arbeitspufferbereich beibehalten. Sowohl verzögerte als auch direkte Programm-zu-Programm-Nachrichtenumschaltungen können zwischen den EGL-Programmen verwendet werden.

Sie können außerdem die Erstellungsdeskriptoroption "spaStatusBytePosition=p" angeben, wobei "p" ein verfügbares Byte im IMSADF II-Arbeitspufferbereich angibt, das für das EGL-Segmentierungsstatusbyte verwendet werden kann. Alle EGL-Programme, die von einer Reihe von Nachrichtenumschaltungen, die von einem IMSADF II-Transaktionstreiber aus gestartet werden, betroffen sind, müssen dieselben Erstellungsdeskriptoroptionen "spaSize", "spaADF" und "spaStatusBytePosition" haben. Informationen zu den verfügbaren Positionen im Arbeitspufferbereich finden Sie in Ihrer IMSADF II-Dokumentation.

Wie in einem COBOL-Programm kann das EGL-Programm auf die IMSADF II-Arbeitsdatenbank zugreifen, um die Informationen im IMSADF II-Kommunikationsbereich zu verwenden oder zu ändern. Wenn Sie auf die IMSADF II-Arbeitsdatenbank zugreifen, verarbeitet das EGL-Programm die IMSADF II-Arbeitsdatenbank wie jede andere Programmdatenbank. Verwenden Sie die Datensatzdefinition oben, um auf die IMSADF II-Arbeitsdatenbank zuzugreifen. Wenn Sie eine DL/I IMSADF II-Arbeitsdatenbank verwenden, stellen Sie sicher, dass Sie einen Datenbank-PCB in die PSB-Definition des EGL-Programms einbeziehen.

Von EGL-Programmen zu IMSADF II-Transaktionstreibern

Um eine Umschaltung zurück zum IMSADF II-Transaktionstreiber durchzuführen, sollte Ihr EGL-Programm in der IMSADF II-Arbeitsdatenbank Flags setzen, um dem Transaktionstreiber mitzuteilen, welche Aufgaben er beim Empfang der Steuerung ausführen soll. Weitere Informationen finden Sie in der IMSADF II-Dokumentation für Ihr System. Das EGL-Programm überträgt die Steuerung mithilfe der Anweisung "transfer to transaction", die keinen Datensatz angibt. Legen Sie "sysVar.transferName" auf den Namen der neuen Transaktion fest, die gestartet werden soll. Diese Variable muss denselben Wert enthalten, der in die IMSADF II-Variable SPATRANS platziert wurde. Die EGL-Programmsteuerungslogik fügt den Arbeitspufferbereich ein, um eine direkte Programm-zu-Programm-Nachrichtenumschaltung zurück zu IMSADF II auszulösen.

Übertragung mit interaktiven Programmen im ADF-Modus

Die in diesem Abschnitt beschriebenen Verfahren werden nur verwendet, wenn eine Übertragung von IMSADF II zu einer Reihe von EGL- und Nicht-EGL-Programmen vor der Übertragung zurück zu IMSADF II durchgeführt wird. Wenn nur ein einziges EGL-Programm ausgeführt und dann zurück zu IMSADF II übertragen wird, behält die Programmsteuerungslogik den IMSADF II-Arbeitspufferbereich automatisch bei. Informationen zu Übertragungen ohne IMSADF II finden Sie in "Steuerung zur IMS/VS-Umgebung übertragen".

In der folgenden Tabelle werden die Konventionen dargestellt, die für Übertragungen zwischen EGL-Programmen verwendet werden, wenn die Erstellungsdeskriptoroption "spaADF" auf YES festgelegt wird. Diese Konventionen unterscheiden sich von den Verfahren ohne IMSADF II, da in diesen speziellen Verfahren ein Datensatz übergeben wird, sodass der Arbeitspufferbereich intakt bleibt. Der ADF-Modus unterstützt keine Übertragungen zwischen segmentierten, nicht interaktiven Programmen.

Tabelle 1. Übertragungen zwischen interaktiven EGL-Programmen
Aktion Direkte Nachrichtenumschaltung (optionales Eingabeformular) Verzögerte Nachrichtenumschaltung (mit Eingabeformular)
Codierung und Generierung Definieren Sie beide Programme als "segmented = YES". Generieren Sie beide Programme als interaktiv mit der Erstellungsdeskriptoroption "spaSize", festgelegt auf "28", und der Erstellungsdeskriptoroption "spaADF", festgelegt auf YES. Definieren Sie beide Programme als "segmented = YES". Generieren Sie beide Programme als interaktiv mit der Erstellungsdeskriptoroption "spaSize", festgelegt auf "28", und der Erstellungsdeskriptoroption "spaADF", festgelegt auf YES.
Durchführung der Übertragung Das Ursprungsprogramm kann kein Formular senden. Wenn es sich um ein EGL-Programm handelt, wird die Anweisung "transfer to transaction" mit einem Datensatz verwendet. Das Ursprungsprogramm muss das Formular in eine Nachrichtenwarteschlange schreiben, die mit dem Terminal nach dem ersten Schreiben des Arbeitspufferbereichs verbunden ist. Wenn es sich um ein EGL-Programm handelt, wird dies mit der Anweisung "show", mit einem Formular und mit einem optionalen Datensatz durchgeführt.
Verwendung eines Eingabeformulars Das Zielprogramm kann optional ein Eingabeformular haben. Das Zielprogramm muss ein Eingabeformular haben.
Übergabe eines Datensatzes Der Datensatz wird zum Nachrichtensegment, gefolgt vom Arbeitspufferbereich (SPA), übertragen. Der Datensatz, wenn vorhanden, wird über die Arbeitsdatenbank übertragen.
Angabe des Segmentierungsstatusbytes Wenn "spaStatusBytePosition" angegeben wurde, ignoriert das Zielprogramm stets den Wert des Segmentierungsstatusbyte, der sich im Arbeitspufferbereich am angegebenen Offset befindet. Wenn "spaStatusBytePosition" angegeben wurde, verwendet das Zielprogramm den Wert des Segmentierungsstatusbyte am angegebenen Offset bei einem Integritätsproblem des Eingabeformulars, das vom Programmbenutzer durch Drücken von PA1 oder PA2 verursacht wird.
Das von "spaStatusBytePosition" angegebene Segmentierungsstatusbyte wird ausschließlich für Programm-zu-Programm-Übertragungen für interaktive Programme genutzt. Das Byte ist für Übertragungen zwischen interaktiven Programmen und anderen Programmen vorhanden. Jedoch sollte bei einem übertragenden Nicht-EGL-Programm das Byte immer als Leerzeichen festgelegt sein. Ein Nicht-EGL-Zielprogramm kann den Wert des Segmentierungsstatusbyte ignorieren.

Interaktive direkte Programm-zu-Programm-Nachrichtenumschaltung

Interaktive direkte Programm-zu-Programm-Nachrichtenumschaltungen werden wie folgt unterstützt:
  • Zwischen zwei EGL-Programmen
  • Von einem Nicht-EGL-Programm zu einem EGL-Programm
  • Von einem EGL-Programm zu einem Nicht-EGL-Programm

Direkte Umschaltung zwischen zwei EGL-Programmen

Mit diesem Verfahren können zwei segmentierte interaktive EGL-Programme sowohl den Transaktionsnamen als auch den PSB-Namen ändern, ohne dass dem Programmbenutzer ein Formular angezeigt wird. Die zwei Programme können verschiedene Formulargruppen (formGroups) verwenden. Eine Skeleton-Definition der zwei Programme finden Sie unter "Direkte Umschaltung zwischen zwei EGL-Programmen" in "Steuerung zur IMS/VS-Umgebung übertragen". Denken Sie daran, dass Sie die Erstellungsdeskriptoroption "spaADF" auf YES festlegen müssen, wenn IMSADF II-Programme beteiligt sind.

Die EGL-Programmsteuerungslogik behält automatisch den Arbeitspufferbereich bei und verwaltet den Datensatz, der als Nachrichtensegment, gefolgt vom Arbeitspufferbereich für die Programme A und B, übergeben wird. Geben Sie die Erstellungsdeskriptoroption "spaSize" (28 Byte) für die Programme A und B an.

Direkte Umschaltung zwischen Nicht-EGL-Programmen zu EGL-Programmen

Das Nicht-EGL-Programm muss ein interaktives IMS-Programm sein. Das EGL-Programm muss wie Programm B definiert werden. Informationen dazu finden Sie unter "Direkte Umschaltung zwischen zwei EGL-Programmen" in "Steuerung zur IMS/VS-Umgebung übertragen". Denken Sie daran, dass Sie die Erstellungsdeskriptoroption "spaADF" auf YES festlegen müssen, wenn IMSADF II-Programme beteiligt sind.

Mit dem Nicht-EGL-Programm muss Folgendes ausgeführt werden:
  1. Behalten Sie das Format des IMSADF II-Arbeitspufferbereichs bei.
  2. Fügen Sie den Arbeitspufferbereich in einen alternativen PCB ein und legen Sie dabei die Zielposition auf den Transaktionsnamen für das EGL-Programm fest. Wenn Sie die Erstellungsdeskriptoroption "spaStatusBytePosition" angegeben haben, befindet sich das Segmentierungsstatusbyte im Arbeitspufferbereich am angegebenen Offset. Legen Sie das Segmentierungsstatusbyte als Leerzeichen fest, bevor der Arbeitspufferbereich eingegeben wird.
  3. Fügen Sie den Datensatz, der als Nachrichtensegment übergeben werden soll, nach dem Arbeitspufferbereich in denselben alternativen PCB ein. Sie finden das erforderliche Layout einer Nachricht unter "Format der EGL-Eingabenachricht für die nicht interaktive IMS-Nachrichtenumschaltung".

Direkte Umschaltung zwischen EGL-Programmen zu Nicht-EGL-Programmen

Das Nicht-EGL-Programm muss ein interaktives IMS-Programm sein. Das EGL-Programm muss wie Programm A definiert werden. Informationen dazu finden Sie unter "Direkte Umschaltung zwischen zwei EGL-Programmen" in "Steuerung zur IMS/VS-Umgebung übertragen". Denken Sie daran, dass Sie die Erstellungsdeskriptoroption "spaADF" auf YES festlegen müssen, wenn IMSADF II-Programme beteiligt sind.

Mit dem Nicht-EGL-Programm muss Folgendes ausgeführt werden:
  1. Geben Sie eine eindeutige GET-Anweisung an den Eingabe-/Ausgabe-PCB aus, damit der Arbeitspufferbereich gelesen werden kann. Dieser Arbeitspufferbereich hat das ursprüngliche IMSADF II-Format, das vom EGL-Programm nicht geändert wurde. Wenn Sie die Erstellungsdeskriptoroption "spaStatusBytePosition" angegeben haben, befindet sich das Segmentierungsstatusbyte im Arbeitspufferbereich am angegebenen Offset. Das Nicht-EGL-Programm sollte den Wert des Segmentierungsstatusbyte ignorieren.
  2. Geben Sie eine GET NEXT-Anweisung an den Eingabe-/Ausgabe-PCB aus, um die Nachricht zu lesen, die den Datensatz enthält, der vom EGL-Programm übergeben wurde. Sie finden das erforderliche Layout einer Nachricht unter "Format der EGL-Eingabenachricht für die nicht interaktive IMS-Nachrichtenumschaltung".
  3. Behalten Sie das Format des IMSADF II-Arbeitspufferbereichs bei.

Interaktive verzögerte Programm-zu-Programm-Nachrichtenumschaltung

Interaktive verzögerte Programm-zu-Programm-Nachrichtenumschaltungen werden wie folgt unterstützt:
  • Zwischen zwei EGL-Programmen
  • Von einem Nicht-EGL-Programm zu einem EGL-Programm
  • Von einem EGL-Programm zu einem Nicht-EGL-Programm

Verzögerte Umschaltung zwischen zwei EGL-Programmen

Mit diesem Verfahren können zwei segmentierte interaktive EGL-Programme sowohl den Transaktionsnamen als auch den PSB-Namen ändern, wenn dem Programmbenutzer ein Formular angezeigt wird. Die zwei Programme müssen dieselben Formulargruppen (formGroups) verwenden. Es muss kein Datensatz übertragen werden, aber es ist ein Formular erforderlich. Eine Skeleton-Definition der zwei Programme finden Sie unter "Verzögerte Umschaltung zwischen zwei EGL-Programmen" in "Steuerung zur IMS/VS-Umgebung übertragen". Denken Sie daran, dass Sie die Erstellungsdeskriptoroption "spaADF" auf YES festlegen müssen, wenn IMSADF II-Programme beteiligt sind.

Verzögerte Umschaltung zwischen Nicht-EGL-Programmen zu EGL-Programmen

Das Nicht-EGL-Programm muss ein interaktives IMS-Programm sein. Definieren Sie das EGL-Programm wie Programm B unter "Verzögerte Umschaltung zwischen zwei EGL-Programmen" in "Steuerung zur IMS/VS-Umgebung übertragen". Denken Sie daran, dass Sie die Erstellungsdeskriptoroption "spaADF" auf YES festlegen müssen, wenn IMSADF II-Programme beteiligt sind.

Mit dem Nicht-EGL-Programm muss Folgendes ausgeführt werden:
  1. Behalten Sie das Format des IMSADF II-Arbeitspufferbereichs bei. Wenn Sie die Erstellungsdeskriptoroption "spaStatusBytePosition" angegeben haben, befindet sich das Segmentierungsstatusbyte im Arbeitspufferbereich am angegebenen Offset. Legen Sie das Segmentierungsstatusbyte als Leerzeichen fest, bevor der Arbeitspufferbereich eingegeben wird.
  2. Rufen Sie ELATSPUT auf, um den Datensatz zu speichern, den Sie an das EGL-Programm über die Arbeitsdatenbank übergeben möchten. Informationen dazu finden Sie unter "EGL-COBOL-Laufzeit-Arbeitsdatenbank für IMS/VS verwenden".
  3. Fügen Sie den Arbeitspufferbereich in den Eingabe-/Ausgabe-PCB ein.
  4. Fügen Sie das Formular mithilfe des Nachrichtenausgabedeskriptors, der dem Nachrichteneingabedeskriptor im EGL-Programm entspricht, in den Eingabe-/Ausgabe-PCB ein. Das Nicht-EGL-Programm muss das MDT-Attribut (MDT, Tag für modifizierte Daten) für alle variablen Datenfelder des Formulars festlegen, die an das EGL-Programm bei der verzögerten Umschaltung übergeben werden. Für alle anderen Attribute sollten die Standardwerte beibehalten werden. Sie finden das erforderliche Layout des Formulars unter "Format des IMS-MFS-Nachrichteneingabedeskriptors (MID)". EGL generiert ein COBOL-Copybook für den MID/MOD-Datensatzaufbau, das vom Nicht-EGL-Programm verwendet werden sollte, um sicherzustellen, dass die Datensatzformate übereinstimmen.

Verzögerte Umschaltung zwischen EGL-Programmen zu Nicht-EGL-Programmen

Das Nicht-EGL-Programm muss ein interaktives IMS-Programm sein. Definieren Sie das EGL-Programm wie Programm A unter "Verzögerte Umschaltung zwischen zwei EGL-Programmen" in "Steuerung zur IMS/VS-Umgebung übertragen". Denken Sie daran, dass Sie die Erstellungsdeskriptoroption "spaADF" auf YES festlegen müssen, wenn IMSADF II-Programme beteiligt sind. Das EGL-Programm muss für alle variablen Datenfelder im Formular, die als Eingabe im Nicht-EGL-Programm erforderlich sind, die Eigenschaft "modified" auf YES festlegen.

Mit dem Nicht-EGL-Programm muss Folgendes ausgeführt werden:
  1. Geben Sie eine eindeutige GET-Anweisung an den Eingabe-/Ausgabe-PCB aus, damit der Arbeitspufferbereich gelesen werden kann. Dieser Arbeitspufferbereich hat das ursprüngliche IMSADF II-Format, das vom EGL-Programm nicht geändert wurde.
  2. Geben Sie eine GET NEXT-Anweisung an den Eingabe-/Ausgabe-PCB aus, um den Nachrichteneingabedeskriptor abzurufen, der dem vom EGL-Programm verwendeten Nachrichtenausgabedeskriptor entspricht. Sie finden das erforderliche Layout der Zuordnung unter "Format des IMS-MFS-Nachrichteneingabedeskriptors (MID)". EGL generiert ein COBOL-Copybook für den MID/MOD-Datensatzaufbau, das vom Nicht-EGL-Programm verwendet werden sollte, um sicherzustellen, dass die Datensatzformate übereinstimmen.
  3. Verwenden Sie den Wert des MID-Formularfelds EZEMAP-SSM-STATUS, um zu bestimmen, ob ein Datensatz an die Arbeitsdatenbank übergeben wurde.
    • Wenn entweder "EZEMAP-SSM-WSR-SAVED" oder "EZEMAP-SSM-WSR-MAP-SAVED" den Wert "true" hat, dann befindet sich ein Datensatz in der Arbeitsdatenbank. Rufen Sie den Datensatz ab, wie in Schritt 4 unten beschrieben.
    • Wenn "EZEMAP-SSM-FILL-CHAR" den Wert "true" hat und kein ursprünglicher Arbeitspufferbereich ist, dann ist ein Integritätsproblem mit dem Eingabeformular aufgetreten, da der Programmbenutzer wahrscheinlich PA1 oder PA2 gedrückt hat. Ergreifen Sie entsprechende Gegenmaßnahmen, damit die Daten wiederhergestellt werden können, die im Eingabeformular verloren gingen. Dazu kann auch das Ausgeben einer Fehlermeldung an dem Programmbenutzer und Neustarten der Transaktion oder Ergreifen anderer Wiederherstellungsaktionen je nach Programmentwurf gehören. Wenn Sie in dieser Situation die Erstellungsdeskriptoroption "spaStatusBytePosition" angegeben haben, kann das Programm das Segmentierungsstatusbyte verwenden, um zu bestimmen, ob vor der Übertragung ein Datensatz in der Arbeitsdatenbank gespeichert wurde. Wenn das Segmentierungsstatusbyte den Wert "C", "c", "D" oder "d" hat, wurde in der Arbeitsdatenbank ein Datensatz gespeichert und Sie können ihn wie in Schritt 4 unten beschrieben abrufen.
  4. Rufen Sie ELATSGET auf, um den Datensatz abzurufen, der vom EGL-Programm in der Arbeitsdatenbank gespeichert wurde. Informationen dazu finden Sie unter "EGL-COBOL-Laufzeit-Arbeitsdatenbank für IMS/VS verwenden".
  5. Behalten Sie das Format des IMSADF II-Arbeitspufferbereichs bei.

Feedback