EGL-Programme für die IMS-Umgebung entwickeln

In EGL können Sie Programme entwickeln, die auf IMS ausgeführt werden können. Abhängig von dem Programm und den Merkmalen des Buildabschnitts können Sie Programme generieren, die in jedem der folgenden Bereiche ausgeführt werden können: Die Faktoren für diese Bereiche werden untenstehend separat beschrieben.

Die Auswirkungen von Erstellungsdeskriptoren werden ebenfalls ausführlich beschrieben.

Weitere Informationen zum Interagieren mit IMS-Steuerblöcken finden Sie im Kapitel EGL-Unterstützung für Laufzeit-PSBs und -PCBs.

Für den MPP-Bereich generieren

Sie können für den MPP-Bereich zwei Typen von Programmen generieren:
  • textUI-Programme; Textformulare werden akzeptiert oder angezeigt
  • Basisprogramme; Textformulare werden nicht akzeptiert und nicht angezeigt
Die folgenden Aspekte gelten sowohl für textUI-Programme als auch für Basisprogramme:
  • Sie können Ausgaben an eine weitere Nachrichtenwarteschlange senden. Codieren Sie zu diesem Zweck eine ADD-Anweisung zum Schreiben eines seriellen Datensatzes, der (zum Zeitpunkt der Generierung) einem alternativen PCB oder einem sofort wirksamen alternativen PCB zugeordnet wird. Zum Ausgeben in einer Nachrichtenwarteschlange kann der dem seriellen Datensatz zugeordnete Dateityp SMSGQ oder MMSGQ sein. Nähere Informationen dazu finden Sie im Kapitel Serielle- und Druckdateien in IMS verwenden.
  • Sie können Ausgaben an einen Drucker senden. Codieren Sie zu diesem Zweck eine PRINT-Anweisung zum Anzeigen eines Druckformulars. Sie weisen dem Drucker (zum Zeitpunkt der Generierung) einen alternativen PCB oder einen sofort wirksamen alternativen PCB zu, geben den Dateityp als SMSGQ an und geben außerdem den logischen IMS-Terminalnamen für den Drucker an. Alternativ können Sie zur Laufzeit 'converseVar.printerAssociation' zum Ändern des logischen IMS-Terminalnamens verwenden.
  • Sie können mithilfe von vgLib.startTransaction() eine asynchrone Transaktion starten.
  • Sie können nicht auf indizierte oder relative Dateien zugreifen.

Die nächsten Zwei Abschnitte enthalten für die zwei Programmtypen spezifische Informationen.

textUI-Programme

Wenn Sie ein Hauptprogramm codieren, mit dem ein Textformular akzeptiert oder angezeigt wird, werden in EGL die Details Zugriffs auf den Eingabe-/Ausgabe-PCB verarbeitet. Die Programmeigenschaft 'segmented' muss auf YES festgelegt sein.

Sie können mithilfe der CONVERSE-Anweisung mit dem Terminal interagieren. Diese Anweisung stellt ein Textformular dar und gibt Antworten auf die Eingaben des Benutzers, indem die Anweisung, die auf die CONVERSE-Anweisung folgt, verarbeitet wird. Eine Übersicht über das Laufzeitverhalten finden Sie in der EGL-Sprachreferenz.

Die Verwendung von CONVERSE-Anweisungen ist verhältnismäßig einfach, aber bei Verwendung von SHOW-Anweisungen erhalten Sie eine bessere Leistung. Sie können SHOW-Anweisungen zum Zurückkehren zum Anfang desselben Programms oder zu einem anderen Programm verwenden. Bei SHOW-Anweisungen muss dasselbe Formular angegeben werden, das beim empfangenden Programm als 'inputForm' angegeben ist. Durch die Verwendung von SHOW-Anweisungen werden die Daten, die gespeichert werden, auf genau die Informationen im Formular und im Datensatz eingeschränkt, die in der SHOW-Anweisung angegeben sind. Sie müssen jedoch bei der Codierung des Programms sicherstellen, dass im Formular und im Datensatz alle notwendigen Informationen zum Fortsetzen der Interaktion mit dem Programmbenutzer bereitgestellt werden.

Ihr Programm kann als interaktives oder nicht interaktives IMS-Programm ausgeführt werden, es kann an andere Programme übertragen oder andere Programme aufrufen und es kann SHOW-Anweisungen mit Rückgabeklauseln absetzen. Beschränkungen für bestimmte Anweisungstypen finden Sie in dem Kapitel mit den Beschreibungen der Anweisungssyntax.

In IMS werden aufgerufene textUI-Programme nicht unterstützt. Ein Haupt-textUI-Programm kann Übertragungen auf Nicht-EGL-IMS- oder -IMSADF-II-Programme bzw. von diesen auf demselben IMS-System durchführen. Weitere Informationen finden Sie in einem der folgenden Abschnitte: .

Basisprogramme

