Steuerung zur IMS/VS-Umgebung übertragen

Anmerkung: Es gelten unterschiedliche Überlegungen für die Übertragung, wenn IMSADF II-Programme verwendet werden. Weitere Informationen dazu finden Sie unter "Übertragung von und zu IMSADF II-Programmen".

Die EGL-textUI-Hauptprogramme, die für die IMS/VS-Zielumgebung generiert werden, werden als IMS-Nachrichtenverarbeitungsprogramme (MPPs) ausgeführt.

Die Übertragung der Programmsteuerung mit der Anweisung "transfer to transaction" wird für die wichtigsten IMS/VS-Basisprogramme nicht unterstützt. Ein Nicht-EGL-Programm kann mit der Programm-zu-Programm-Nachrichtenumschaltung von IMS EGL-MPP-Programme aufrufen. Es werden die folgenden Nachrichtenumschaltungen unterstützt:
Direkte Nachrichtenumschaltung
Programm A übergibt ohne Reaktion auf das ursprüngliche Terminal die Steuerung direkt an eine Transaktion, die mit Programm B verbunden ist. Bei einem interaktiven MPP erfolgt dies durch Eingabe des Arbeitspufferbereichs (Scratch Pad Area, SPA) mit einem alternativen PCB, dessen Ziel auf den neuen Transaktionsnamen festgelegt ist. Bei einem nicht interaktiven MPP gibt das Programm eine Nachricht mit einem alternativen PCB ein, dessen Ziel auf den neuen Transaktionsnamen festgelegt ist.
Verzögerte Nachrichtenumschaltung
Programm A reagiert auf das Terminal und informiert IMS darüber, dass eine Transaktion, die dem Programm B zugeordnet ist, bei der nächsten Eingabe im Terminal gestartet werden soll. Bei einem interaktiven MPP wird eine Nachrichtenumschaltung dadurch erreicht, indem der Arbeitspufferbereich so geändert wird, dass der neue Transaktionsname angegeben wird, bevor er zurück zu IMS (mithilfe eines Eingabe-/Ausgabe-PCB) gesendet wird. Bei einem nicht interaktiven MPP wird eine Nachrichtenumschaltung dadurch erreicht, indem der nächste Transaktionsname in der Zuordnung so eingeschlossen wird, dass er die ersten 8 Byte der Eingabenachricht belegt.
Die Definitions- und Generationsoptionen des Nicht-EGL- oder EGL-Zielprogramms steuern den möglichen Umschaltungstyp und die Art und Weise, wie die Daten übergeben werden. Eine Übertragung von interaktiv zu nicht interaktiv bzw. von nicht interaktiv zu interaktiv wird in EGL-Programmen nicht unterstützt.
Wenn die Zieltransaktion ein EGL-Programm ist, wird durch die Verwendung der Eigenschaft "inputForm" bestimmt, welcher Typ der Nachrichtenumschaltung gültig ist: Wenn ein Nicht-EGL-Programm eine verzögerte Programm-zu-Programm-Nachrichtenumschaltung zu einem EGL-Programm hinzufügt, sollte durch das Nicht-EGL-Programm das MDT-Attribut (Tag für modifizierte Daten) für alle Felder des Formulars aktiviert werden und alle anderen Feldeigenschaften sollten auf die Werte festgelegt werden, die während der Formulardefinition definiert wurden. Wenn der Programmbenutzer Hilfe anfordert oder wenn Bearbeitungsfehler auftreten, werden Standarddaten in allen Feldern angezeigt, bei denen das MDT-Attribut nicht festgelegt wurde und die vom Programmbenutzer nicht geändert wurden. Das EGL-Programm verwendet die definierten Eigenschaften für alle anderen Feldeigenschaften.

Wenn die Zieltransaktion ein Nicht-EGL-Programm ist, das Formulareingaben von der Nachrichtenwarteschlange zu Beginn der Verarbeitung benötigt, sollte das EGL-Programm eine verzögerte Programm-zu-Programm-Nachrichtenumschaltung verwenden (EGL-Anweisung "show"). Anderenfalls sollte das EGL-Programm eine direkte Programm-zu-Programm-Nachrichtenumschaltung verwenden (EGL-Anweisung "transfer to transaction").

