JV-Inhalt bedingt ändern und zu Sprungziel verzweigen
Komponente: | JV |
Funktionsbereich: | Jobvariablen |
Anwendungsbereich: | JOB-VARIABLES |
Privilegierung: | STD-PROCESSING |
Funktionsbeschreibung
Das Kommando MODIFY-JV-CONDITIONALLY prüft den Inhalt eines JV-Teilbereichs gegen einen Vergleichswert (Operand IF-VALUE). Bei Gleichheit erhält der überprüfte Bereich einen neuen Wert (Operand SET-VALUE) und die Verarbeitung wird beim angegebenen Sprungziel fortgesetzt (Operand LABEL).
Der ggf. zu setzende Wert kann direkt als Zeichenkette angegeben oder aus einer anderen JV übernommen werden.
Ergibt die Überprüfung Ungleichheit, bleibt der bisherige JV-Inhalt unverändert und die Verarbeitung wird mit dem auf MODIFY-JV-CONDITIONALLY folgenden Kommando fortgesetzt.
Das Kommando ist nur in ENTER-Dateien und in Prozeduren erlaubt. Es wird im Dialog abgewiesen und daher auch nicht im Menü angeboten.
Hinweis
Während der Bearbeitung durch MODIFY-JV-CONDITIONALLY (Zeitraum zwischen Vergleichen und Ändern) ist die zu ändernde JV gegen Zugriffe durch andere Aufträge geschützt.
Format
MODIFY-JV-CONDITIONALLY | Kurzname: MDJVC | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Operandenbeschreibung
JV-CONTENTS = <filename 1..54 without-gen-vers> / *SUBSTRING(...) / *LINK(...)
Spezifikation des zu prüfenden und ggf. zu ändernden Jobvariableninhalts.
Die JV kann über ihren Namen oder ihren Kettungsnamen identifiziert werden.
Der gewünschte Teilbereich der JV wird gegen den im Operanden IF-VALUE spezifizierten Vergleichswert geprüft. Bei Gleichheit wird er auf den im Operanden SET-VALUE spezifizierten Wert geändert. Bei Ungleichheit bleibt der bisherige Inhalt der JV unverändert.
JV-CONTENTS = <filename 1..54 without-gen-vers>
Name der JV. Diese Angabe ist eine Kurzschreibweise für JV-CONTENTS=*SUBSTRING(<jv-name>, 1, *REST)
.
JV-CONTENTS = *SUBSTRING(...)
Der Inhalt des durch POSITION und LENGTH spezifizierten Teilbereichs wird geprüft und ggf. geändert.
JV-NAME = <filename 1..54 without-gen-vers>
Name der JV.
POSITION = 1 / <integer 1..256>
Position innerhalb der JV, ab der zu vergleichen und ggf. zu ändern ist.
LENGTH = *REST / <integer 1..256>
Anzahl zu vergleichender und ggf. zu ändernder Zeichen.
Die Summe der in den Operanden POSITION und LENGTH angegebenen Zahlen darf 257 nicht überschreiten.
LENGTH = *REST
Für den Vergleich gilt die Länge des Vergleichswertes, für die Änderung die Länge des JV-Wertes ab Position (Operand POSITION) bis zur Position 256. Wenn der zu übertragende Wert kürzer ist, werden keine Leerzeichen angehängt, sondern der folgende Bereich ist (wieder) undefiniert.
JV-CONTENTS = *LINK(...)
Die JV wird über einen Kettungsnamen bezeichnet.
LINK-NAME = <alphanum-name 1..7>
Kettungsname der JV.
POSITION = 1 / <integer 1..256>
Position innerhalb der JV, ab der zu vergleichen und ggf. zu ändern ist.
LENGTH = *REST / <integer 1..256>
Anzahl zu vergleichender und ggf. zu ändernder Zeichen. Die Summe der in den Operanden POSITION und LENGTH angegebenen Zahlen darf 257 nicht überschreiten.
LENGTH = *REST
Für den Vergleich gilt die Länge des Vergleichswertes, für die Änderung die Länge des JV-Wertes ab Position (Operand POSITION) bis zur Position 256. Wenn der zu übertragende Wert kürzer ist, werden keine Leerzeichen angehängt, sondern der folgende Bereich ist (wieder) undefiniert.
IF-VALUE = <c-string 1..254 with-low> / <x-string 1..508>
Vergleichswert, gegen den der im Operanden JV-CONTENTS spezifizierte JV-Inhalt geprüft werden soll. Der Vergleichswert kann nur als Zeichenkette (<c-string> oder <x-string>) angegeben werden; bei <c-string> wird Groß-/Kleinschreibung ausgewertet. Ist der Vergleichswert länger als die Anzahl der zu vergleichenden Zeichen, wird er abgeschnitten; ist er kürzer, wird er mit Leerzeichen ergänzt.
SET-VALUE = <c-string 1..254 with-low> / <x-string 1..508> / <filename 1..54 without-gen-vers> / *LINK(...)
Neuer Wert, den der im Operanden JV-CONTENTS spezifizierte JV-Inhalt erhalten soll, falls der bisherige Wert mit dem Vergleichswert (IF-VALUE) übereinstimmt.
Der zu setzende Wert kann
direkt als Zeichenkette (<c-string> oder <x-string>) angegeben werden; bei <c-string> wird Groß- /Kleinschreibung ausgewertet.
aus einer über ihren Namen oder ihren Kettungsnamen identifizierten JV übernommen werden.
Ist der zu übertragende Wert länger als die Anzahl der zu ändernden Zeichen, wird er abgeschnitten; ist er kürzer, wird er mit Leerzeichen ergänzt.
Das Kommando wird abgewiesen, wenn
die angegebene JV nicht existiert,
die angegebene JV nicht gesetzt ist (keinen Wert hat),
kein Zugriffsrecht für die angegebene JV besteht.
SET-VALUE = <filename 1..54 without-gen-vers>
Name der JV, deren Inhalt als zu setzender Wert übernommen wird.
SET-VALUE = *LINK(...)
Der Inhalt einer über ihren Kettungsnamen bezeichneten JV wird als zu setzender Wert übernommen.
LINK-NAME = <alphanum-name 1..7>
Kettungsname der JV.
LABEL = *NONE / <name 1..8>
(Nicht-S-)Marke, die die Kommandozeile kennzeichnet (Sprungziel), mit der die Verarbeitung fortzusetzen ist, wenn der bisherige JV-Wert mit dem Vergleichswert (IF-VALUE) übereinstimmt. Bei Ungleichheit wird die Verarbeitung beim nachfolgenden Kommando fortgesetzt.
Voreingestellt ist *NONE, d.h. die Verarbeitung wird dem nächsten Kommando fortgesetzt. In diesem Fall kann das Kommandoergebnis (Bedingung erfüllt bzw. nicht erfüllt) in S-Prozeduren bzw. Dialogblöcken dem Kommando-Returncode entnommen werden. Bei Auswertung muss das nächste Kommando SAVE-RETURNCODE sein, da kein Fehlerfall vorliegt!
PASSWORD = *NONE / <c-string 1..4> / <x-string 1..8> / <integer -2147483648..2147483647> / *SECRET
Kennwort zum Schutz vor unberechtigtem Schreiben.
Der Operand PASSWORD hat folgende Besonderheiten:
Im geführten Dialog ist das Eingabefeld automatisch dunkel-gesteuert.
Bei Angabe von *SECRET oder ^ im ungeführten Dialog und in Vordergrund-Prozeduren stellt SDF ein dunkel-gesteuertes Eingabefeld zur verdeckten Eingabe des Kennworts zur Verfügung.
Das eingegebene Kennwort wird nicht protokolliert.
Kommando-Returncode
(SC2) | SC1 | Maincode | Bedeutung |
---|---|---|---|
0 | CMD0001 | Kommando ausgeführt, da Bedingung erfüllt | |
1 | 0 | CMD0001 | Keine Aktion notwendig, da Bedingung nicht erfüllt |
2 | 0 | CMD0001 | Kommando ausgeführt mit Warnung |
1 | CMD0202 | Syntaxfehler | |
32 | CMD0221 | Systemfehler | |
64 | JVS04E0 | Kommando in der Aufruf-Umgebung nicht ausführbar; Fehlerursache, wenn möglich beseitigen (siehe SYSOUT-Meldung JVS04xx) | |
130 | JVS04E1 | Kommando kann vorübergehend nicht ausgeführt werden; Ursache siehe SYSOUT-Meldung JVS04xx | |
130 | CMD2282 | Subsystem JV für unbestimmte Zeit nicht verfügbar |
Hinweis
Anders als die Kommandos ADD-CJC-ACTION, SKIP-COMMANDS und WAIT-EVENT arbeitet das Kommando MODIFY-JV-CONDITIONALLY nicht mit echten bedingten Ausdrücken. Dadurch weicht das Vergleichergebnis in folgenden Fällen ab:
Wenn der im Operanden JV-CONTENTS angegebene JV-Bereich vollständig undefiniert ist, wird das Kommando abgewiesen.
Wenn eine JV-Teilfolge angegeben wird, die länger als der definierte Bereich der JV ist, wird trotzdem in der angegebenen Länge verglichen. Da man im Vergleichswert IF-VALUE keine undefinierten Zeichen angeben kann, ist das Vergleichsergebnis immer „ungleich“.
Beispiel
...... ...... /.RESRV MOD-JV-COND JV=*LINK(LOCK,8,4),IF-VAL='FREE',- / SET-VAL=$SYSJV.TSN,LABEL=RESRVD —————————————————— (1) / WAIT-EVENT UNTIL=*JV(TIME-LIMIT=10,TIMEOUT-LABEL=RESRV)—————— (2) /.RESRVD REMARK 'Belegung erfolgreich' ...... ......
(1) | In die Bytes 8 -11 der durch den Kettungsnamen LOCK bezeichneten Jobvariablen wird die TSN der eigenen Task eingetragen, sofern der bisherige Inhalt dem Wert „FREE“ entspricht. In diesem Fall wird die Verarbeitung beim Kommando mit der Marke RESRVD fortgesetzt. |
(2) | Entspricht der geprüfte Inhalt nicht dem Wert „FREE“, so wird das Kommando MODIFY-JV-CONDITIONALLY nach einer Wartezeit von 10 Sekunden erneut aufgerufen. |