Anwendungsgebiet: PROCEDURE
Kommandobeschreibung
Das Kommando SELECT-VARIABLE-ELEMENTS gibt die Elemente einer S-Variablen (Listenvariablen) auf den Bildschirm aus und schreibt davon ausgewählte Elemente in eine andere S-Variable. Der Bildschirm kann zur Benutzerführung durch Überschriften strukturiert werden. Die Bildschirmführung (scrollen) erfolgt ähnlich wie im SDF-geführten Dialog; die Funktionstasten können mit dem Kommando MODIFY-SDF-OPTIONS vereinbart werden.
Layout der Bildschirmausgabe
Der Bildschirm beginnt mit einer unterstrichenen Überschriftszeile, gefolgt von einer Kopfzeile zur Erläuterung der ausgegebenen Elementwerte. Beide Textzeilen werden im Kommando vereinbart, Operanden HEADER-LINE und TITLE.
Die Werte eines Elementes werden jeweils in eine Zeile geschrieben. Die Zeile beginnt mit einem Markierungsfeld „( )“, gefolgt von einem Leerzeichen und maximal 75 Zeichen. Die Abstände zwischen den Elementwerten können mit dem Operanden LENGTH implizit festgelegt werden (Standard = ein Leerzeichen). Siehe Beispiel am Ende der Kommandobeschreibung.
Markieren einer Zeile
Ein Element (Zeile) wird durch Eintragen eines beliebigen Wertes zwischen die Klammern des Markierungsfeldes markiert. Der Benutzer kann vereinbaren, dass ein Element mit diesem Wert als Inhalt automatisch der Ausgabevariablen hinzugefügt wird.
Format
SELECT-VARIABLE-ELEMENTS |
FROM-VARIABLE <composed-name 1..255> (...) SELECTION-CODE = *NO / *YES (...) *YES (...) LENGTH = 1 / <integer 1..75>
,HEADER-LINE ,MESSAGE ,DISPLAYED-ELEMENTS = <composed-name 1..255>(...) LENGTH
|
Operandenbeschreibung
FROM-VARIABLE = <composed-name 1..255>
Name der S-Variablen (Input-Variable, Listenvariable), deren Elemente angezeigt werden sollen.
TO-VARIABLE = <composed-name 1..255>(...)
Name einer S-Variablen (Output-Variable), in welche die markierten Elemente geschrieben werden. Bei Angabe von SELECTION-CODE=*NO muss der Typ dieser Variable mit dem Typ der Eingabevariablen übereinstimmen. Bei Angabe von SELECTION-CODE=*YES muss diese Variable eine Liste dynamischer Strukturen sein. Bei korrekter Deklaration der Variable wird ihr Inhalt überschrieben; andernfalls wird der Befehl abgelehnt.
SELECTION-CODE =
Bestimmt, ob der zur Markierung benutzte Wert in die Output-Variable übertragen wird.
SELECTION-CODE = *NO
Der zur Markierung benutzte Wert wird nicht in die Output-Variable übertragen
SELECTION-CODE = *YES(...)
Das Variablenelement SELECTION-CODE wird der Output-Variablen automatisch hinzugefügt und auf den in die Auswahlspalte eingetragenen Wert gesetzt. Die Länge des Werts ist variabel, er wird nicht auf die Breite der Auswahlspalte aufgefüllt.
Ist die Input-Variable eine einfache Liste (integer, boolean oder string), wird der Output-Variablen außerdem das Element VALUE hinzugefügt, in welches das markierte Listenelement übertragen wird.
LENGTH = 1 / <integer 1..75>
Gibt die Breite der Auswahlspalte und damit die maximale Länge des Auswahlwerts an. Je breiter die Auswahlspalte, desto schmäler wird jedoch der Anzeigebereich. Die Angabe hat daher nur einen Sinn, wenn der eingegebene SELECTION-CODE ausgewertet werden soll.
NULL-Zeichen (0x00) zwischen den in die Auswahlspalte eingegebenen Daten werden unterdrückt, d.h. durch NULL-Zeichen getrennte Eingaben werden zusammengefügt. Die Länge des zurückgegebenen SELECTION-CODE-Wertes entspricht der Anzahl eingegebener Zeichen ungleich NULL.
TITLE = *NONE / <c-string_1..75 with-low>
Text, der den Titel der Auswahlspalte angibt. Da der SELECTION-CODE-Wert von zwei Klammern umgeben ist, enthält der TITLE-Wert zwei Zeichen mehr als der LENGTH-Wert, obwohl beide nicht länger als 75 Zeichen sein dürfen. Der angegebene Text wird abgeschnitten, wenn er die maximale Länge überschreitet..
HEADER-LINE = *NONE / <c-string 1..240 with-low>
Gibt die Überschrift der Ausgabe-Maske an. Bis zu 3 Zeilen können angezeigt werden. Für jede Überschriftszeile verringert sich der Platz für die Auswahlliste um eine Zeile. Der Text wird so dargestellt, dass kurze Wörter nicht auf 2 Zeilen geteilt werden, so dass der angezeigte Text länger als der angegebene Wert sein kann. Falls die Ausgabe mehr als 3 Zeilen darstellt, wird sie mit '...' abgekürzt.
MESSAGE=*NONE/<text 1..240 with-low>
Nachricht, die im ersten Auswahlbildschirm unten (in den letzten 3 Zeilen) angezeigt wird. Die Nachricht wird nach Absenden des Bildschirms nicht mehr angezeigt.
Bis zu 3 Zeilen können angezeigt werden. Für jede Nachrichtenzeile verringert sich der Platz für die Auswahlliste um eine Zeile.
Der Text wird so dargestellt, dass kurze Wörter nicht auf 2 Zeilen geteilt werden, so dass der angezeigte Text länger als der angegebene Wert sein kann. Falls die Ausgabe mehr als 3 Zeilen darstellt, wird sie mit '...' abgekürzt.
DISPLAYED-ELEMENTS =
Bezeichnet ein oder mehrere Elemente der Input-Variablen und die Art der Darstellung auf dem Bildschirm.
Bei Strukturelementen werden nur die Werte auf der ersten Stufe ausgegeben.
DISPLAYED-ELEMENTS = *STD
Es ist zu unterscheiden, ob die Elemente wiederum einfache oder zusammengesetzte Variablen sind.
Einfache Variable:
Alle Elementwerte werden ausgegeben; pro Zeile ein Elementwert.
Zusammengesetzte Variable (Struktur):
Nur der Elementwert des jeweils ersten Unterelementes (Strukturelement) wird ausgegeben; pro Zeile ein Elementwert.
DISPLAYED-ELEMENTS = <composed-name 1..255>(...)
Namen von ein oder mehreren Variablenelementen, deren Werte pro Element in eine Zeile geschrieben werden. Die Elementwerte werden in der Reihenfolge ausgegeben, wie in der Operandenliste spezifiziert. Die Elemente müssen immer vom Datentyp „integer“, „boolean“ oder „string“ sein.
LENGTH = *BY-VALUE / <integer 1..75>
Länge, in der der Elementwert auszugeben ist. Die Summe der Elementwerte einer Zeile darf 75 Zeichen nicht überschreiten, einschließlich der Zwischenräume zwischen den Werten. Längere Zeilen werden abgeschnitten. Bei Angabe von *BY-VALUE wird die (implizite) Länge des Elementwertes genommen; maximal 75 Zeichen.
TITLE = *BY-ELEMENT-NAME / <c-string 1..75 with-low>
Text zur Erläuterung des Elementwertes. Maximale Länge wie bei LENGTH=.... angegeben. Ist LENGTH=*BY-VALUE vereinbart, wird der angegebene Text abgeschnitten, wenn er die maximale Länge überschreitet. Bei Angabe von *BY-ELEMENT-NAME wird der Elementname als Text geschrieben.
Kommando-Returncode
(SC2) | SC1 | Maincode | Bedeutung |
0 | CMD0001 | Ohne Fehler | |
1 | CMD0202 | Syntaxfehler | |
3 | CMD2203 | Falsche Syntaxdatei | |
32 | CMD0221 | Systemfehler (interner Fehler) | |
64 | SDP0091 | Semantikfehler garantierte Meldungen: SDP1120, SDP1121, SDP1122 | |
64 | SDP0259 | Ausführung abgebrochen; Selektion ignoriert. | |
130 | SDP0099 | Kein Adressraum mehr verfügbar |
Beispiel
Ausschnitt eines Prozedurablaufs (Löschen bzw. Anzeigen von Dateien):
Die S-Variable OPS enthält die Ausgabe des Kommandos SHOW-FILE-ATTRIBUTES. Ausgewählte Unterelemente dieser Variablen (F-NAME, F-SIZE, CRE-DATE) werden mit dem Kommando SELECT-VARIABLE-ELEMENTS auf den Bildschirm ausgegeben. Bestimmte Elemente werden mit „d“ und „s“ markiert und in die S-Variable SELECTED übertragen, einschließlich dem Markierungszeichen. Die unter der Abbildung stehende (kleine) Prozedur löscht die mit „d“ markierten Dateien und zeigt die Inhalte der mit „s“ markierten Dateien an.
/declare-variable OPS(type=*structure),multiple-elements=*list /declare-variable SELECTED(type=*structure),multiple-elements=*list /declare-variable STRUC(type=*structure) /execute-cmd (show-file-attributes *all,information=*all,- / select=*by-attributes(size=*interval(from=500))),- / structure-output=OPS,text-output=*NONE /select-variable-elements from-variable=OPS,- / ,to-variable=SELECTED(selection-code=*yes(LENGTH=4,TITLE='Select')),- / header-line='Please select files to be deleted (d) or shown (s)',- / displayed-elements=(F-NAME(LENGTH=54,TITLE='File name'),- / F-SIZE(TITLE='Size'),CRE-DATE)
Please select files to be deleted (d) or shown (s) -------------------------------------------------------------------------------- Select File name Size CRE-DATE (d ) A1 501 2024-09-03 (d ) A2 502 2024-09-03 ( ) A3 503 2024-09-03 ( ) A4 504 2024-09-03 (s ) A5 505 2024-09-03 ( ) A6 506 2024-09-03 (s ) A7 507 2024-09-03 ( ) A8 508 2024-09-03 ( ) A9 509 2024-09-03 ( ) B1 510 2024-09-03 (d ) B2 511 2024-09-03 -------------------------------------------------------------------------------- NEXT= + + or ++ or *ALL or *NONE or *EXECUTE or *CANCEL -------------------------------------------------------------------------------- LINE KEYB
/for STRUC=*list(SELECTED) / struc.selection-code = upper-case(struc.selection-code) / if struc.selection-code == 'D' / delete-file &(STRUC.F-NAME) / end-if / if struc.selection-code == 'S' / show-file &(STRUC.F-NAME) / end-if /end-for