Die Steuerung der Übergabe der Daten ist von den folgenden Faktoren abhängig:

Übertragung zwischen interaktiven Programmen

In der folgenden Tabelle werden die Methoden dargestellt, die verwendet werden, um Daten zwischen interaktiven Programmen zu übergeben (Generierung mit der Erstellungsdeskriptoroption "spaSize > 0").

Tabelle 1. Programmumschaltung in interaktiven EGL-Programmen (Nicht-IMSADF-Schnittstelle)
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 (spaSize > 0). Definieren Sie beide Programme als "segmented = YES". Generieren Sie beide Programme als interaktiv (spaSize > 0).
Durchführung der Übertragung Das übertragende Programm kann kein Formular senden. Wenn es sich um ein EGL-Programm handelt, wird die Anweisung "transfer to transaction" zum Senden eines Datensatzes verwendet. Das übertragende Programm 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 "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 an den Arbeitspufferbereich (SPA) übergeben. Der Datensatz, wenn vorhanden, wird an den Arbeitspufferbereich (SPA) übergeben.
Angabe des Segmentierungsstatusbytes Wenn "spaStatusBytePosition" angegeben ist, wird das Segmentierungsstatusbyte immer an die letzte Position im Arbeitspufferbereich platziert. Das Zielprogramm ignoriert stets den Wert des Segmentierungsstatusbyte. Wenn "spaStatusBytePosition=n" angegeben ist, wird das Segmentierungsstatusbyte entweder an die Position 15 oder an die letzte Position im Arbeitspufferbereich (auf der Basis des Wertes "n") platziert. Das Zielprogramm verwendet den Wert des Segmentierungsstatusbyte bei einem Integritätsproblem des Eingabeformulars, das vom Programmbenutzer durch Drücken von PA1 oder PA2 verursacht wird.
Hinweis: 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 muss immer den Wert des Segmentierungsstatusbyte ignorieren.
Je nachdem, ob die Anweisung "transfer to transaction" oder "show" verwendet wird, um eine Übertragung durchzuführen, kann Folgendes zwischen zwei Programmen übergeben werden:
  • Ein Arbeitspufferbereich (SPA) kann an die Anweisung "transfer to transaction" oder "show" übergeben werden.
  • Eine MFS-Zuordnung (EGL-Formular) kann nur an die Anweisung "show" übergeben werden.
Weitere Informationen und Layouts finden Sie unter "Format des IMS-Arbeitspufferbereichs für die Nachrichtenumschaltung" und "Format des IMS-MFS-Nachrichteneingabedeskriptors (MID)".
Ein interaktives Programm verwendet immer einen Arbeitspufferbereich (SPA). Der Arbeitspufferbereich wird sowohl an direkte als auch an verzögerte Nachrichtenumschaltungen übergeben. Wenn Sie ein EGL-textUI-Hauptprogramm mit "spaSize > 0" generieren, verwendet EGL den Arbeitspufferbereich wie folgt:
  • Wenn die Transaktion zunächst für einen Benutzer startet, initialisiert EGL den Eingabedatensatz für dieses Programm vom Datenabschnitt des Arbeitspufferbereichs aus.
  • Wenn Sie die Anweisung "transfer to transaction" oder "show" verwenden, um einen Datensatz an eine andere Transaktion zu übergeben, legt EGL den Datenabschnitt des Arbeitspufferbereichs auf die Daten im angegebenen Datensatz fest.
Darüber hinaus können Sie mit einer verzögerten Umschaltung eine MFS-Zuordnung an ein Terminal übergeben. EGL führt dies wie folgt aus:
  • Wenn die Transaktion zunächst für einen Benutzer startet, prüft EGL, ob ein übergebenes Formular vorhanden ist. Wenn ein solches Formular existiert, verwendet EGL diese Daten, um das Eingabeformular für das Programm zu initialisieren.
  • EGL senden in der Anweisung "show" das Formular an das Terminal.

Interaktive direkte Programm-zu-Programm-Nachrichtenumschaltung

Interaktive direkte Programm-zu-Programm-Nachrichtenumschaltungen werden in folgenden Situationen 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. Es können verschiedene Formulargruppen (formGroups) von den zwei Programmen verwendet werden. Im folgenden Beispiel wird eine Skeleton-Definition der zwei Programme dargestellt.

