Definition von Parameter Data

Allgemeine Syntax von DEFINE DATA PARAMETER:

DEFINE DATA
   PARAMETER

USING parameter-data-area

parameter-data-definition ../graphics/dot3.gif
END-DEFINE

Dieses Dokument behandelt folgende Themen:

Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.


Funktion

Das DEFINE DATA PARAMETER-Statement wird benutzt, um die Datenelemente zu definieren, die als Eingabeparameter in einem Natural-Subprogramm, einer externen Subroutine oder Helproutine verwendet werden sollen. Diese Parameter können innerhalb des Statements selbst definiert werden (siehe Parameter-Daten-Definition weiter unten); oder sie können außerhalb des Programms in einer Parameter Data Area (PDA) definiert werden, wobei dann das Statement diese Data Area referenziert.

Einschränkungen

  • Parameter-Datenelementen dürfen keine Ausgangswerte oder auch Konstanten-Werte zugewiesen werden, und sie dürfen keine Editiermasken-Definitionen (EM), Kopfzeilen-Definitionen (HD) oder Druckmodus-Definitionen (PM) haben (siehe auch EM-, HD-, PM-Parameter für Feld/Variable).

  • Die Parameter Data Area und die sie referenzierenden Objekte müssen in derselben Library (oder in einer Steplib) enthalten sein.

Syntax-Beschreibung

Syntax-Element-Beschreibung:

Syntax-Element Beschreibung
USING parameter-data-area
PDA-Name:

Der Name der parameter-data-area, die Datenelemente enthält, die als Parameter in einem Subprogramm, einer externen Subroutine oder einem Dialog benutzt werden.

parameter-data-definition
Parameterdatendefinition:

Anstatt eine Parameter Data Area zu definieren, können Parameter auch direkt definiert werden; siehe Definition von Parameterdaten weiter unten.

END-DEFINE
Ende des DEFINE DATA-Statements:

Das für Natural reservierte Wort END-DEFINE muss zum Beenden des DEFINE DATA-Statements benutzt werden.

Definition von Parameterdaten

Für die Parameter-Daten-Definition gilt die folgende Syntax:

level

group-name [(array-definition)]

redefinition
variable-name

../graphics/cbo5.gif

(format-length[/array-definition])

../graphics/cbc5.gif

[BY VALUE [RESULT]] [OPTIONAL]
(

A
U
B

[/array-definition])   DYNAMIC
[(array-definition)] HANDLE OF OBJECT

Syntax-Element-Beschreibung:

Syntax-Element Beschreibung
level
Level-Nummer:

Dies ist eine ein- oder zweistellige Zahl im Bereich von 01 bis 99 (die vorangestellte 0 ist nicht erforderlich), die in Verbindung mit der Gruppierung von Feldern verwendet wird. Felder mit einer Level-Nummer von 02 an aufwärts werden als Teil einer unmittelbar vorangehenden Gruppe mit einer jeweils nächst-niedrigeren Level-Nummer betrachtet.

Durch die Definition einer Gruppe (die auch nur aus einem Feld bestehen kann) ist es möglich, durch Angabe lediglich des Gruppennamens eine ganze Reihe von aufeinanderfolgenden Feldern gleichzeitig zu referenzieren. Bei manchen Statements (CALL, CALLNAT, RESET, WRITE usw.) können Sie den Gruppennamen als Aufrufnamen angeben, um die in der Gruppe enthaltenen Felder zu referenzieren.

Eine Gruppe kann aus weiteren Gruppen bestehen. Bei der Vergabe von Level-Nummern für eine Gruppe darf kein Level ausgelassen werden.

group-name
Gruppenname:

Der Name einer Gruppe. Der Name muss den Regeln zur Definition eines Natural-Variablennamens entsprechen. Siehe auch die folgenden Abschnitte:

array-definition
Definition von Array-Dimensionen:

Mit array-definition definieren Sie die untere und obere Grenze einer Dimension in einer Array-Definition.

Siehe Definition von Array-Dimensionen und Variable Arrays in einer Parameter Data Area.

redefinition
Redefinition:

Mit redefinition können Sie eine Gruppe oder ein einzelnes Feld oder eine einzelne Variable (d.h. Skalar oder Array) redefinieren. Siehe Redefinition.

Anmerkung:
In einer Parameter Data Area ist eine Redefinition von Gruppen nur innerhalb eines REDEFINE-Blocks zulässig.

variable-name
Name der Variablen:

Der der Variablen zuzuweisende Name. Es gelten die Regeln für Natural- Variablennamen. Informationen zu Namenskonventionen für Benutzervariablen, siehe Namen von Benutzervariablen in der Dokumentation Natural benutzen.

