Lerne und übe ABAP – Interne Tabelle Verschachtelung

Lerne und übe ABAP. Erfahre in diesem Artikel anhand der ABAP-Übung „ITAB Nesting“, wie man Daten aus drei verschiedenen internen Tabellen in einer internen Ergebnistabelle kombiniert und dabei die zugehörigen Daten schachtelt. Es gibt 40 geniale ABAP Übungen auf exercism. Du kannst diese Übung entweder in Deinem SAP-System ausprobieren oder Dich kostenlos auf der Plattform anmelden und die Übung absolvieren. Weitere Informationen zu internen Tabellen findest Du auf help.sap.com.

Aufgabenstellung

Lerne, wie man Daten aus drei verschiedenen internen Tabellen in einer internen Ergebnistabelle kombiniert und dabei die zugehörigen Daten verschachtelt.

Deine Klasse erhält drei interne Tabellen, die drei völlig unterschiedliche Datensätze enthalten: ARTISTS, ALBUMS und SONGS.

TYPES: BEGIN OF artists_type,
         artist_id   TYPE string,
         artist_name TYPE string,
       END OF artists_type.
TYPES: artists TYPE STANDARD TABLE OF artists_type WITH KEY artist_id.
TYPES: BEGIN OF albums_type,
         artist_id  TYPE string,
         album_id   TYPE string,
         album_name TYPE string,
       END OF albums_type.
TYPES: albums TYPE STANDARD TABLE OF albums_type WITH KEY artist_id album_id.
TYPES: BEGIN OF songs_type,
         artist_id TYPE string,
         album_id  TYPE string,
         song_id   TYPE string,
         song_name TYPE string,
       END OF songs_type.
TYPES: songs TYPE STANDARD TABLE OF songs_type WITH KEY artist_id album_id song_id.

Die Daten in der Tabelle ARTISTS sind wie unten dargestellt.

ARTIST_IDARTIST_NAME
1Godsmack
2Shinedown

Die Daten in der Tabelle ALBUMS lauten wie unten dargestellt.

ARTIST_IDALBUM_IDALBUM_NAME
11Faceless
12When Lengends Rise
21The Sound of Madness
22Planet Zero

Die Daten in der Tabelle SONGS sehen wie folgt aus.

ARTIST_IDALBUM_IDSONG_IDSONG_NAME
111Straight Out Of Line
112Changes
121Bullet Proof
122Under Your Scars
211Second Chance
212Breaking Inside
221Dysfunctional You
222Daylight

Deine Aufgabe ist es, eine interne Tabelle mit Datensätzen zurückzugeben, die die Werte jeder internen Tabelle auf strukturierte Weise kombinieren, wobei die interne Tabelle SONGS in die interne Tabelle ALBUMS und natürlich die interne Tabelle ALBUMS in die interne Tabelle ARTISTS geschachtelt wird.

Die erwartete Rückgabetabelle hat die folgende Definition:

TYPES: BEGIN OF song_nested_type,
         song_id   TYPE string,
         song_name TYPE string,
       END OF song_nested_type.
TYPES: BEGIN OF album_song_nested_type,
         album_id   TYPE string,
         album_name TYPE string,
         songs      TYPE STANDARD TABLE OF song_nested_type WITH KEY song_Id,
       END OF album_song_nested_type.
TYPES: BEGIN OF artist_album_nested_type,
         artist_id   TYPE string,
         artist_name TYPE string,
         albums      TYPE STANDARD TABLE OF album_song_nested_type WITH KEY album_id,
       END OF artist_album_nested_type.
TYPES: nested_data TYPE STANDARD TABLE OF artist_album_nested_type WITH KEY artist_id.

Es gibt viele Möglichkeiten, diese Aufgabe in ABAP zu lösen. Wie effizient kannst Du die Aufgabe lösen?

Beispiel Programmierung

