Anfang des Inhaltsbereichs

Gemeinsamer Datenbereich Dokument im Navigationsbaum lokalisieren

Der Vollständigkeit halber sei hier eine Technik erwähnt, die es ermöglicht, in extern aufgerufenen Unterprogrammen genauso auf die globalen Daten zuzugreifen, wie in intern aufgerufenen Unterprogrammen. Hierfür muß ein gemeinsamer Datenbereich für das aufrufende Programm und das Programm, welches das Unterprogramm enthält, deklariert werden. Alle mit TABLES und NODES deklarierten Schnittstellen-Arbeitsbereiche verhalten sich ebenfalls wie der gemeinsame Datenbereich.

Gemeinsame Datenbereiche sollten, wie externe Unterprogrammaufrufe überhaupt, nur sparsam verwendet werden. Insbesondere bei der Verwendung von Funktionsbausteinen in geschachtelten Unterprogrammaufrufen können die Regeln für den Zugriff auf gemeinsame Datenbereiche recht kompliziert werden.

Ein gemeinsamer Datenbereich wird in allen beteiligten Programmen mit der Anweisung DATA deklariert:

DATA: BEGIN OF COMMON PART [<name>],

        
      END OF COMMON PART [<name>].

Zwischen den beiden DATA-Anweisungen werden alle globalen Daten deklariert, die im gemeinsamen Datenbereich aufgenommen werden sollen.

In allen beteiligten Programmen müssen exakt die gleichen Datendeklarationen für den gemeinsamen Datenbereich verwendet werden. Daher bietet es sich an,die Deklaration eines gemeinsamen Datenbereichs in einem Include-Programm vorzunehmen.

Man kann in einem Programm mehrere gemeinsame Datenbereiche verwenden. In diesem Falle muß jeder gemeinsame Datenbereich einen Namen <name> haben. Bei nur einem gemeinsamen Datenbereich pro Programm ist die Angabe des Namens <name> optional. Um Konflikte zwischen Programmen zu vermeiden, die Deklarationen für verschiedene gemeinsame Datenbereiche haben, sollten aber immer eindeutige Namen verwendet werden.

Beispiel

Ein Include-Programm INCOMMON enthält die Deklaration eines gemeinsamen Datenbereichs NUMBERS. Der gemeinsame Datenbereich umfaßt die numerischen Felder NUM1, NUM2 und SUM:

***INCLUDE incommon.

DATA: BEGIN OF COMMON PART numbers,
        num1 TYPE i,
        num2 TYPE i,
        sum  TYPE i,
      END OF COMMON PART numbers.

Ein Programm FORMPOOL verwendet INCOMMON und definiert die Unterprogramme ADDIT und OUT:

PROGRAM formpool.

INCLUDE incommon.

FORM addit.
  sum = num1 + num2.
  PERFORM out.
ENDFORM.

FORM out.
  WRITE: / 'Sum of', num1, 'and', num2, 'is', sum.
ENDFORM.

Ein rufendes Programm FORM_TEST verwendet INCOMMON und ruft das Unterprogramm ADDIT im Programm FORMPOOL.

PROGRAM form_test.

INCLUDE incommon.

num1 = 2. num2 = 4.
PERFORM addit(formpool).

num1 = 7. num2 = 11.
PERFORM addit(formpool).

Die Ausgabe sieht so aus:

Sum of          2 and          4 is          6

Sum of          7 and         11 is         18

Die Unterprogramme im Programm FORMPOOL greifen auf die globalen Daten des gemeinsamen Datenbereichs zu.

Beispiel

Ein Programm FORMPOOL enthält zwei Unterprogramme TABTEST1 und TABTEST2:

PROGRAM formpool.

TABLES sflight.

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

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

Ein Programm FORM_TEST ruft TABTEST1 und TABTEST2 auf:

PROGRAM form_test.

TABLES sflight.

PERFORM tabtest1(formpool).
WRITE: / sflight-planetype, sflight-price.

PERFORM tabtest2(formpool).
WRITE: / sflight-planetype, sflight-price.

Nach dem Starten von SAPMZTST sieht die Ausgabe so aus:

A310                150.00

A310                150.00

B747                500.00

A310                150.00

Alle beteiligten Programme haben Zugriff auf den durch TABLES deklarierten Tabellenarbeitsbereich SFLIGHT. Im Unterprogramm TABTEST2 wird der globale Arbeitsbereich durch die Anweisung LOCAL vor Änderungen im Unterprogramm geschützt.

Ende des Inhaltsbereichs