program ProgramA type textUIProgram 
  {segmented=yes, inputRecord="basicRecord1", 
   @DLI { psb="psb" } }

  // Declarations
  basicRecord1 TRANSFER_RECORD;  
  psb PSB1A;

  // FormGroup
  use FORMGX;

  function main()
    ...
    sysVar.transferName = 'trx1b';
    transfer to transaction sysVar.transferName passing basicRecord1;
    ...
  end // end main
end // end ProgramA 
    
program ProgramB type textUIProgram    // inputForm is optional
  {segmented=yes, inputRecord="basicRecord1", inputForm="form2",
   @DLI { psb="psb" } }

  // Declarations
  basicRecord1 TRANSFER_RECORD;  
  psb PSB1B;

  // FormGroup
  use FORMGY;

  function main()
    // generated EGL logic does the following:
    //   initializes basicRecord1
    //   if inputForm is specified:
    //     converses form2
    //     performs edits for form2 
    //     converses form2 until form2 passes all edits
    //   gives control to the first statement in the main function
    ...
  end // end main
end // end ProgramB 

Die EGL-generierte Programmsteuerungslogik bearbeitet automatisch den Arbeitspufferbereich und den Datensatz (basicRecord1), der von Programm A an Programm B übergeben wird. Der Datenbereich der Arbeitspufferbereiche für die Programme A und B müssen groß genug für die meisten betroffenen Datensätze sein.

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

Das Nicht-EGL-Programm muss ein interaktives IMS-Programm sein. Das EGL-Programm muss auf ähnliche Weise wie Programm B wie in "Direkte Umschaltung zwischen zwei EGL-Programmen" definiert sein. Die Erstellungsdeskriptoroption "spaSize" muss den Arbeitspufferbereich angeben, der vom Nicht-EGL-Programm verwendet wird.

Mit dem Nicht-EGL-Programm muss Folgendes ausgeführt werden:
  1. Erstellen Sie den Arbeitspufferbereich in dem Format, das unter "Format des IMS-Arbeitspufferbereichs für die Nachrichtenumschaltung" definiert ist. Der Datenbereich im Arbeitspufferbereich muss der Definition des Eingabedatensatzes entsprechen, der vom EGL-Programm erwartet wird. Mit der EGL-generierten Programmsteuerungslogik werden die Headerinformationen (Länge, Arbeitspufferbereichs-ID, Transaktionsname) entfernt, sodass das EGL-Programm nur die Daten empfängt.

    Wenn Sie "spaSize=n" und "spaStatusBytePosition=p" als Erstellungsdeskriptoroptionen festgelegt haben, befindet sich das Segmentierungsstatusbyte an letzter Position des Arbeitspufferbereichs, und zwar unabhängig vom Wert von "spaStatusBytePosition". Das Nicht-EGL-Programm sollte das Segmentierungsstatusbyte als Leerzeichen festlegen, bevor der Arbeitspufferbereich eingegeben wird.

  2. Geben Sie den Arbeitspufferbereich in den alternativen PCB ein. Die Zielposition des alternativen PCBs muss auf den Transaktionsnamen für das EGL-Programm festgelegt werden.

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

Das Nicht-EGL-Programm muss ein interaktives IMS-Programm sein. Das EGL-Programm muss auf ähnliche Weise wie Programm A wie in "Direkte Umschaltung zwischen zwei EGL-Programmen" definiert sein. Die Erstellungsdeskriptoroption "spaSize" muss den Arbeitspufferbereich angeben, der vom Nicht-EGL-Programm verwendet wird.

Das Nicht-EGL-Programm muss eine eindeutige GET-Anforderung an den Eingabe-/Ausgabe-PCB ausgeben, damit der Arbeitspufferbereich gelesen werden kann. Sie finden das erforderliche Layout eines Arbeitspufferbereichs unter "Format des IMS-Arbeitspufferbereichs für die Nachrichtenumschaltung". Der Arbeitspufferbereich wird von der EGL-Programmsteuerungslogik erstellt. Der Datenbereich des Arbeitspufferbereichs enthält den Datensatz, den das EGL-Programm an die Anweisung "transfer to transaction" übergeben hat.

