Erste Schritte
Grundlegende Methoden und Konzepte anwenden
Mit lokalen Klassen arbeiten
Daten aus der Datenbank lesen
Mit strukturierten Datenobjekten arbeiten
Mit komplexen internen Tabellen arbeiten
Datenbankänderungen mit Business Objects implementieren
Das ABAP-RESTful-Anwendungsprogrammiermodell beschreiben

Ein strukturiertes Datenobjekt deklarieren

Objective

After completing this lesson, you will be able to deklarieren Sie ein strukturiertes Datenobjekt.

Strukturierte Datenobjekte

Bisher haben Sie mit einfachen Variablen gearbeitet, die jeweils eine einzelne Information speichern können. In diesem Beispiel haben wir zwei Variablen: eine für den Abflughafen, eine andere für den Zielflughafen.

Wenn Sie einen Datensatz aus der Datenbank lesen, müssen Sie all diese Informationen zusammenhalten. Die beiden Variablen im Beispiel sind völlig unabhängig voneinander und daher nicht geeignet, unterschiedliche zusammengehörende Informationen zu speichern.

In ABAP besteht die Lösung darin, eine strukturierte Variable (kurz auch als „Struktur" bezeichnet) zu verwenden.

Eine Struktur ist ein variables ABAP-Datenobjekt mit einem Namen und einem strukturierten Typ.

Im Beispiel stellt das Datenobjekt connection_full eine solche Struktur dar. Sie ist in acht Komponenten unterteilt, von denen jede ebenfalls über einen Namen und einen Typ verfügt. Sie können sowohl die Struktur als Ganzes als auch die einzelnen Komponenten adressieren. Insbesondere können Sie jede Komponente auf genau die gleiche Weise wie eine eigenständige einfache Variable verwenden.

Es gibt verschiedene Möglichkeiten zum Deklarieren einer Struktur. Sie können strukturierte Typen mit dem Schlüsselwort TYPES definieren oder ein Repository-Objekt vom Typ „Struktur" verwenden. Die Definitionen von Views und Datenbanktabellen können ebenfalls als strukturierte Typen dienen. Im Beispiel wird die CDS-View /DMO/I_Connection als strukturierter Typ verwendet.

In der Debugger-Perspektive gibt es zwei Möglichkeiten, die Struktur und den Inhalt einer strukturierten Variablen zu analysieren:

Variablenvorschau (Mouseover)

Setzen Sie den Fokus auf den Quelltexteditor, und positionieren Sie den Mauszeiger auf einen Variablennamen. Dann öffnet sich ein Dialogfenster mit Details zur Struktur und zum Inhalt des Datenobjekts.

Anzeige in der Variablensicht (Doppelklick)

Um die Variable in der Variablensicht anzuzeigen, geben Sie entweder den Variablennamen unter <Variable eingeben> ein, oder doppelklicken Sie im Quelltext-Editor auf den Variablennamen. Expandieren Sie den Knoten mit dem Strukturnamen, um die Liste der Komponenten anzuzeigen.

Strukturierte Datenobjekte mit der Perspektive Debug analysieren

Strukturierte Datentypen

Ein globaler Strukturtyp ist ein Repository-Objekt, das an beliebiger Stelle im System als Datentyp verwendet werden kann. Im Beispiel wird der Strukturtyp SYMSG verwendet, um variable Nachrichten zu deklarieren.

Wenn Sie die Taste F2 drücken, um die Details dieses Datentyps anzuzeigen, sehen Sie, dass es sich um einen Strukturtyp mit sieben Komponenten handelt. Sie können auch die Namen, die technischen Typen und die Beschreibungen der Komponenten anzeigen.

Wenn Sie die Taste F3 drücken, um zur Definition des Typs zu navigieren, wird mit dem ADT-Editor eine neue View für globale Strukturtypen geöffnet.

Die Definition eines globalen Strukturtyps ist der Definition einer Datenbanktabelle sehr ähnlich. Der Hauptteil der Definition besteht aus einer DEFINE-STRUCTURE-Anweisung mit dem Namen des Strukturtyps. Danach folgt die Liste der Strukturkomponenten in geschweiften Klammern ( { , } ). Jede Komponente verfügt über einen Komponententyp. Komponententypen werden häufig durch Datenelemente beschrieben, es können aber auch Strukturtypen als Komponententypen verwendet werden. Strukturen mit strukturierten Komponenten werden als „geschachtelte Strukturen" bezeichnet.

Zusätzliche Quelltextzeilen vor der Anweisung DEFINE STRUCTURE geben zusätzliche Eigenschaften des Strukturtyps an, darunter einen Bezeichner.

Sie können strukturierte Typen auch in einem ABAP-Programm mit der Anweisung TYPES definieren. Die Strukturdefinition beginnt mit der Anweisung TYPES BEGIN OF <Name des Strukturtyps> und endet mit TYPES END OF <Name des Strukturtyps>. Dazwischen geben Sie den Namen jeder Komponente und deren Typ in einer zusätzlichen TYPES-Anweisung an.

Eine kompakte Form verwendet das Schlüsselwort TYPES nur einmal, gefolgt von einem Doppelpunkt ( : ). Der Zusatz BEGIN OF, der Zusatz END OF und die dazwischen liegenden Komponentendefinitionen werden dann durch Kommata getrennt.

Dies wird als „Kettenanweisung" bezeichnet.

Notiz

In der Vergangenheit wurden Kettenanweisungen in ABAP sehr häufig verwendet. Heutzutage werden sie nur empfohlen, um eng zusammengehörende Anweisungen zusammenzufassen.

In diesem Beispiel wird eine TYPES:-Kettenanweisung verwendet, um den lokalen Strukturtyp st_connection zu definieren, der aus den drei Komponenten airport_from_id, airport_to_id und carrier_name besteht. Jede Komponente wird mit einem Datenelement typisiert, das mit /dmo/ beginnt.

Der lokale Strukturtyp st_connection wird dann in einer DATA-Anweisung verwendet, um die strukturierte Variable connection zu typisieren.

In diesem Beispiel hat die Variable connection einen geschachtelten strukturierten Typ. Der Typ st_nested definiert 4 Komponenten. Drei sind mit Datenelementen typisiert, daher handelt es sich um einfache Komponenten. Die Komponente message ist aber mit einem strukturierten Typ typisiert. Daher handelt es sich um eine strukturierte Komponente. Dadurch wird die Variable connection zu einer geschachtelten Struktur.

ABAP unterstützt nicht nur strukturierte Variablen, sondern auch strukturierte Konstanten. Um eine strukturierte Konstante zu definieren, verwenden Sie BEGIN OF und END OF als Teil einer CONSTANTS-Anweisung. Das Beispiel zeigt eine strukturierte Konstante, die im öffentlichen Bereich der globalen Klasse CL_ABAP_BEHV definiert ist. Alle fünf Komponenten sind mit dem Datenelement SECKEYNAME typisiert. Hinweis: Der Zusatz VALUE ist bei der Definition von Konstanten obligatorisch.

Probieren Sie es aus: Strukturierte Datentypen

  1. Legen Sie wie in der ersten Übung dieser Schulung eine neue globale Klasse an, die das Interface IF_OO_ADT_CLASSRUN implementiert.
  2. Kopieren Sie das folgende Code-Snippet in den Implementierungsteil der Methode if_oo_adt_classrun~main( ):
    Code Snippet
    1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
    * Example 1 : Motivation for Structured Variables ********************************************************************** DATA connection_full TYPE /DMO/I_Connection. SELECT SINGLE FROM /dmo/I_Connection FIELDS AirlineID, ConnectionID, DepartureAirport, DestinationAirport, DepartureTime, ArrivalTime, Distance, DistanceUnit WHERE AirlineId = 'LH' AND ConnectionId = '0400' INTO @connection_full. out->write( `--------------------------------------` ). out->write( `Example 1: CDS View as Structured Type` ). out->write( connection_full ). * Example 2: Global Structured Type ********************************************************************** DATA message TYPE symsg. out->write( `---------------------------------` ). out->write( `Example 2: Global Structured Type` ). out->write( message ). * Example 3 : Local Structured Type ********************************************************************** TYPES: BEGIN OF st_connection, airport_from_id TYPE /dmo/airport_from_id, airport_to_id TYPE /dmo/airport_to_id, carrier_name TYPE /dmo/carrier_name, END OF st_connection. DATA connection TYPE st_connection. SELECT SINGLE FROM /DMO/I_Connection FIELDS DepartureAirport, DestinationAirport, \_Airline-Name WHERE AirlineID = 'LH' AND ConnectionID = '0400' INTO @connection. out->write( `---------------------------------------` ). out->write( `Example 3: Local Structured Type` ). out->write( connection ). * Example 4 : Nested Structured Type ********************************************************************** TYPES: BEGIN OF st_nested, airport_from_id TYPE /dmo/airport_from_id, airport_to_id TYPE /dmo/airport_to_id, message TYPE symsg, carrier_name TYPE /dmo/carrier_name, END OF st_nested. DATA connection_nested TYPE st_nested. out->write( `---------------------------------` ). out->write( `Example 4: Nested Structured Type` ). out->write( connection_nested ).
  3. Drücken Sie STRG + F3, um die Klasse zu aktivieren, und F9, um die Konsolen-App auszuführen.
  4. Analysieren Sie die Konsolenausgabe. Debuggen Sie das Programm, und probieren Sie mit dem Quelltext Verschiedenes aus, um sich mit den Konzepten vertraut zu machen.