Show TOC Anfang des Inhaltsbereichs

Globale Daten des Rahmenprogramms  Dokument im Navigationsbaum lokalisieren

Unterprogramme haben Zugriff auf alle globalen Daten des definierenden Programms (Rahmenprogramm). Die Definition einer Parameterschnittstelle ist also nicht unbedingt notwendig, wenn im Unterprogramm keine Daten geändert werden oder wenn nur sehr wenige Daten involviert sind.

Beispiel

FORM header.

   WRITE: / 'Program started by', sy‑uname,
          / 'on host', sy‑host,
            'date:', sy‑datum, 'time:', sy‑uzeit.
  
ULINE.

ENDFORM.

Ein Unterprogramm header wird angelegt, mit dem z.B. ein Kopf auf einer Liste erstellt werden kann (siehe auch das Beispiel in INCLUDE-Programme).

Wenn Unterprogramme aber komplexere Operationen auf Daten ausführen sollen, ohne die globalen Daten des Programms zu beeinflussen, sollte eine Parameterschnittstelle für die gezielte Datenübernahme und -übergabe definiert werden. Im Hinblick auf einen sauberen Programmierstil und den Kapselungseffekt wird die Verwendung einer Parameterschnittstelle immer empfohlen, wenn ein Unterprogramm Daten benötigt, zumindest aber wenn Daten verändert werden.

Globale Datenobjekte vor Änderung schützen

Um den Wert eines globalen Datenobjekts gegen Änderungen im Unterprogramm zu schützen, verwendet man die Anweisung

LOCAL f.

Diese Anweisung darf nur zwischen den Anweisungen FORM und ENDFORM stehen. Mit LOCAL können Sie die Werte globaler Datenobjekte bewahren, die nicht durch eine Datendeklaration im Unterprogramm verborgen werden können.

Sie können z.B. einen mit TABLES definierten globalen Tabellenarbeitsbereich nicht nochmals lokal mit einer weiteren TABLES-Anweisung in einem Unterprogramm deklarieren. Möchten Sie den Tabellenarbeitsbereich lokal verwenden, jedoch den Inhalt außerhalb des Unterprogramms erhalten, müssen Sie LOCAL verwenden.

Beispiel

REPORT demo_mod_tech_local.

TABLES sflight.

PERFORM tabtest1.
WRITE: / sflight-planetype, sflight-price currency sflight-currency.

PERFORM tabtest2.
WRITE: / sflight-planetype, sflight-price currency sflight-currency.

FORM tabtest1.
  sflight-planetype = 'A310'.
  sflight-price = '150.00'.
  WRITE: / sflight-planetype, sflight-price currency sflight-currency.
ENDFORM.

FORM tabtest2.
  LOCAL sflight.
  sflight-planetype = 'B747'.
  sflight-price = '500.00'.
  
WRITE: / sflight-planetype, sflight-price currency sflight-currency.
ENDFORM.

Nach der Ausführung sieht die Ausgabe so aus:

A310                150.00

A310                150.00

B747                500.00

A310                150.00

In diesem Beispiel wird ein Tabellenarbeitsbereich sflight für die Datenbanktabelle sflight angelegt. Dem Tabellenarbeitsbereich sflight werden in tabtest1 und tabtest2 verschiedene Werte zugewiesen. Während die in tabtest1 zugewiesenen Werte global gelten, gelten die in tabtest2 nur lokal.

 

Ende des Inhaltsbereichs