Wenn Sie "spaSize=n" und "spaStatusBytePosition=p" als Erstellungsdeskriptoroptionen festgelegt haben, befindet sich das Segmentierungsstatusbyte an letzter Position des Arbeitspufferbereichs, und zwar unabhängig vom Wert von "spaStatusBytePosition". Das Nicht-EGL-Programm sollte das letzte Byte des Arbeitspufferbereichs ignorieren.

Interaktive verzögerte Programm-zu-Programm-Nachrichtenumschaltung

Interaktive verzögerte Programm-zu-Programm-Nachrichtenumschaltungen werden in folgenden Situationen 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. Sie müssen für beide Programme dieselbe "formGroup" verwenden. Es muss kein Datensatz übertragen werden, aber es ist ein Formular erforderlich. Im folgenden Beispiel wird eine Skeleton-Definition der zwei Programme dargestellt.

program ProgramA type textUIProgram 
  {segmented=yes, inputRecord="basicRecord2", 
   @DLI { psb="psb" } }

  // Declarations
  basicRecord2 TRANSFER_RECORD;  
  psb PSB2A;

  // FormGroup
  use FORMG2;

  function main()
    ...
    sysVar.transferName = 'trx2b';
    show form2 returning to sysVar.transferName passing basicRecord2;
    ...
  end // end main
end // end ProgramA 
    
program ProgramB type textUIProgram    // inputForm is required
  {segmented=yes, inputRecord="basicRecord2", inputForm="map2",
   @DLI { psb="psb" } }

  // Declarations
  basicRecord2 TRANSFER_RECORD;  
  psb PSB2B;

  // FormGroup
  use FORMG2;

  function main()
    // generated EGL logic does the following:
    //   initializes basicRecord2
    //   performs edits for map2 
    //   converses map2 until map2 passes all edits
    //   gives control to the first statement in the main function
    ...
  end // end main
end // end ProgramB 

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

Das Nicht-EGL-Programm muss ein interaktives IMS-Programm sein. Das EGL-Programm muss auf ähnliche Weise wie Programm B wie in "Verzögerte Umschaltung zwischen zwei EGL-Programmen" definiert sein. Die Erstellungsdeskriptoroption "spaSize" muss den Arbeitspufferbereich angeben, der vom Nicht-EGL-Programm verwendet wird.

