Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Geltungsbereiche PROCEDURE und CURRENT

&pagelevel(5)&pagelevel

Neben den Taskvariablen gibt es „prozedurlokale“ Variablen mit den Geltungsbereichen PROCEDURE und CURRENT. Diese sind für eine Prozedur, die mit CALL-PROCEDURE aufgerufen wurde, identisch. Eine „Includeprozedur“ hingegen, die auf die Variablen der rufenden Prozedur zugreifen kann, ohne sie erneut zu deklarieren oder zu importieren, kann wählen, ob eine Deklaration im Geltungsbereich des Aufrufers (SCOPE = *PROCEDURE) wirksam werden soll oder nur „privat“, für die Includeprozedur selbst gelten soll (SCOPE= *CURRENT).
Wenn eine Variable implizit deklariert wird, erhält sie immer den Geltungsbereich *CURRENT.

Import einer prozedurlokalen Variablen

Eine prozedurlokale Variable kann von einer gerufenen Prozedur importiert werden, wenn sie in der rufenden Prozedur mit dem Kommando

DECLARE-VARIABLE VAR-NAME=...,SCOPE=*CURRENT/*PROCEDURE(IMPORT-ALLOWED=*YES)

deklariert wurde und von der gerufenen Prozedur mit dem Kommando

IMPORT-VARIABLE NAME= ..., FROM=*SCOPE(SCOPE=*CALLING-PROCEDURES)

importiert wird.

Beispiel

Includeprozeduren, die mit den Variablen des Aufrufers arbeiten, können sehr einfach geschrieben werden: Die Deklaration von Parametern und lokalen Variablen ist oft nicht erforderlich. Die nachfolgende Beispielprozedur ruft mehrmals eine Includeprozedur auf, um zu verschiedenen Geldbeträgen die Mehrwertsteuer zu berechnen und nach SYSOUT auszugeben.

Rufende Prozedur:

/"Berechnung der Mehrwertsteuer"
/
/   "Vorbesetzungen"
/ DEZIMAL-ZEICHEN = ','; MWST = 16 "%"
/
/   "1. Berechnung"
/ BETRAG = 5730
/ INCLUDE-PROCEDURE I.MWST
/
/   "2. Berechnung"
/ BETRAG = 9820 * 3
/ INCLUDE-PROCEDURE I.MWST

Gerufene Prozedur I.MWST:

/   "Betrag ausrechnen"
/ STEUER = (BETRAG * MWST + 50) / 100
/
/   "Betrag ausgeben"
/ CT-AUSGABE = STRING(STEUER)
/ CT-LAENGE  = LENGTH(CT-AUSGABE)
/ EUR-AUSGABE = SUBSTR(CT-AUSGABE,1,CT-LAENGE - 2) -
/     // DEZIMAL-ZEICHEN -
/     // SUBSTR(CT-AUSGABE,CT-LAENGE - 1)
/ WRITE-TEXT 'Die Steuer betraegt &EUR-AUSGABE EUR.'

Durch die Auslagerung der obigen Kommandos in eine Includeprozedur erspart man es sich hier, die Berechnung des Steuerbetrags an mehreren Stellen der ersten Prozedur vorzunehmen. Andererseits kann die Includeprozedur auf die Variablen DEZIMAL-ZEICHEN, BETRAG und MWST zugreifen, ohne dass diese jeweils als Parameter übergeben werden müssten.

Wenn eine Includeprozedur selbst Variablen deklariert, kann sie wählen, ob diese in der rufenden Prozedur sichtbar sein sollen. Die Sichtbarkeit ist insbesondere dann sinnvoll, wenn der Hauptzweck des Include-Aufrufs darin besteht, Deklarationen vorzunehmen.

Beispiel

Eine Prozedur

/DECLARE-VARIABLE NAME(TYPE=*STRING),SCOPE=*PROCEDURE
/DECLARE-VARIABLE LAND(TYPE=*STRING,INIT='D'),SCOPE=*PROCEDURE
/DECLARE-VARIABLE PLZ(TYPE=*INTEGER),SCOPE=*PROCEDURE
/DECLARE-VARIABLE ORT(TYPE=*STRING),SCOPE=*PROCEDURE

kann von mehreren Prozeduren mit /INCLUDE-PROCEDURE aufgerufen werden und sorgt jeweils für übereinstimmende Deklarationen der Variablen NAME, LAND, PLZ und ORT. Sollen später Änderungen an den Deklarationen notwendig sein, so genügt es, diese zentral an der Includeprozedur vorzunehmen.

In diesem Fall wird SCOPE = *PROCEDURE spezifiziert, damit die Deklarationen im Pro-zedur-Scope des Aufrufers wirksam werden und nach Abarbeitung des Include-Aufrufs erhalten bleiben.

Deklarationen mit SCOPE = *CURRENT hingegen sind in einer Includeprozedur „aufruflokal“; damit können Konflikte mit Variablendefinitionen in der aufrufenden Prozedur vermieden werden.

Beispiel

Wird in die Beispielprozedur I.MWST auf "Geltungsbereiche PROCEDURE und CURRENT " zu Beginn die Deklaration

/DECLARE-VARIABLE (STEUER, CT-AUSGABE, CT-LAENGE, EUR-AUSGABE)

aufgenommen, so kann auch die rufende Prozedur eine Variable mit einem der angegebenen Namen verwenden, ohne dass diese durch den Include-Aufruf verändert würde (SCOPE = *CURRENT ist voreingestellt und braucht daher im DECLARE-VARIABLE-Kommando nicht angegeben zu werden).

Prozedur-Unterbrechung

Wird eine Prozedur mit dem Kommando HOLD-PROCEDURE oder mit der -Taste unterbrochen, kann im Dialog auf alle prozedurlokalen Variablen der unterbrochenen Prozedur zugegriffen werden. Der Unterbrechungsdialog gehört also zum Sichtbarkeitsbereich der unterbrochenen Prozedur.

Variablen, die während eines Unterbrechungsdialogs deklariert werden, gelten anschließend als prozedurlokale Variablen der unterbrochenen Prozedur, gleich ob CALL- oder INCLUDE-Prozedur.