This is a test message to test the length of the message box.
Login
|
ABAP Tools IDE Actions
Erstellt von Software-Heroes

ABAP Tools - IDE Actions (Tabelle)

98

Wie kannst du eigentlich eine Tabelle erzeugen und in der IDE Action bearbeiten? Schauen wir uns die Möglichkeiten für die Eingabe an und wie du am Ende mit den Daten umgehen kannst.

Werbung


In diesem Artikel schauen wir uns Tabellen für den IDE Action Input an und wie du sie in deiner Entwicklung effizient verwenden kannst.

 

Einleitung

Bisher hatten wir für die Ausgabe vor allem einfache Felder verwendet, die jeweils eine Information aufnehmen können. Wie sieht es aber nun zum Beispiel aus, wenn du mehr Informationen bearbeiten möchtest und diese in einem strukturierten Format vorliegen? Dazu steht dir die Tabelle zur Verfügung, die wir in diesem Artikel einmal genauer anschauen.

 

Struktur

Dazu beginnen wir mit einem neuen Datentyp, den wir für die Ausgabe und Bearbeitung verwenden wollen. Da wir eine Tabelle definieren wollen, definieren wir uns eine Struktur und den entsprechenden Tabellentypen dazu.

TYPES:
  BEGIN OF table_line,
    "! <p class="shorttext">Key</p>
    key_field  TYPE c LENGTH 15,
    "! <p class="shorttext">Number</p>
    int_number TYPE i,
    "! <p class="shorttext">Long text</p>
    long_text  TYPE string,
  END OF table_line.
  
TYPES table_body TYPE STANDARD TABLE OF table_line WITH EMPTY KEY.

 

Dazu binden wir das Feld in unsere "input" Struktur für die Ausgabe ein. 

table_input   TYPE table_body,

 

Rufen wir nun die IDE Action auf und schauen uns das Ergebnis an. Dabei fällt auf, dass nun eine Tabelle angezeigt wird, wir aber keine Möglichkeiten zur Interaktion mit der Tabelle haben. Auch sieht aktuell das Layout etwas komisch aus.

 

Da wir den Inhalt der Tabelle aktuell nicht ändern können, fügen wir erst einmal einen Datensatz in die Tabelle ein. Defaultwerte können wir in der Methode CREATE_INPUT_CONFIG setzen, bevor wir die Konfiguration und die Eingabe an die Factory übergeben.

INSERT VALUE #( key_field = 'ABC'
                long_text = `This is a longer text` ) INTO TABLE input-table_input.

 

Wir erhalten nun einen Datensatz in der Tabelle und wenn wir diesen anklicken, dann sehen wir die Daten auf der rechten Seite der Tabelle und können weitere Anpassungen vornehmen.

 

Layout

Passen wir nun etwas am Layout der IDE Action an, um die Standard Editieroptionen der Tabelle zu aktivieren. Dazu müssen wir keine weitere Konfiguration an der Tabelle vornehmen, sondern setzen das Layout der Konfiguration. Über das Interface IF_SD_CONFIG_ELEMENT findest du die passenden Konstanten für das Layout.

configuration->set_layout( if_sd_config_element=>layout-grid ).

 

Mit dieser Einstellung aktivieren sich die Buttons an der Tabelle. Damit können wir auch neue Datensätze hinzufügen und bearbeiten. Dazu einfach auf der linken Seite den Datensatz wählen und Rechts bearbeiten.

 

Wollen wir etwas mehr Tabelle haben und die Bearbeitung in einem Popup durchführen, dann können wir den Typen direkt auf Tabelle umstellen. Dazu holen wir uns über die Methode GET_STRUCTURED_TABLE ein Objekt für unsere Tabelle und können auch hier ein neues Layout definieren. Zusätzlich setzen wir die Option COLLAPSED auf True, damit wird beim Start der IDE Action der Bereich eingeklappt dargestellt. Damit kannst du optionale Optionen erst einmal ausblenden.

DATA(table) = configuration->get_structured_table( `table_input` ).
table->set_layout( type      = if_sd_config_element=>layout-table
                   collapsed = if_sd_config_element=>true ).

 

Wenn die IDE Action nun geladen wird und wir den Bereich wieder aufklappen, dann findest nun die Tabelle über die komplette Breite. Damit kannst du eine große Anzahl an Objekten und Informationen schnell und einfach präsentieren. Zusätzlich haben wir nun einen neuen Button, um den Datensatz zu ändern.

 

Eingabe

Als nächsten Schritt passen wir nun die Feldeigenschaften an. Ähnlich wie bei den normalen Feldern, können wir es auch in diesem Fall machen. Allerdings müssen wir uns erst das Strukturobjekt der Tabelle geben lassen, um dann die einzelnen Elemente der Struktur anpassen zu können.

DATA(structure) = table->get_line_structure( ).
structure->get_element( `long_text` )->set_multiline( if_sd_config_element=>height-medium ).
structure->get_element( `int_number` )->set_read_only( ).

 