Wenn Sie ein Hauptprogramm codieren, mit dem Textformulare weder akzeptiert noch angezeigt werden können, stehen Eingaben aus der IMS-Nachrichtenwarteschlange zur Verfügung. Um diese Eingaben abrufen zu können, codieren Sie eine Schleife, durch die eine Nachricht nach der anderen in einen seriellen Datensatz eingelesen wird und die dem Eingabe-/Ausgabe-PCB zugeordnet ist. Für Eingaben aus einer Nachrichtenwarteschlange kann der dem seriellen Datensatz zugeordnete Dateityp SMSGQ oder MMSGQ sein. Nähere Informationen finden Sie im Kapitel Serielle- und Druckdateien in IMS verwenden.

Wenn ein Hauptbasisprogramm gestartet wird, wird der Eingabedatensatz des Programms in den meisten Umgebungen von dem Datensatz aus initialisiert, der vom übertragenden Programm übergeben wurde. Dies gilt nicht für Hauptbasisprogramme, die für die IMS-BMP-Umgebung generiert wurden. Stattdessen muss das Zielprogramm den übertragenen Datensatz aus der Nachrichtenwarteschlange auslesen.

In EGL generierte aufgerufene Basisprogramme können mit in EGL generiertem Java™-Code auf einer anderen Plattform aufgerufen werden.

Ihr Programm kann als nicht interaktives IMS-Programm ausgeführt werden und Übertragungen in ein Programm durchführen oder ein anderes Programm im selben IMS/VS-System aufrufen. Beschränkungen für bestimmte Anweisungstypen finden Sie in dem Kapitel mit den Beschreibungen der Anweisungssyntax.

In IMS können Nachrichtenwarteschlangen nicht von in EGL generierten aufgerufenen Programmen ausgelesen werden. Die Anweisung TRANSFER TO TRANSACTION kann nicht von Basisprogrammen verwendet werden.

Für den MPP-IMS-Fast-Path-Bereich generieren

Sie können sowohl textUI-Programme als auch Basisprogramme zum Ausführen in einem IFP-Bereich (IFP = IMS-Fast-Path) generieren. In diesem Fall ist die Situation dieselbe wie für MPP-Regionen beschrieben, außer dass das Programm (den IMS-Anforderungen entsprechend) nicht interaktiv sein darf. Zudem wird die Verwendung von Eingabenachrichtenwarteschlangen mit mehreren Segmenten (einschließlich die Verwendung von CONVERSE-Anweisungen) aus Leistungsaspekten nicht für IMS-Fast-Path-Programme empfohlen.

Bei IMS gelten Einschränkungen für Fast-Path-Programme. Diese Einschränkungen führen zu den folgenden Einschränkungen bei der Verwendung von EGL-Funktionen mit Fast-Path-Programmen:
  • Die Anweisung TRANSFER TO TRANSACTION wird nur bei Nicht-Fast-Path-Programmen unterstützt. In diesem Fall ist das empfangende Programm für die Antwort an das Terminal verantwortlich. Die Anweisung SHOW ist zulässig.
  • In 'dliLib.AIBTDLI()', 'dliLib.EGLTDLI()' und 'vgLib.VGTDLI()' dürfen nur die für Fast-Path-Transaktionen unterstützten Aufruftypen verwendet werden.
  • Eingabenachrichtenwarteschlagen mit mehreren Segmenten werden nicht unterstützt.
  • Für jedes 'get unique' am Eingabe-/Ausgabe-PCB kann nur eine der folgenden Aktionen durchgeführt werden:
    • Anweisung TRANSFER TO TRANSACTION oder SHOW
    • Anweisung ADD für eine dem alternativen Antwort-PCB zugeordnete serielle Datei
    • Aufrufe der Funktionen 'dliLib.AIBTDLI()', 'dliLib.EGLTDLI()' und 'vgLib.VGTDLI()' mithilfe des Eingabe-/Ausgabe-PCBs oder eines alternativen Antwort-PCBs.
Um anzugeben, dass Sie ein nicht interaktives Programm als IMS-Fast-Path-Programm ausführen möchten, legen Sie die Erstellungsdeskriptoroption 'imsFastPath' auf YES fest. Durch diese Option wird die Verwendung von IMS-Funktionen auf die von der IMS-Fast-Path-Unterstützung erlaubte Verwendung durch und für das generierte Programm beschränkt. Durch die Verwendung von Fast Path werden die Menge und der Typ der Diagnosedaten eingeschränkt, die bereitgestellt werden, wenn im generierten Programm ein Fehler auftritt.
Wenn in der IMS-BMP-Umgebung ein Stapelverarbeitungsprogramm ausgeführt wird und mit diesem IMS-Fast-Path-Datenbanken aktualisiert werden, muss das Programm entweder einen SYNC-Aufruf oder einen CHKP-Aufruf zum Festschreiben der Aktualisierungen durchführen. CHKP-Aufrufe werden wie folgt ausgelöst:
  • Durch Verwenden der Serviceroutine 'sysLib.commit()' vor dem Ende eines stapelorientierten BMPs
  • Durch Sicherstellen, dass die GET NEXT-Anweisung für eine serielle Datei, die einer IMS-Nachrichtenwarteschlange zugeordnet ist, den Status 'endOfFile' (Statuscode für die Qualitätskontrolle) vor dem Ende eines transaktionsorientierten BMPs erhält.

