Steuerung zur IMS/VS-Umgebung übertragen
Die EGL-textUI-Hauptprogramme, die für die IMS/VS-Zielumgebung generiert werden, werden als IMS-Nachrichtenverarbeitungsprogramme (MPPs) ausgeführt.
- 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.
- Wenn "inputForm" nicht angegeben wird, ist eine direkte Nachrichtenumschaltung erforderlich.
- Wenn "inputForm" angegeben wird, kann entweder eine verzögerte Programm-zu-Programm-Nachrichtenumschaltung (EGL-Anweisung "show") oder eine direkte Programm-zu-Programm-Nachrichtenumschaltung (EGL-Anweisung "transfer to transaction") verwendet werden. Wenn die direkte Nachrichtenumschaltung verwendet wird, wird das Eingabeformular (in der Eigenschaft "inputForm" angegeben) vom Zielprogramm automatisch angezeigt. Dies ist jedoch nicht so effizient wie eine verzögerte Umschaltung, da das Zielprogramm zwei Mal verarbeitet werden muss: ein Mal, um das Eingabeformular anzuzeigen und ein weiteres Mal, um die vom Programmbenutzer eingegebenen Daten zu verarbeiten.
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").
- Ob das Programm interaktiv oder nicht interaktiv ist.
- Ob es sich um eine direkte oder verzögerte Umschaltung handelt.
Ü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 Builddeskriptoroption "spaSize > 0").
| 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. | ||
- 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.
- 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.
- 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
- 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 Builddeskriptoroption "spaSize" muss den Arbeitspufferbereich angeben, der vom Nicht-EGL-Programm verwendet wird.
- 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 Builddeskriptoroptionen 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.
- 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 Builddeskriptoroption "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 Builddeskriptoroptionen 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
- 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 Builddeskriptoroption "spaSize" muss den Arbeitspufferbereich angeben, der vom Nicht-EGL-Programm verwendet wird.
- 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 Builddeskriptoroptionen festgelegt haben, müssen Sie das Segmentierungsstatusbyte am Offset im Arbeitspufferbereich (angegeben von "spaStatusBytePosition=p") initialisieren. Legen Sie das Segmentierungsstatusbyte als Leerzeichen fest.
- Geben Sie den Arbeitspufferbereich in den Eingabe-/Ausgabe-PCB ein.
- 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 Builddeskriptoroption "spaSize" muss den Arbeitspufferbereich angeben, der vom Nicht-EGL-Programm verwendet wird.
- 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 Builddeskriptoroptionen 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.
- 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.
- 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 Builddeskriptoroption "spaSize" (Standardeinstellung) generiert wurde.
| 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. |
- 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
- 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 Builddeskriptoroption "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.
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
- 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 Builddeskriptoroption "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.
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.
- 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".
- 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.
- 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.
- 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.
- textUI-Hauptprogramme
- Hauptbasisprogramme
- Aufgerufene Programme
Zwischen EGL-Programmen
- 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.
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.
| 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.