Gehst du nun auf "Edit" für einen Datensatz, dann wird uns das folgende Bild angezeigt. Wir haben die verschiedenen Einstellungen an den Feldern geändert. Das Nummernfeld ist nun nicht mehr eingabebereit und der Langtext wird als größeres Feld angezeigt und bietet nun mehr Platz für das Einfügen von Text.

 

Seiteneffekt

Als letzten Schritt möchten wir nun die Daten in der Tabelle automatisch aktualisieren, nachdem wir einen neuen Datensatz eingefügt haben. Definieren wir zuerst in der Konfiguration für die Struktur den Seiteneffekt. Dieser soll erst nach Anlage eines neuen Datensatzes ausgelöst werden.

structure->set_sideeffect( after_create = abap_true ).

 

Dazu bauen wir die Klasse ZCL_BS_DEMO_IDE_FIRST_SIDE um und ändern die Validierung der Ermittlung. In diesem Fall führen wir die bisherige Logik im AFTER_UPDATE aus und fügen einen neuen Zweig für AFTER_CREATE ein. Damit können wir auf die unterschiedlichen Events in der gleichen Implementierung reagieren.

CASE determination_kind.
  WHEN if_sd_determination=>kind-after_update.
    input-se_output = |{ input-output_format }: { strlen( input-se_input ) }|.

  WHEN if_sd_determination=>kind-after_create.

ENDCASE.

 

Von der Logik her, wollen wir nach jeder neuen Zeile die Nummerierung in der Liste aktualisieren. Dabei soll die maximale Nummer in der ersten Zeile stehen und sich mit jeder Zeile reduzieren, bis 1 in der letzten Zeile steht. Damit können wir das Feld aktualisieren, wobei der Entwickler keine Änderungen vornehmen kann.

DATA(actual_index) = lines( input-table_input ).

LOOP AT input-table_input REFERENCE INTO DATA(line).
  line->int_number = actual_index.
  actual_index -= 1.
ENDLOOP.

 

Schauen wir uns nun die Tabelle einmal in Aktion an. Wir führen die IDE Action aus, maximieren den Abschnitt und fügen dann neue Zeilen hinzu. Nach jeder neuen Zeile wird durch den Seiteneffekt die Nummerierung aktualisiert.

 

Damit sind wir mit der Implementierung der Tabelle fertig. Diese kannst du nun ganz normal in der Aktion verwenden. Dort holen wir uns bereits alle Daten aus der IDE Action und damit auch die befüllte Tabelle.

 

Vollständiges Beispiel

Das vollständige Coding aus dem gesamten Beispiel findest du im GitHub Repository. Über den folgenden Commit findest du die Änderungen aus diesem Artikel und kannst so noch später den aktuellen Zustand nachvollziehen.

 

Fazit

Mit diesem Tutorial kannst du nun komplexe Datenstrukturen für die Eingabe verwalten und hast somit weitere Möglichkeiten deine IDE Actions flexibler zu gestalten. In Zukunft werden wir auch eine neue IDE Action vorstellen, die die Tabelle verwendet, um komplexe Einstellungen vor der Generierung zu machen.


Enthaltene Themen:
ToolsADTEclipseIDE ActionTabelle
Kommentare (0)



Und weiter ...

Bist du zufrieden mit dem Inhalt des Artikels? Wir posten jeden Dienstag und Freitag neuen Content im Bereich ABAP und unregelmäßig in allen anderen Bereichen. Schaue bei unseren Tools und Apps vorbei, diese stellen wir kostenlos zur Verfügung.


030: Software-Heroes - My Community

Kategorie - YouTube

Du möchtest das neuste ABAP und SAP Wissen haben und auch nicht jeden Blog einzeln absuchen? My Community bringt den gesamten Community Content in eine Mini-App, die du nach deinen Vorstellungen anpassen kannst, um so keine Neuigkeiten mehr zu verpassen.

22.12.2025

ABAP Tools - IDE Actions (Seiteneffekt)

Kategorie - ABAP

Wie können wir eigentlich automatisch Informationen auf dem UI aktualisieren, wenn etwas mit der IDE Action passiert? Schauen wir uns einmal die Side Effects im Detail an.

18.11.2025

ABAP Tools - IDE Actions (Wertehilfe)

Kategorie - ABAP

Schauen wir uns einmal im Detail an, wie wir eine Wertehilfe für unsere Eingabe für unsere IDE Action in ADT erstellen können. Dabei schauen wir uns mehrere Möglichkeiten und Abhängigkeiten an.

11.11.2025

ABAP Tools - IDE Actions (Eingabe)

Kategorie - ABAP

Wie können wir eigentlich vor der Eingabe noch Informationen holen, bevor die eigentliche IDE Action in ABAP ausgeführt wird? Implementieren wir dazu die erste Version einer einfachen Eingabe.

04.11.2025

ABAP Tools - IDE Actions (Ausgabe)

Kategorie - ABAP

Schauen wir uns an, welche Ausgabemöglichkeiten wir aktuell mit IDE Actions haben und was wir damit erreichen können. Dabei schauen wir uns jeweils unterschiedliche Beispiele für die Implementierung an.

28.10.2025