Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

DECLARE-ELEMENT Strukturelement deklarieren

&pagelevel(4)&pagelevel

Anwendungsgebiet: PROCEDURE

Kommandobeschreibung

Strukturelemente können einfache oder zusammengesetzte Variablen (Arrays, Strukturen, Listen) sein. In der folgenden Operandenbeschreibung werden daher folgende Bezeichnungen verwendet: „einfache Variable“ (wenn das Strukturelement eine einfache Variable ist), „zusammengesetzte Variable“ (wenn das Strukturelement selbst eine zusammengesetzte Variable ist) und „Variable“ (wenn die Aussage sowohl für einfache als auch für zusammengesetzte Variablen gilt).

Variablenattribute, die im Kommando DECLARE-ELEMENT nicht definiert werden können, werden von der übergeordneten Struktur übernommen (z.B. SCOPE-Attribute von BEGIN-STRUCTURE oder DECLARE-VARIABLE).

Ist das Strukturelement eine zusammengesetzte Variable, müssen deren Elemente einzeln initialisiert werden. Zusammengesetzte Variablen können nicht als Ganzes initialisiert werden. Es können auch Elemente von dynamischen Strukturen mit diesem Kommando deklariert werden.

Format

DECLARE-ELEMENT

NAME = list-poss(2000): <composed-name 1..255>(...)

<composed-name 1..255>(...)

INITIAL-VALUE = *NONE / <text 0..1800 with-low expr>

,TYPE = *ANY / *STRING / *INTEGER / *BOOLEAN / *STRUCTURE(...)

*STRUCTURE(...)

DEFINITION = *DYNAMIC / *BY-SYSCMD / <structured-name 1..20>

,MULTIPLE-ELEMENTS = *NO / *ARRAY(...) / *LIST(...)

*ARRAY(...)

LOWER-BOUND = 0 / *NONE / <integer -2147483648..2147483647>

,UPPER-BOUND = *NONE / <integer -2147483648..2147483647>

*LIST(...)

LIMIT = *NONE / <integer 1..2147483647>

Operandenbeschreibung

NAME = list-poss (2000): <composed-name 1..255>(...)
Deklariert den Variablennamen.

INITIAL-VALUE = *NONE
Die Variable wird nicht initialisiert, ihr wird kein Anfangswert zugewiesen.
Das bedeutet: Der Inhalt einer bereits initialisierten Variablen bleibt unverändert; eine neue Variable erhält keinen Wert, sodass ein Lesezugriff einen Fehler verursacht.

INITIAL-VALUE = <text 0..1800 with-low expr>
Weist einer neuen einfachen Variablen einen Anfangswert zu. Der Wert muss zum Datentyp der Variablen passen.
Der Operand kann auch als Ausdruck angegeben werden.
Bei bereits bestehenden einfachen Variablen wird die Angabe ignoriert.Zusammengesetzte Variablen können nicht als Ganzes initialisiert werden.
Elemente von Strukturlayouts dürfen nicht initialisiert werden.

TYPE =
Bestimmt den Datentyp der Variablen.

TYPE = *ANY
Der Variablen können später beliebig wechselnde Werte der Datentypen STRING, INTEGER und BOOLEAN zugewiesen werden.

TYPE = *STRING
Weist der Variablen den Datentyp STRING zu.
Wertebereich: beliebige Zeichenkette.
Länge: 0 bis 4096 Bytes (Ausnahme: wenn die Variable mit einer Jobvariablen verknüpft ist, darf sie maximal 256 Bytes lang sein.)

TYPE = *INTEGER
Weist der Variablen den Datentyp INTEGER zu.Wertebereich: Ganzzahl zwischen -231 und +231-1

TYPE = *BOOLEAN
Weist der Variablen den Datentyp BOOLEAN zu.Wertebereich: TRUE, FALSE, ON, OFF, YES, NO

TYPE = *STRUCTURE(...)
Legt fest, dass das Strukturelement eine zusammengesetzte Variable vom Typ Struktur ist.

DEFINITION = *DYNAMICDynamisch erweiterbare Struktur.

DEFINITION = *BY-SYSCMD
Statische Struktur, deren Elemente anschließend durch Kommandos im SYSCMD-Strom deklariert werden.

DEFINITION = <structured-name 1..20>
Name des Strukturlayouts, über das die statische Struktur definiert wird.

MULTIPLE-ELEMENTS = *NO
Bestimmt, dass das Strukturelement kein Array und keine Liste ist.

