Mit einem bedingten Ausdruck kann die Verarbeitung der Kommandos ADD-CJC-ACTION, SKIP-COMMANDS oder WAIT-EVENT von Jobvariablenwerten abhängig gemacht werden. Ein bedingter Ausdruck kann „wahr“ oder „falsch“ sein. Er besteht aus einem oder mehreren relationalen Ausdrücken <relation.ausdr>, die wie folgt aufgebaut werden können. Alternative Möglichkeiten sind durch „/“ getrennt; wahlfreie Angaben sind in eckige Klammern eingeschlossen.
<relation.ausdr> ::= (<term> <vergleichs-op> <term>) <term> ::= <jvid> / <jv-teilfolgen-def> / <konst> <vergleichs-op> ::= < / > / = / <= / >= / <> / LT / GT / EQ / LE / GE / NE <jvid> ::= <jvname> / <*jvlink> / <#jvname> / <sonder-jvname> <jvname> ::= Name einer permanenten Benutzer-Jobvariablen <*jvlink> ::= Kettungsname einer Benutzer-Jobvariablen mit vorangestelltem Stern (*) <#jvname> ::= Name einer temporären Benutzer-Jobvariablen <sonder-jvname> ::= Name einer Sonder-Jobvariablen ohne Katalogkennung, aber mit Angabe der Benutzerkennung SYSJV <jv-teilfolgen-def> ::= (<jvid> [,[<start>][,<länge>]]) <start> ::= <integer 1..256> Default-Wert = 1 <länge> ::= <integer 1..64> Default-Wert = 64 (<start> + <länge> Î 257) <konst> ::= <c-string 1..64> / <x-string 1..128> zum Beispiel: C'HALLO' bzw. 'HALLO' oder X'00FF' bzw. X'0FF'
Die Operatoren LT, GT, EQ, LE, GE, NE müssen mit einem Leerzeichen von anderen Buchstaben (in Konstanten, Jobvariablen- oder Kettungsnamen) getrennt werden.
Besonders zu beachten ist außerdem, dass Groß- und Kleinschreibung in bedingten Ausdrücken erhalten bleibt.
Komplexe bedingte Ausdrücke ergeben sich durch Kombination von relationalen Ausdrücken mithilfe von logischen Operatoren:
<bed.ausdr> ::= (<relation.ausdr> <logisch.op> <relation.ausdr>) / (<bed.ausdr> <logisch.op> <bed.ausdr>) / (NOT <bed.ausdr>) <logisch.op> ::= AND / OR / XOR logisches UND logisches ODER exklusives ODER
Beispiel
(JV1=C'START') ((JV2=C'O.K.') AND (*LINK<=C'12')) (((JV4,10,3)=C'NEU') OR (#TEMP.JV=C'Y') AND (*LINK2=X'00'))
Hinweis
Die Auswertung eines bedingten Ausdrucks erfolgt „von innen nach außen“ entsprechend der Klammerung. Auf der gleichen Klammerstufe werden die logischen Operationen in folgender Reihenfolge durchgeführt:
1. NOT 2. AND 3. OR 4. XOR
So wird z. B. der Ausdruck
(NOT (JV1=C'ABC') OR (JV2=C'Z') AND (JV3<>JV4))
ausgewertet wie
((NOT (JV1=C'ABC')) OR ((JV2=C'Z') AND (JV3<>JV4)))
Beim Vergleich von Jobvariablen-Werten sind folgende Hinweise zu beachten:
die Auswertung relationaler Ausdrücke erfolgt byteweise von links nach rechts. Für das Vergleichsergebnis ist das jeweilige Bitmuster im EBCDIC-Code maßgebend. So sind z.B. die abdruckbaren Ziffern 0 bis 9 (X’F0’ bis X’F9’) „größer“ als Buchstaben A ... Z (X’C1’ ... X’E9’), und Großbuchstaben größer als Kleinbuchstaben.
Liegt der Vergleichswert außerhalb des Definitionsbereichs einer Jobvariablen oder ist die Jobvariable leer (z.B. nach Deklaration), ist das Vergleichsergebnis in jedem Fall „falsch“, auch wenn die Abfrage mit ’<>’ (ungleich) erfolgt.
Besteht der Inhalt einer Jobvariablen aus binären Nullen, so ist die Jobvariable nicht leer. Es gilt des Weiteren, dass bei zwei ansonsten gleichen Jobvariablen-Werten derjenige Wert als der größere gilt, der um eine binäre Null länger ist.
Beispiel
Die folgenden Ausdrücke sind „wahr“
C' ' < C'A' C'a' < C'A' X'81' < X'C1' C'A' < C'B' X'0123' < X'0124' C'B' < C'BB' X'C1' < X'C100' C'GUTEN ABEND' < C'GUTEN MORGEN' C'ZZZZZZZZZ' < C'0' (!) X'F0F0F0F0' < X'F1' C'8' < C'9' C'899999999' < C'9' (!) X'3FFF' < C' '
Die folgenden Abfragen werden mit „falsch“ beantwortet.
(IN) CALL-PROCEDURE NAME=PROC.JV (IN) /.ANF BEGIN-PROCEDURE LOGGING=*ALL (IN) /CREATE-JV JV=JV1 (IN) /SKIP-COMMANDS TO-LABEL=END,IF=*JV(CONDITION=((JV1,11,1) NE '2')) (OUT) % CJC0011 SKIP COMMAND: CONDITION = FALSE (IN) /MODIFY-JV JV-CONTENTS=*SUBSTRING ( ) (JV-NAME=JV1,POSITION=1,LENGTH=5),SET-VALUE=C'12345' (IN) /SKIP-COMMANDS TO-LABEL=END,IF=*JV(CONDITION=((JV1,6,2) EQ 'A1')) (OUT) % CJC0011 SKIP COMMAND: CONDITION = FALSE (IN) /SKIP-COMMANDS TO-LABEL=END,IF=*JV(CONDITION=((JV1,6,2) NE 'A1')) (OUT) % CJC0011 SKIP COMMAND: CONDITION = FALSE (IN) /.END END-PROCEDURE
Ein bedingter Ausdruck wird in folgenden Fällen zurückgewiesen:
Eine JV, auf die Bezug genommen wird, ist nicht zugreifbar (zerstörter Katalog).
Eine JV, auf die Bezug genommen wird, ist im angegebenen Katalog nicht vorhanden.
Der Benutzer ist zum Lesezugriff nicht berechtigt bzw. das für den Lesezugriff erforderliche Kennwort ist nicht in der Kennwort-Tabelle des Auftrags eingetragen.