Hierarchische Struktur für die Segmentierung von Programmen mithilfe der Anweisung 'transfer to program' implementieren
Es gibt eine Gruppe von EGL-Programmen, die bei Ausführung im Segmentmodus in der CICS-Umgebung eine gute Leistung zeigen sollten.
Es ist ein zusätzlicher Vorteil, dass diese Programme leichter zu verwalten, zu testen und zu verbessern sind, als ein einziges EGL-Programm, das dieselben Funktionen aufweist.
Im Diagramm unten ist die Beziehung zwischen vier EGL-Programmen dargestellt, die drei Tasks ausführen. Der einzige Zweck des Menüprogramms ist der Zugriff auf die anderen drei Programme. Wenn der Benutzer die gewünschte Task auswählt, überträgt das Menüprogramm die Steuerung an das entsprechende Programm und verwendet dazu die Anweisung transfer to program (Übertragung zu Programm). Das Menüprogramm übergibt einen kleinen Arbeitsspeichersatz, um die Anforderung weiter zu definieren. Das Programm, an das übergeben wurde, fordert den Benutzer zur Eingabe der erforderlichen Daten auf, führt die Task so oft wie benötigt aus und verwendet die Anweisung transfer to program, um zum Menüprogramm zurückzukehren.

- Ein aufgerufenes Programm kann nur im Segmentmodus ausgeführt werden, wenn alle Programme in der Kette segmentiert sind.
- Aufgerufene Programme geben die Ressourcen des Aufrufenden nicht frei, weil die Programmsteuerung zum aufrufenden Programm zurückkehrt.
- Der Umfang der Daten, die bei einer mit 'segmented' versehenen Anweisung 'converse' temporär ein- bzw. ausgelagert werden, ist viel kleiner. Nur die Datenbereiche des Programms, das aktuell die Steuerung hat, werden gespeichert.
- Zum Freigeben von Ressourcen für die Programme, von denen übertragen wurde
- Zum Verursachen eines Festschreibungspunkts und zum Freigeben von forUpdate-Sperren
- Zum Ermöglichen, dass jedes Programm einen eigenen DB2-Plan und unterschiedliche Programmspezifikationen aufweist
- Zum Ermöglichen, dass jedes Programm in der IMS-Systemdefinition unterschiedliche Informationen zur Leistungsoptimierung aufweist
Zwischen Segmentmodus und Modus ohne Segmentierung dynamisch wechseln
- 0
- Gibt an, dass das Programm nicht segmentiert ist.
- 1
- Gibt an, dass das Programm segmentiert ist.
- Wenn converseVar.segmentedMode auf '1' gesetzt wird, behandelt EGL die Anweisung converse wie eine mit 'segmented' versehene Anweisung 'converse'.
- Wenn converseVar.segmentedMode auf '0' gesetzt wird, behandelt EGL die Anweisung converse wie eine nicht mit 'segmented' versehene Anweisung 'converse'.
Wenn die Anweisung converse erfolgreich abgeschlossen wird, setzt EGL converseVar.segmentedMode auf Basis der Eigenschaft segmented für das Programm auf den Standardwert zurück.
converseVar.segmentedMode = 1; // erzwingt, dass die nächste Anweisung 'converse' mit 'segmented' versehen ist
converseVar.segmentedMode = 0; // erzwingt, dass die nächste Anweisung 'converse' nicht mit 'segmented' versehen ist
Denken Sie daran, dass converseVar.segmentedMode nach jeder Anweisung converse auf den generierten Standardwert zurückgesetzt wird. Sie sollten daher nur converseVar.segmentedMode festlegen, wenn Sie das Verhalten einer bestimmten Anweisung converse von der Standardverarbeitung abweichen lassen möchten.
Hinweis: In der IMS/VS-Umgebung ignoriert EGL die Verwendung der Systemvariablen converseVar.segmentedMode. Alle Programme, die converse-Anweisungen enthalten, müssen in der IMS/VS-Umgebung im Segmentmodus ausgeführt werden.