MULTIPLE-ELEMENTS = *ARRAY(...)
Deklariert ein Array, das heißt: das Strukturelement wird als zusammengesetzte Variable vom Typ Array deklariert.
Ein Array kann nicht als Ganzes initialisiert werden.

LOWER-BOUND = 0 / <integer -2147483648..2147483647>Untere Grenze für den Arrayindex

LOWER-BOUND = *NONE
Eine untere Grenze für den Arrayindex wird nicht definiert.

UPPER-BOUND = *NONE
Eine obere Grenze für den Arrayindex wird nicht definiert.

UPPER-BOUND = <integer -2147483648..2147483647>Obere Grenze für den Arrayindex

MULTIPLE-ELEMENTS = *LIST(...)
Deklariert eine Liste, das heißt: das Strukturelement wird als zusammengesetzte Variable vom Typ Liste deklariert.

LIMIT = *NONE
Die Anzahl der Listenelemente wird nicht begrenzt.

LIMIT = <integer 1..2147483647>
Definiert die maximale Anzahl der Listenelemente.

Kommando-Returncode

(SC2)

SC1

Maincode

Bedeutung / garantierte Meldungen


0CMD0001Ohne Fehler
10CMD0001Warnung; Element schon deklariert
20CMD0001Warnung; Operand INITIAL-VALUE wurde ignoriert

1CMD0202Syntaxfehler

1SDP0118Kommando im falschen Kontext

3CMD2203Falsche Syntaxdatei

32CMD0221Systemfehler (interner Fehler)

64CMD0216Erforderliches Privileg fehlt

64SDP0091Semantikfehler
garantierte Meldung: SDP1018

130SDP0099Kein Adressraum mehr verfügbar

Beispiel 1

/BEGIN-STRUCTURE NAME = BANKVERBINDUNG(SCOPE = *TASK)
/DECLARE-ELEMENT BANKLEITZAHL(TYPE = *INTEGER)
/DECLARE-ELEMENT KONTEN(TYPE = *INTEGER),-
/MULTIPLE-ELEMENTS = *ARRAY(LOWER-BOUND = 1, UPPER-BOUND =3)
/END-STRUCTURE
/DECLARE-VARIABLE PERSON(TYPE = *STRUCTURE(DEFINITION = *BY-SYSCMD))
/BEGIN-STRUCTURE
/DECLARE-ELEMENT NAME(TYPE = *STRING)
/DECLARE-ELEMENT VORNAME(TYPE = *STRING)
/DECLARE-ELEMENT BANKVERBINDUNG(TYPE = *STRUCTURE-
/(DEFINITION = BANKVERBINDUNG))
/END-STRUCTURE 

Erzeugt die prozedurlokale Struktur PERSON:

PERSON.NAME
PERSON.VORNAME
PERSON.BANKVERBINDUNG.BANKLEITZAHL
PERSON.BANKVERBINDUNG.KONTEN

Die Variablen PERSON.NAME und PERSON.VORNAME wurden mit TYPE = *STRING deklariert, ihnen dürfen also nur Strings zugewiesen werden.
Die Variable PERSON.BANKVERBINDUNG.BANKLEITZAHL wurde mit TYPE = *INTEGER deklariert, ihr dürfen nur Integer-Werte zugewiesen werden.
PERSON.BANKVERBINDUNG.KONTEN ist ein Array mit drei Elementen, dem nur INTEGER-Werte zugewiesen werden dürfen. Die Elemente dieses Arrays werden noch nicht bei der Variablendeklaration erzeugt, sondern erst bei der ersten Zuweisung.

Zum Beispiel sind folgende voneinander unabhängige Zuweisungen möglich:

PERSON.BANKVERBINDUNG.BANKLEITZAHL = 70010080
PERSON.BANKVERBINDUNG.KONTEN#1 = 6001023

Beispiel 2

/DECLARE-VARIABLE VARIABLE-NAME = BAUM(TYPE = *STRUCTURE(*BY-SYSCMD)),-
/MULTIPLE-ELEMENTS = *ARRAY(LOWER-BOUND = 1, UPPER-BOUND = 10),-
/SCOPE = *TASK
/BEGIN-STRUCTURE
/DECLARE-ELEMENT AST,MULTIPLE-ELEMENTS = *ARRAY
/END-STRUCTURE

Danach sind folgende Zuweisungen möglich:

/BAUM#1.AST#1 =...; BAUM#1.AST#2 =...
/BAUM#2.AST#1 =...; BAUM#2.AST#2 =...
.........
/BAUM#10.AST#1 =....; BAUM#10.AST#2 =... 