format-length
Format/Länge:

Das Format und die Länge des Feldes.

Informationen zu Format und Länge für Benutzervariablen siehe Format und Länge von Benutzervariablen im Leitfaden zur Programmierung.

HANDLE OF OBJECT
Handle of Object:

Wird im Zusammenhang mit NaturalX benutzt. Ein Handle kennzeichnet ein Dialogelement im Code und wird in Handle-Variablen gespeichert.

Weitere Informationen siehe NaturalX im Leitfaden zur Programmierung.

A, U or B
Datentyp:

Alphanumerisch (A), Unicode (U) oder Binär (B) für dynamische Variable.

DYNAMIC
DYNAMIC-Option:

Ein Parameter kann als DYNAMIC definiert werden.

Weitere Informationen zur Verarbeitung von dynamischen Variablen, siehe Dynamische Variablen im Leitfaden zur Programmierung.

 
Call-Modus:

Je nachdem, ob der Call-By-Reference- oder Call-By-Value-Modus benutzt wird, gilt die betreffende Übertragungsart.

Weitere Informationen siehe CALLNAT- Statement.

(without BY VALUE)
Call-By-Reference-Modus:

Ohne BY VALUE (gilt standardmäßig) wird ein Parameter durch Referenzierung seiner Adresse ("By Reference") an ein Subprogramm, eine Subroutine oder eine Function übergeben; das bedeutet, dass ein in einem CALLNAT- bzw. PERFORM-Statement als Parameter angegebenes Feld dasselbe Format und dieselbe Länge haben muss wie das betreffende Feld in dem/der aufgerufenen Subprogramm/Subroutine/Function.

BY VALUE
Call-By-Value-Modus:

Mit BY VALUE wird ein Parameter direkt als Wert (by value) an ein Subprogramm, eine Subroutine oder eine Function übergeben; d.h. statt der Adresse des Parameters wird der Wert selbst übergeben. Das bedeutet, das Feld in dem Subprogramm, der Subroutine oder der Function braucht nicht dasselbe Format und dieselbe Länge zu haben wie der Parameter beim CALLNAT-/PERFORM-Statement oder im Function Call. Format und Länge müssen lediglich datenübertragungskompatibel sein gemäß den Regeln für arithmetische Operationen und den Kompatibilitätsregeln zur Datenübertragung (siehe Leitfaden zur Programmierung).

Mit BY VALUE können Sie zum Beispiel die Länge eines Feldes in einem Subprogramm, einer Subroutine oder Function vergrößern (falls eine Erweiterung des Subprogramms bzw. der Subroutine dies erforderlich machen sollte), ohne deswegen auch die Objekte, die das Subprogramm, die Subroutine bzw. die Function aufrufen, anpassen zu müssen.

Beispiel für BY VALUE:
* Program
DEFINE DATA LOCAL
1 #FIELDA (P5)
...
END-DEFINE
...
CALLNAT 'SUBR01' #FIELDA
...
* Subroutine SUBR01
DEFINE DATA PARAMETER
1 #FIELDB (P9) BY VALUE
END-DEFINE
...
BY VALUE RESULT
Call-By-Value-Result-Modus:

Während BY VALUE für die Übergabe eines Parameters an ein Subprogramm, eine Subroutine oder eine Function gilt, bewirkt die Angabe von BY VALUE RESULT die Übergabe des Parameterwertes in beide Richtungen; d.h. der Parameterwert selbst wird vom aufrufenden Objekt an das Subprogramm, die Subroutine oder die Function übergeben, und bei der Rückkehr zum aufrufenden Objekt wird der Parameterwert selbst von dem Subprogramm, der Subroutine bzw. der Function an das aufrufende Objekt zurückgegeben.

Wenn Sie BY VALUE RESULT verwenden, müssen Format und Länge der betreffenden Felder in beide Richtungen datenübertragungskompatibel sein.

OPTIONAL
Optionale Parameter:

Bei einem ohne OPTIONAL definierten Parameter (Standard) muss ein Wert vom aufrufenden Objekt übergeben werden.

Bei einem mit OPTIONAL definierten Parameter muss ein Wert vom aufrufenden Objekt an diesen Parameter nicht unbedingt übergeben werden. Im aufrufenden Objekt wird die Notation nX benutzt, um Parameter anzugeben, die übersprungen werden, d.h. für die keine Werte übergeben werden.

Bei der SPECIFIED-Option können Sie zur Laufzeit ermitteln, ob ein optionaler Parameter definiert worden ist oder nicht.

Siehe auch Übereinstimmende Formatangaben bei Array-Dimensionen im Leitfaden zur Programmierung.