Mit dem Nicht-EGL-Programm muss Folgendes ausgeführt werden:
  1. Erstellen Sie den Arbeitspufferbereich in dem Format, das unter "Format des IMS-Arbeitspufferbereichs für die Nachrichtenumschaltung" definiert ist. Der Datenbereich im Arbeitspufferbereich muss der Definition des Eingabedatensatzes entsprechen, der vom EGL-Programm erwartet wird. Mit der EGL-Programmsteuerungslogik werden die Headerinformationen (Länge, Arbeitspufferbereichs-ID, Transaktionsname) entfernt, sodass das EGL-Programm nur die Daten empfängt.

    Wenn Sie "spaSize=n" und "spaStatusBytePosition=p" als Erstellungsdeskriptoroptionen festgelegt haben, müssen Sie das Segmentierungsstatusbyte am Offset im Arbeitspufferbereich (angegeben von "spaStatusBytePosition=p") initialisieren. Legen Sie das Segmentierungsstatusbyte als Leerzeichen fest.

  2. Geben Sie den Arbeitspufferbereich in den Eingabe-/Ausgabe-PCB ein.
  3. Geben Sie die MFS-Zuordnung (EGL-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 der MFS-Zuordnung (EGL-Formular) 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 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 Satzformate übereinstimmen.

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

Das Nicht-EGL-Programm muss ein interaktives IMS-Programm sein. Das EGL-Programm muss auf ähnliche Weise wie Programm A wie in "Verzögerte Umschaltung zwischen zwei EGL-Programmen" definiert sein. 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. Die Erstellungsdeskriptoroption "spaSize" muss den Arbeitspufferbereich angeben, der vom Nicht-EGL-Programm verwendet wird.

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. Sie finden das erforderliche Layout eines Arbeitspufferbereichs unter "Format des IMS-Arbeitspufferbereichs für die Nachrichtenumschaltung". Der Arbeitspufferbereich wird von der EGL-Programmsteuerungslogik erstellt. Der Datenbereich des Arbeitspufferbereichs enthält den Datensatz, den das EGL-Programm an die Anweisung "show" übergeben hat.

    Wenn Sie "spaSize=n" und "spaStatusBytePosition=p" als Erstellungsdeskriptoroptionen festgelegt haben, befindet sich das Segmentierungsstatusbyte entweder an Position 15 oder an letzter Position des Arbeitspufferbereichs. Das Nicht-EGL-Programm sollte den Wert des Segmentierungsstatusbyte ignorieren.

  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 Satzformate übereinstimmen.
  3. Verwenden Sie den Wert des Zuordnungs-MID-Felds "EZEMAP-SSM-STATUS", um zu bestimmen, ob ein Integritätsproblem mit der MFS-Zuordnung (EGL-Formular) vorliegt. Wenn "EZEMAP-SSM-FILLCHAR" den Wert "true" hat und kein ursprünglicher Arbeitspufferbereich ist (das heißt, es handelt sich nicht um die erste Transaktion im Datenaustausch), dann ist ein Integritätsproblem mit der Eingabezuordnung aufgetreten, da der Programmbenutzer wahrscheinlich PA1 oder PA2 gedrückt hat. Ergreifen Sie entsprechende Gegenmaßnahmen, damit die Daten wiederhergestellt werden können, die in der Eingabezuordnung 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.

Übertragung zwischen nicht interaktiven Programmen

In der folgenden Tabelle werden die Methoden dargestellt, die verwendet werden, um Daten zwischen nicht interaktiven Programmen zu übergeben. Ein nicht interaktives Programm ist ein textUI-Hauptprogramm, das mit der auf "0" festgelegten Erstellungsdeskriptoroption "spaSize" (Standardeinstellung) generiert wurde.

Tabelle 2. Programmumschaltung in nicht interaktiven EGL-Programmen (Nicht-IMSADF-Schnittstelle)
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 nicht interaktiv (spaSize = 0). Definieren Sie beide Programme als "segmented = YES". Generieren Sie beide Programme als nicht interaktiv (spaSize = 0).
Durchführung der Übertragung Das übertragende Programm kann kein Formular senden. Wenn es sich um ein EGL-Programm handelt, wird die Anweisung "transfer to transaction" mit einem Datensatz verwendet. Das übertragende Programm muss das Formular in eine Nachrichtenwarteschlange schreiben, die dem Terminal zugeordnet ist. Wenn es sich um ein EGL-Programm handelt, wird die Anweisung "show" mit einem Formular und mit einem optionalen Datensatz verwendet.
Verwendung eines Eingabeformulars Das Zielprogramm kann optional ein Eingabeformular haben. Das Zielprogramm muss ein Eingabeformular haben.
Übergabe eines Datensatzes Der Datensatz wird zur Nachricht übertragen. Der Datensatz, wenn vorhanden, wird zur Arbeitsdatenbank übertragen.
Je nachdem, ob die Anweisung "transfer to transaction" oder "show" verwendet wird, kann Folgendes zwischen zwei nicht interaktiven Programmen durch eine Übertragung übergeben werden:
  • Ein IMS-Nachrichtensegment. Siehe "Format der EGL-Eingabenachricht für die nicht interaktive IMS-Nachrichtenumschaltung".
  • Eine MFS-Zuordnung (EGL-Formular). Es werden dieselben Definitionen für den Nachrichteneingabedeskriptor (MID) und den Nachrichtenausgabedeskriptor (MOD) für interaktive und nicht interaktive Übertragungen verwendet. Sie finden das Datensatzlayout und ein Beispiel einer COBOL-Definition für den Zuordnungs-MID für eine verzögerte Programm-zu-Programm-Nachrichtenumschaltung unter "Format des IMS-MFS-Nachrichteneingabedeskriptors (MID)".

Nicht interaktive direkte Programm-zu-Programm-Nachrichtenumschaltung

Nicht interaktive direkte Programm-zu-Programm-Nachrichtenumschaltungen werden in folgenden Situationen 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

Dieses Verfahren ist bei der Entwicklung von EGL-Programmen mit dem Übertragen mit segmentierten interaktiven EGL-Programmen identisch. Die einzige Ausnahme ist, dass die Erstellungsdeskriptoroption "spaSize" auf "0" (nicht interaktiv) festgelegt ist. Mit diesem Verfahren können zwei nicht interaktive EGL-Programme sowohl den Transaktionsnamen als auch den PSB-Namen ändern, ohne dass dem Programmbenutzer ein Formular angezeigt wird. Es können verschiedene Formulargruppen (formGroups) von den zwei Programmen verwendet werden.

Die zwei Programme sind wie die Programme in einer interaktiven Nachrichtenumschaltung zwischen zwei EGL-Programmen konzipiert: Sie unterscheiden sich nur durch den Wert der Erstellungsdeskriptoroption "spaSize" zum Zeitpunkt der Generierung. Sie können jedoch für eine höhere Leistung "inputForm" für Programm B weglassen:
program ProgramA type textUIProgram 
  {segmented=yes, inputRecord="basicRecord1", 
   @DLI { psb="psb" } }

  // Declarations
  basicRecord1 TRANSFER_RECORD;  
  psb PSB1A;

  // FormGroup
  use FORMGX;

  function main()
    ...
    sysVar.transferName = 'trx1b';
    transfer to transaction sysVar.transferName passing basicRecord1;
    ...
  end // end main
end // end ProgramA 
    
program ProgramB type textUIProgram
  // omit inputForm for better performance
  {segmented=yes, inputRecord="basicRecord1", inputForm="form2",
   @DLI { psb="psb" } }

  // Declarations
  basicRecord1 TRANSFER_RECORD;  
  psb PSB1B;

  // FormGroup
  use FORMGY;

  function main()
    // generated EGL logic does the following:
    //   initializes basicRecord1
    //   if inputForm is specified:
    //     converses form2
    //     performs edits for form2 
    //     converses form2 until form2 passes all edits
    //   gives control to the first statement in the main function
    ...
  end // end main
end // end ProgramB 

Die EGL-generierte Programmsteuerungslogik bearbeitet automatisch die IMS-Nachricht, die zur Übertragung der Steuerung verwendet wird, sowie den Datensatz, der von Program A an Programm B übergeben wird.

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

Das Nicht-EGL-Programm muss ein nicht interaktives IMS-Programm sein. Das EGL-Programm muss auf ähnliche Weise wie Programm B wie in "Nicht interaktive direkte Umschaltung zwischen zwei EGL-Programmen" definiert sein.

Das Nicht-EGL-Programm muss eine Nachricht an den alternativen PCB einfügen. Die Zielposition muss auf den Transaktionsnamen für das EGL-Programm festgelegt werden. Das Nicht-EGL-Programm muss die Headerinformationen (Länge, ZZ und Transaktionsname) in der Nachricht angeben. Sie finden das erforderliche Layout einer Nachricht unter "Format der EGL-Eingabenachricht für die nicht interaktive IMS-Nachrichtenumschaltung". Mit der EGL-generierten Programmsteuerungslogik werden die Headerinformationen automatisch entfernt, sodass das EGL-Programm nur die Daten empfängt.

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

Das Nicht-EGL-Programm muss ein nicht interaktives IMS-Programm sein. Das EGL-Programm muss auf ähnliche Weise wie Programm A wie in "Nicht interaktive direkte Umschaltung zwischen zwei EGL-Programmen" definiert sein.

Das Nicht-EGL-Programm muss eine GET-Anweisung an den Eingabe-/Ausgabe-PCB ausgeben, um den Datensatz abzurufen, den das EGL-Programm an die Anweisung "transfer to transaction" übergeben hat. Sie finden das erforderliche Layout einer Nachricht unter "Format der EGL-Eingabenachricht für die nicht interaktive IMS-Nachrichtenumschaltung". Mit der EGL-generierten Programmsteuerungslogik werden die Headerinformationen (Länge, ZZ, Transaktionsname) automatisch angegeben, sodass das EGL-Programm nur die Daten definiert. Das Nicht-EGL-Programm muss jedoch für den Empfang der Headerinformationen vorbereitet sein.

Nicht interaktive verzögerte Programm-zu-Programm-Nachrichtenumschaltung

Nicht interaktive verzögerte Programm-zu-Programm-Nachrichtenumschaltungen werden in folgenden Situationen 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

Dieses Verfahren ist aus der Sicht eines EGL-Entwicklers mit dem Übertragen mit segmentierten interaktiven EGL-Programmen identisch. Die einzige Ausnahme ist, dass die Erstellungsdeskriptoroption "spaSize" auf "0" festgelegt ist (die "nicht interaktiv" angibt). Mit diesem Verfahren können zwei nicht interaktive EGL-Programme sowohl den Transaktionsnamen als auch den PSB-Namen ändern, wenn dem Programmbenutzer ein Formular angezeigt wird. Sie müssen für beide Programme dieselbe "formGroup" verwenden. Es muss kein Datensatz übertragen werden, aber es ist ein Formular erforderlich.

Die zwei Programme sind wie die Programme in einer interaktiven verzögerten Umschaltung zwischen zwei EGL-Programmen konzipiert: Sie unterscheiden sich nur durch den Wert der Erstellungsdeskriptoroption "spaSize" zum Zeitpunkt der Generierung:
program ProgramA type textUIProgram 
  {segmented=yes, inputRecord="basicRecord2", 
   @DLI { psb="psb" } }

  // Declarations
  basicRecord2 TRANSFER_RECORD;  
  psb PSB2A;

  // FormGroup
  use FORMG2;

  function main()
    ...
    sysVar.transferName = 'trx2b';
    show form2 returning to sysVar.transferName passing basicRecord2;
    ...
  end // end main
end // end ProgramA 
    
program ProgramB type textUIProgram    // inputForm is required
  {segmented=yes, inputRecord="basicRecord2", inputForm="map2",
   @DLI { psb="psb" } }

  // Declarations
  basicRecord2 TRANSFER_RECORD;  
  psb PSB2B;

  // FormGroup
  use FORMG2;

  function main()
    // generated EGL logic does the following:
    //   initializes basicRecord2
    //   performs edits for map2 
    //   converses map2 until map2 passes all edits
    //   gives control to the first statement in the main function
    ...
  end // end main
end // end ProgramB 

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

Das Nicht-EGL-Programm muss ein nicht interaktives IMS-Programm sein. Das EGL-Programm muss auf ähnliche Weise wie Programm B wie in "Nicht interaktive verzögerte Umschaltung zwischen zwei EGL-Programmen" definiert sein.

Mit dem Nicht-EGL-Programm muss Folgendes ausgeführt werden:
  1. Wenn ein Datensatz übertragen wird, rufen Sie "ELATSPUT" auf, um den Datensatz in der Arbeitsdatenbank des EGL-Programms zu speichern. Informationen zur Verwendung von "ELATSPUT" finden Sie unter "EGL-COBOL-Laufzeit-Arbeitsdatenbank für IMS/VS verwenden".
  2. Geben Sie die MFS-Zuordnung (EGL-Formular) mithilfe des Nachrichtenausgabedeskriptors, der dem vom EGL-Programm verwendeten Nachrichteneingabedeskriptor 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 der Zuordnung 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 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 Satzformate übereinstimmen.

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

Das Nicht-EGL-Programm muss ein nicht interaktives IMS-Programm sein. Das EGL-Programm muss auf ähnliche Weise wie Programm A wie in "Nicht interaktive verzögerte Umschaltung zwischen zwei EGL-Programmen" definiert sein. 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 GET-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 Satzformate übereinstimmen.
  2. Wenn Sie einen Datensatz übertragen, rufen Sie "ELATSGET" auf, um den Datensatz aufzurufen, den das EGL-Programm an die Anweisung "show" der Arbeitsdatenbank übergeben hat. Informationen dazu finden Sie unter "EGL-COBOL-Laufzeit-Arbeitsdatenbank für IMS/VS verwenden".

Schnittstellen durch serielle Dateien in IMS herstellen

EGL-Programme können mit Nicht-EGL-Programmen kommunizieren, indem die Anweisungen "add" oder "get next" in Datensätzen in seriellen Dateien, die zur IMS-Nachrichtenwarteschlange gehören, verwendet werden.

Die folgenden Programmtypen können mit "add" Datensätze zu seriellen Dateien hinzufügen:
  • textUI-Hauptprogramme
  • Hauptbasisprogramme
  • Aufgerufene Programme
Nur Hauptbasisprogramme können Datensätze aus seriellen Dateien (mithilfe von ("get next") abrufen.

Zwischen EGL-Programmen

Ein EGL-Programm kann mit "add" eine Reihe von seriellen Datensätzen zur IMS-Nachrichtenwarteschlange hinzufügen, indem die folgenden Informationen im Abschnitt "resourceAssociations" bei der Generierung angegeben werden:
  • Geben Sie an, dass sich die Datei in einer Nachrichtenwarteschlange befindet ("fileType" ist auf "smsgq" oder "mmsgq" festgelegt).
  • Der PCB-Name muss verwendet werden. Dies muss der Name eines alternativen PCBs sein.
Das EGL-Programm bearbeitet automatisch die IMS-Headerinformationen (Segmentlänge, ZZ und Transaktionsname). Der Transaktionsname wird vom standardmäßigen "systemName" erstellt, der im Abschnitt "ResourceAssociations" zum Zeitpunkt der Generierung oder im Wert der Variable "resourceAssociation" für den Datensatz (wenn zum Überschreiben des Standardwerts verwendet) festgelegt ist. Schließen Sie keine IMS-Headerinformationen in die EGL-Definition des seriellen Datensatzes ein.

Ein EGL-Basisprogramm, das entweder als Nachrichtenverarbeitungsprogramm (MPP) oder als transaktionsabhängiges Batch-Nachrichtenverarbeitungsprogramm (BMP) ausgeführt wird, kann die Datei verwenden, um die Nachrichten mit den Anweisungen "get next" zu lesen. Das EGL-Programm entfernt die Headerinformationen aus der Nachricht und platziert die Daten in den seriellen Datensatz.

Von Nicht-EGL-Programmen zu EGL-Programmen

Ein Nicht-EGL-Programm kann eine Reihe von Datensätzen in die IMS-Nachrichtenwarteschlange schreiben, um sie später durch ein EGL-Basisprogramm verarbeiten zu lassen, das entweder als MPP oder als transaktionsabhängige BMP ausgeführt wird. Das Nicht-EGL-Programm muss einen Datensatz in dem Format, das in der folgenden Tabelle angezeigt wird, in einen alternativen Eingabe-/Ausgabe-PCB eingeben, der zu der Transaktion gehört, die den Datensatz verarbeitet.

Tabelle 3. Format des in die Nachrichtenwarteschlange eingefügten Datensatzes
Feld Länge in Byte Datentyp Beschreibung
Segmentlänge 2 Binär Die Länge des Segments.
Reserviert (ZZ) 2 Binär Reserviert.
IMS-Transaktionsname 8 Zeichen Der IMS-Transaktionsname für das EGL-Programm.
Programmdefinierte Felder Variable Variable In diesem Bereich sind die Datenelemente enthalten, die im seriellen EGL-Datensatz definiert sind.

Ein EGL-Basisprogramm verwendet "get next", um eine serielle Datei zu lesen, die zum Eingabe-/Ausgabe-PCB gehört, und verarbeitet dann die Nachricht. Das EGL-Programm entfernt automatisch den IMS-Nachrichtenheader (Segmentlänge, ZZ und Transaktionsname), sodass das Programm nur die Nachrichtendaten im seriellen Datensatz empfängt.

Von EGL-Programmen zu Nicht-EGL-Programmen

Wenn ein EGL-Programm die eine "add"-Anweisung für eine serielle Datei durchführt, die einer Nachrichtenwarteschlange zugeordnet ist, fügt das EGL-Programm automatisch den IMS-Nachrichtenheader vor den Datensatzdaten hinzu und fügt dann die Nachricht in den alternativen PCB ein. Für das EGL-Programm sind nur die tatsächlichen Daten in der Nachricht relevant.

Ein Nicht-EGL-Programm, das entweder als MPP oder als transaktionsabhängige BMP ausgeführt wird, kann die Nachrichtenwarteschlange verarbeiten. Das Format der Nachricht, die in die Nachrichtenwarteschlange eingefügt und vom Nicht-EGL-Programm empfangen wird, wird in der Tabelle im vorherigen Abschnitt "Von Nicht-EGL-Programmen zu EGL-Programmen" dargestellt.


Feedback