Beispiel 3

/BEGIN-STRUCTURE NAME = WOHNEINHEIT
/   DECLARE-ELEMENT ANZAHL-ZIMMER
/   DECLARE-ELEMENT ZIMMERGROESSE, MULTIPLE-ELEMENTS = *ARRAY
/   DECLARE-ELEMENT INHABER-NAME
/END-STRUCTURE
/DECLARE-VARIABLE HAUS(TYPE = *STRUCTURE(*BY-SYS)),-
/       MULTIPLE-ELEMENT = *ARRAY
/BEGIN-STRUCTURE
/DECLARE-ELEMENT WOHNUNG(TYPE = *STRUCTURE(DEF = WOHNEINHEIT)),-
/       MULTIPLE-ELEMENTS = *ARRAY
/DECLARE-ELEMENT HAUSBESITZER(TYPE = *STRUCTURE(DEF = WOHNEINHEIT)),-
/       MULTIPLE-ELEMENTS = *ARRAY
/DECLARE-ELEMENT ADRESSE(TYPE = *STRUCTURE(DEF = WOHNEINHEIT)),-
/       MULTIPLE-ELEMENTS = *ARRAY
/END-STRUCTURE

In Zuweisungen werden die Variablen folgendermaßen angesprochen:

HAUS#1.WOHNUNG#1.ANZAHL-ZIMMER =
HAUS#1.WOHNUNG#2.ANZAHL-ZIMMER =
HAUS#1.WOHNUNG#3.ANZAHL-ZIMMER =
...
HAUS#5.WOHNUNG#8.ANZAHL-ZIMMER =
...

Beispiel 4

Die Deklaration eines Strukturlayouts beginnt mit dem Kommando BEGIN-STRUCTURE und endet mit dem Kommando END-STRUCTURE.

/BEGIN-STRUCTURE NAME = AA
/DECLARE-ELEMENT Z
/END-STRUCTURE
/BEGIN-STRUCTURE NAME = BB
/DECLARE-ELEMENT X
/DECLARE-ELEMENT Y
/END-STRUCTURE
/DECLARE-VARIABLE V
/DECLARE-VARIABLE W
/...
/IF (V = W)
/DECLARE-VARIABLE A(TYPE = *STRUCTURE(DEF = AA)) 
/ELSE
/DECLARE-VARIABLE B(TYPE = *STRUCTURE(DEF = BB))
/END-IF

Wenn V = W gilt, wird die Struktur A deklariert (bestehend aus der Variablen A.Z), andernfalls wird die Struktur B deklariert (bestehend aus den Variablen B.X, B.Y). ZwischenBEGIN-STRUCTURE und END-STRUCTURE dürfen Kontrollflusskommandos und Prozeduraufrufe mit INCLUDE-PROCEDURE stehen. In der aufgerufenen Include-Prozedur können jedoch keine Elemente der aufrufenden Prozedur deklariert werden. Die Elemente einer Struktur müssen in der gleichen Prozedur wie ihr einleitendes BEGIN-STRUCTURE und abschließendes END-STRUCTURE deklariert werden. Eine Bezugnahme in der Inclu-de-Prozedur auf eine in dieser Weise unvollständig deklarierte Struktur führt zum Fehler.

Beispiel 5

/DECLARE-VARIABLE DYN-STRUC(TYPE=*STRUCTURE(DEFINITION=*DYNAMIC))
/DECLARE-ELEMENT DYN-STRUC.SUB.NUMBER(TYPE=*INTEGER)
/DECLARE-ELEMENT DYN-STRUC.LIST,MULTIPLE-ELEMENTS=*LIST
/DYN-STRUC.SUB.STRING='DYNAMISCH ERZEUGTES ELEMENT MIT DATENTYP *ANY' 
/DYN-STRUC.SUB.NUMBER=1234
/DYN-STRUC.LIST#1=1
/DYN-STRUC.LIST#2=2

Hinweise

  • Bei der Deklaration von Elementen für ein Strukturlayout definiert die Operandeneinstellung NAME=list-poss(2000): <structured-name 1..20>(...) nur den Namen des Elements; der Name des Layouts ist damit nicht gegeben.

  • Bei der Deklaration von Elementen für eine Variable, die als dynamische Struktur definiert wurde, definiert die Operandeneinstellung NAME=list-poss(2000): <structured-name 1..255>(...) den kompletten Namen des Elements, inklusive dem Name der gesamten Variablen