Es gibt eine Reihe von Faktoren, die Sie beim Entwerfen von segmentierten Programmen beachten sollten.
- Wenn ein aufgerufenes Programm eine mit 'segmented' versehene Anweisung 'converse' ausführt, das heißt, das Programm enthält die Anweisung converse und die Einstellung für die Eigenschaft segmented lautet 'Ja', gelten folgende Überlegungen:
- Für alle Programme in der Aufrufkette muss für die Eigenschaft segmented der Wert 'Ja' eingestellt sein. Dies bedeutet, dass wenn Programm A (nicht segmentiert) Programm B aufruft (nicht segmentiert) und Programm B Programm C aufruft (segmentiert), für Programm A und B auch die Eigenschaft segmented 'Ja' eingestellt sein muss.
- Wenn Sie ein Programm in ein segmentiertes Programm ändern, verbraucht es mehr Ressourcen; dies bedeutet, dass der Aufruf eines Programms, das eine mit 'segmented' versehene Anweisung 'converse' ausführt, einen negativen Einfluss auf die Leistung der Ausführungseinheit haben kann.
- Die Segmentierung beendet die aktuelle Systemtask. CICS und IMS schreiben alle wiederherstellbaren Ressourcen fest, wenn die Task beendet wird.
- Ein Datensatz kann nicht während der Ausführung einer mit 'segmented' versehenen Anweisung converse für eine Aktualisierung gehalten (gesperrt) werden.
Anmerkung: Das Halten eines Datensatzes für die Aktualisierung während der Ausführung der Anweisung converse ist in keinem System ein bewährtes Verfahren, da dadurch während der Bedenkzeit des Benutzers Ressourcen gesperrt werden und daher weitere Benutzer nicht auf den Datensatz zugreifen können.
Ein besseres Verfahren zum Halten eines Datensatzes für die Aktualisierung während der Ausführung der Anweisung converse finden Sie im folgenden Codebeispiel.
customerRecord Customer;
savedRecord Customer;
updateComplete char(1) = "N";
// Überprüfen, dass während der Bedenkzeit des Benutzers keine Daten geändert wurden
customerRecord.CustomerID = 1;
get customerRecord;
while (updateComplete == "N")
move customerRecord to savedRecord byName;
move customerRecord to custDetailForm byName;
converse custDetailForm;
// Eingabedaten in Formular custDetail validieren
// Vorausgesetzt Validierung wurde bestanden, fortfahren mit
get customerRecord forUpdate;
// Alle Felder in customerRecord überprüfen, um festzustellen,
// ob während der Bedenkzeit des Benutzers Änderungen vorgenommen wurden
if (customerRecord.field1 == savedRecord.field1
&& customerRecord.field2 == savedRecord.field2
...
&& customerRecord.fieldn == savedRecord.fieldn )
// Falls keine Änderungen erfolgt sind, geänderte Daten aus Formular in customerRecord verschieben
replace customerRecord;
updateComplete = "Y";
else
// Nachricht an Benutzer, dass Daten von anderer Person geändert wurden
end
end
record Customer type ...
field1 ...
field2 ...
...
fieldn ...
end
- Sperren, die vom Schlüsselwort forUpdate und aktuellen Positionen in Dateien oder Datenbanken erstellt wurden, gehen während der Ausführung von converse verloren, wenn eine Ausführung im Segmentmodus erfolgt.
- Die Programmstruktur und die Ein-/Ausgabeobjekte legen den Umfang der Verzögerung für die Antwortzeit fest, die durch die temporäre Ein- und Auslagerung verursacht wird.
- Die längste Verzögerung tritt in einem segmentierten Programm auf, das eine große Menge von Daten in variablen Feldern in Formularen oder große Datensätze und eine kurze Bedenkzeit für den Benutzer aufweist.
- Die kürzeste Verzögerung tritt in einem Programm mit dem Typ 'Menü' auf, das eine kleine Menge von Daten in variablen Feldern in Formularen, nur einen kleinen Datensatz und lange Zeiträume für die Bedenkzeit des Benutzers aufweist.
- Wenn in CICS für den Operanden UCTRAN der Wert 'Ja' für die Einträge PROFILE oder TYPETERM für das Terminal festgelegt wurde, setzt CICS Benutzerdaten in Formularen in Großbuchstaben um, wenn der Code im Segmentmodus ausgeführt wird.
Das Umsetzen von Benutzerdaten durch CICS führt dazu, dass die EGL-Eigenschaft upperCase keine Auswirkung hat.
- Wenn der Benutzer auf CICS-Systemen die Eingabetaste oder eine Funktionstaste drückt, gibt das System über CICS Eingabedaten an das EGL-Programm zurück. CICS untersucht den Beginn der Daten und sucht nach Befehlen für die Anzeigeformatierungsunterstützung. Beim Entwerfen von segmentierten Programmen müssen Sie sicherstellen, dass das erste physische Variablenfeld in Ihrem EGL-Formular keinen gültigen Blätterbefehl für die Anzeigeformatierungsunterstützung hat. Weitere Informationen zu Überlegungen beim Entwerfen von segmentierten Programmen in CICS finden Sie in der CICS-Dokumentation.