Für den IMS-BMP-Bereich generieren

Sie können ein Basisprogramm generieren, das in einem IMS-BMP-Bereich ausgeführt wird.

Um ein transaktionsorientiertes IMS-BMP-Programm zu erstellen, müssen Sie Eingaben aus der IMS-Nachrichtenwarteschlange abrufen, indem Sie eine Schleife codieren, mit der eine Nachricht nach der anderen in einen seriellen Datensatz ausgelesen wird, der dem Eingabe-/Ausgabe-PCB zugeordnet ist. Die Verwendung von Nachrichtenwarteschlangen mit einem Segment und mit mehreren Segmenten wurde bereits für IMS-MPP-Programme beschrieben. Zum Erstellen eines stapelorientierten IMS-BMP-Programms dürfen keine Eingaben aus der IMS-Nachrichtenwarteschlange ausgelesen werden. Nähere Informationen dazu finden Sie im Kapitel Serielle- und Druckdateien in IMS verwenden.

Mit IMS-BMP-Programmen können Ausgaben wie für IMS-MPP-Programme beschrieben an andere Nachrichtenwarteschlangen oder Drucker gesendet werden. Für IMS-BMP-Programme können alle EGL-Anweisungen verwendet werden, die von einem Programm, das für z/OS-Stapelverarbeitung generiert wurde, verwendet werden können. Im Einzelnen können Sie die folgenden Aufgaben in einem IMS-BMP-Programm oder einemz/OS-Stapelverarbeitungsprogramm ausführen:
  • Eingaben empfangen oder Ausgaben an GSAM-Dateien senden. Codieren Sie zu diesem Zweck eine ADD-Anweisung zum Schreiben eines seriellen Datensatzes, der (zum Zeitpunkt der Generierung) einem GSAM-PCB zugeordnet wird. Legen Sie außerdem den Dateityp auf GSAM fest und geben Sie den Namen der GSAM-Datei an. Alternativ können Sie zur Laufzeit 'recordName.resourceAssociation' zum Ändern des Dateinamens verwenden.
  • Senden Sie die Druckausgabe an eine GSAM-Datei. Zu diesem Zweck muss eine PRINT-Anweisung codiert werden. Weisen Sie dem Drucker (zum Zeitpunkt der Generierung) einen GSAM-PCB zu, legen Sie den Dateityp auf GSAM fest und geben Sie den Namen der GSAM-Datei an. Alternativ können Sie zur Laufzeit 'converseVar.printerAssociation' zum Ändern des Namens der Ausgabe-GSAM-Datei verwenden.

Mit Ihrem Code können Sie Übertragungen zu anderen IMS-BMP-Programmen durchführen oder diese aufrufen. Mit aufgerufenen Programmen können keine Nachrichtenwarteschlangen ausgelesen werden.

Auswirkungen von Erstellungsdeskriptoroptionen

Indem Sie Optionen im Erstellungsdeskriptor festlegen, der zum Zeitpunkt der Generierung verwendet wird, setzen Sie einige Entscheidungen außerhalb des Codes um.

Um ein Programm für einen MPP- oder IFP-Bereich zu generieren, legen Sie 'system' auf IMS/VS fest. Es gelten außerdem die folgenden Optionen:
  • Um die Größe eines Arbeitspufferbereichs zu bestimmen (für interaktive Programme erforderlich), legen Sie die Erstellungsdeskriptoroption 'spaSize' fest. Legen Sie den Wert auf Null fest (dies ist der Standardwert), um sicherzustellen, dass ein Programm nicht interaktiv ist.
  • Um anzugeben, dass mit einem interaktiven Programm Übertragungen von oder zu einem IMSADF-II-Programm durchgeführt werden sollen, legen Sie die Erstellungsdeskriptoroption 'spaADF' auf YES fest.
  • Um ein Fast-Path-Programm (das in einem IFP-Bereich ausgeführt wird) zu generieren, legen Sie die Erstellungsdeskriptoroption 'imsFastPath' auf YES fest.
Um ein Programm für den IMS-BMP-Bereich zu generieren, legen Sie 'system' auf IMSBMP fest.
Zusätzliche Erstellungsdeskriptoroptionen gelten nur für die IMS/VS- und IMS-BMP-Umgebungen:
  • imsLogID
  • mfsExtendedAttr
  • mfsIgnore
  • mfsUseTestLibrary
  • formServicePgmType
  • spaStatusBytePosition
'mfsDevice' muss auch vor dem Generieren der formGroup festgelegt werden.

Feedback