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_ID | ARTIST_NAME |
---|---|
1 | Godsmack |
2 | Shinedown |
Die Daten in der Tabelle ALBUMS lauten wie unten dargestellt.
ARTIST_ID | ALBUM_ID | ALBUM_NAME |
---|---|---|
1 | 1 | Faceless |
1 | 2 | When Lengends Rise |
2 | 1 | The Sound of Madness |
2 | 2 | Planet Zero |
Die Daten in der Tabelle SONGS sehen wie folgt aus.
ARTIST_ID | ALBUM_ID | SONG_ID | SONG_NAME |
---|---|---|---|
1 | 1 | 1 | Straight Out Of Line |
1 | 1 | 2 | Changes |
1 | 2 | 1 | Bullet Proof |
1 | 2 | 2 | Under Your Scars |
2 | 1 | 1 | Second Chance |
2 | 1 | 2 | Breaking Inside |
2 | 2 | 1 | Dysfunctional You |
2 | 2 | 2 | Daylight |
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
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.
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.