CLASS zcl_itab_nesting DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.

    TYPES: BEGIN OF artists_type,
             artist_id   TYPE string,
             artist_name TYPE string,
           END OF artists_type.
    TYPES artists TYPE STANDARD TABLE OF artists_type WITH KEY artist_id.
    TYPES: BEGIN OF albums_type,
             artist_id  TYPE string,
             album_id   TYPE string,
             album_name TYPE string,
           END OF albums_type.
    TYPES albums TYPE STANDARD TABLE OF albums_type WITH KEY artist_id album_id.
    TYPES: BEGIN OF songs_type,
             artist_id TYPE string,
             album_id  TYPE string,
             song_id   TYPE string,
             song_name TYPE string,
           END OF songs_type.
    TYPES songs TYPE STANDARD TABLE OF songs_type WITH KEY artist_id album_id song_id.


    TYPES: BEGIN OF song_nested_type,
             song_id   TYPE string,
             song_name TYPE string,
           END OF song_nested_type.
    TYPES: BEGIN OF album_song_nested_type,
             album_id   TYPE string,
             album_name TYPE string,
             songs      TYPE STANDARD TABLE OF song_nested_type WITH KEY song_id,
           END OF album_song_nested_type.
    TYPES: BEGIN OF artist_album_nested_type,
             artist_id   TYPE string,
             artist_name TYPE string,
             albums      TYPE STANDARD TABLE OF album_song_nested_type WITH KEY album_id,
           END OF artist_album_nested_type.
    TYPES nested_data TYPE STANDARD TABLE OF artist_album_nested_type WITH KEY artist_id.

    METHODS perform_nesting
      IMPORTING
        artists            TYPE artists
        albums             TYPE albums
        songs              TYPE songs
      RETURNING
        VALUE(nested_data) TYPE nested_data.

  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.

CLASS zcl_itab_nesting IMPLEMENTATION.

  METHOD perform_nesting.
    nested_data = 
    VALUE #( FOR <fs_artist> IN artists ( artist_id   = <fs_artist>-artist_id
                                          artist_name = <fs_artist>-artist_name
                                          albums      =
    VALUE #( FOR <fs_album> IN albums 
     WHERE ( artist_id = <fs_artist>-artist_id ) ( album_id   = <fs_album>-album_id
                                                   album_name = <fs_album>-album_name
                                                   songs      =
    VALUE #( FOR <fs_song> IN songs 
     WHERE ( album_id = <fs_album>-album_id
      AND   artist_id = <fs_album>-artist_id ) ( song_id   = <fs_song>-song_id
                                                 song_name = <fs_song>-song_name ) ) ) ) ) ).
  ENDMETHOD.

ENDCLASS.

Erklärung

Die Methode perform_nesting führt eine Artikel-Album-Song-Schachtelung durch.

Die Methode verwendet drei Schleifen, die als FOR-IN-Schleifen bezeichnet werden, um durch die Datensätze in den Tabellen „artists“, „albums“ und „songs“ zu durchlaufen.

Innerhalb jeder Schleife werden einige Bedingungen (WHERE-Bedingungen) angegeben, um sicherzustellen, dass nur Datensätze ausgewählt werden, die mit den Datensätzen in den vorherigen Tabellen in Beziehung stehen.

Zum Beispiel verwendet die erste Schleife eine WHERE-Klausel, um nur die Datensätze aus der Tabelle „albums“ auszuwählen, bei denen der Wert von „artist_id“ mit dem Wert von „artist_id“ des aktuellen Datensatzes in der Tabelle „artists“ übereinstimmt.

Die Ausgabe des Programms ist ein verschachteltes Datenobjekt nested_data, bei dem jeder Datensatz in der Tabelle „artists“ einen Datensatz für die zugehörigen Alben und Songs enthält.

Über den Autor

Andreas Geiger

Mein Name ist Andreas Geiger und ich bin ein erfahrener Senior SAP Berater. Mit mehr als 10 Jahren Berufserfahrung habe ich mehrere SAP-Projekte erfolgreich abgeschlossen und umfangreiche Kenntnisse in verschiedenen Bereichen wie SAP FI, SAP MM und ABAP erworben. Nun möchte ich mein Wissen mit Dir teilen, um Dir einen Mehrwert zu bieten und Dich bei Deiner täglichen Arbeit mit dem SAP-System zu unterstützen.

Mehr zu ERP UP

ERP UP unterstützen

Wenn Du mit ERP UP zufrieden bist, kannst Du mich gerne unterstützen. Dabei gibt es unzählige Möglichkeiten, wie Du mich einfach und schnell unterstützen kannst. Wie Du genau ERP UP unterstützen kannst, erfährst Du hier. Vielen Dank.

Schreibe einen Kommentar