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 (Jobvariablen)

&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. Die Verwendung von Sonder-Jobvariablen in bedingten Ausdrücken ist nur beim Kommando SKIP-COMMANDS erlaubt.

<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>
Da CJC maximal 64 Byte vergleicht, entspricht <jvid> der Angabe von (<jvid>,1,64).

<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>
(<start> + <länge> <= 257)

Default-Wert = 64

<konst>

::=

<c-string 1..64> / <x-string 1..128>
zum Beispiel:

C'HALLO' bzw. 'HALLO' oder X'00FF' bzw. X'0FF'

Hinweis

ACS ersetzt ggf. den bei <jv-name> angegebenen Aliasnamen einer JV durch ihren realen Pfadnamen (gemäß Aliaskatologeintrag).

 

Die Operatoren LT, GT, EQ, LE, GE, NE müssen mit einem Leerzeichen von Konstanten, JV-Namen 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 einige Besonderheiten zu beachten:

  • die Auswertung relationaler Ausdrücke erfolgt byteweise von links nach rechts. Für das Vergleichsergebnis ist das jeweilige Bitmuster im EBCDI-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 Vergleichwert vollständig außerhalb des Defintionsbereichs einer Jobvariablen oder die Jobvariable ist leer (z.B. nach Deklaration), ist das Vergleichsergebnis in jedem Fall „falsch”, auch bei Abfrage auf „ungleich“ (<>). Dadurch geht z.B. das Kommando WAIT-EVENT in solchen Fällen stets in den Wartezustand und bemerkt es, wenn der gesuchte JV-Bereich später geschrieben wird und dann definiert ist.

  • Liegt der Vergleichswert nur teilweise im Definitionsbereich einer JV, wird seine Länge auf den aktuell definierten Teil der JV reduziert.
    Beispiel: Wenn die Jobvariable X den Wert C'123456' enthält, wird die Teilfolge (X,3,8) ausgewertet wie (X,3,4). Dadurch liefert der Vergleich (X,3,8) = C'3456' das Ergebnis "gleich", obwohl der Vergleich einer 8-Byte-Folge mit einem 4-Byte-Wert syntaktisch unmöglich erscheint.

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-PROC PROC.JV
(IN)     /BEG-PROC LOG=*ALL
(IN)     /CRE-JV JV=JV1
(IN)     /SKIP-COMMAND TO-LABEL=END,IF=JV(COND=((JV1,11,1) NE '2')
(OUT)    %  CJC0011 SKIP-COMMANDS: CONDITION = FALSE
(IN)     /MOD-JV JV=(JV-NAME=JV1,POS=1,LENGTH=5),SET-VALUE=C'12345'
(IN)     /SKIP-COMMAND TO-LABEL=END,IF=JV(COND=((JV1,6,2) EQ 'A1')
(OUT)    %  CJC0011 SKIP-COMMANDS: CONDITION = FALSE
(IN)     /SKIP-COMMAND TO-LABEL=END,IF=JV(COND=((JV1,6,2) NE 'A1')
(OUT)    %  CJC0011 SKIP-COMMANDS: CONDITION = FALSE
(IN)     /.END END-PROC

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.