Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Bedingte Ausdrücke

&pagelevel(4)&pagelevel

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.