This is a test message to test the length of the message box.
Login
|
ABAP Tipp Klassen für Interface
Erstellt von Software-Heroes

ABAP Tipp - Klassen zum Interface

1620

Alle implementierenden Klassen zu einem Interface lesen und validieren. Wir zeigen dir, wie du das leicht umsetzen kannst und diese dynamisch verwendest.

Werbung


Wenn du eine Anwendung baust, die ein Interface zuir Verfügung stellt, willst du vielleicht am Ende auch wissen, welche Klassen auf diesem Interface basieren. Oder du möchtest die Klassen automatisch für eine Verarbeitung einbinden? Dann bist du hier an der richtigen Stelle! Wir wollen im heutigen Artikel kurz zusammenfassen, wie du die Klassen lesen kannst und automatisch mit ihnen arbeitest.

 

Vorbereitung

Was wir für dieses Szenario benötigen ist zuerst einmal ein Interface, welches wir implementieren können. Dazu auch noch 2 bis 3 Klassen die das Interface übernehmen. Zum Test sind einige Methoden auch ausgeprägt und einige noch nicht. Wir möchten damit im Anschluss zeigen, wie du Fehler bei mangelnder Implementierung abfangen kannst.

Das Interface in unserem Beispiel heißt ZIF_TEST_SST und soll eine Schnittstelle symbolisieren. Das Interface hat zwei Methoden und eine Konstante. Im ersten Schritt soll geprüft werden, ob die Klasse für die Verarbeitung relevant ist. Ist dies der Fall, wird die Konstante zurückgegeben. Im zweiten Schritt soll die Verarbeitung ausgeführt werden über die Execute Methode.

 

Definition

Als Klassendefinition benötigen wir nur zwei Methoden zur Ermittlung der Klassen und Ausführung dieser. Dazu das folgende Coding:


CLASS lcl_prog DEFINITION.
  PUBLIC SECTION.
    TYPES:
      " Klassennamen
      tt_class TYPE STANDARD TABLE OF char30 WITH EMPTY KEY.

    CLASS-METHODS:
      get_class
        IMPORTING
                  id_intf         TYPE clike
        RETURNING VALUE(rt_class) TYPE tt_class,

      start_impl
        IMPORTING
          id_class TYPE clike.

  PRIVATE SECTION.
ENDCLASS.

 

Lesen der Klassen

Mit der Methode get_class lesen wir alle Klassen bei denen das Interface direkt zugeordnet ist. Dann grenzen wir die entsprechenden Includes ab, die uns interessieren, konvertieren den Namen und prüfen, ob es die Klasse im System wirklich gibt. Ist alles in Ordnung, übernehmen wir die Klasse in die Rückgabetabelle.


METHOD get_class.
  " Verwendung des Interface lesen
  SELECT include FROM wbcrossgt
   WHERE otype = 'TY'
     AND name = @id_intf
     AND direct = @abap_true
   INTO TABLE @DATA(lt_class).     

  " Prüfung der gefundenen Verwendung
  LOOP AT lt_class INTO DATA(ls_class) WHERE include 30 = 'CU'.
    " Name aufbereiten
    DATA(ld_name) = ls_class-include(30).
    TRANSLATE ld_name USING '= '.

    " Validierung des Namen/Typs
    SELECT SINGLE typename FROM ddtypes
     INTO @DATA(ls_check)
     WHERE typename = @ld_name
       AND state = 'A'
       AND typekind = 'CLAS'.

    " Übernehmen
    IF sy-subrc = 0.
      APPEND ld_name TO rt_class.
    ENDIF.
  ENDLOOP.
ENDMETHOD.

 

Implementierung starten

Im zweiten Schritt definieren wir eine Methode die die gefundenen Klassen nacheinander ausführt und im Fehlerfall reagiert. Dabei kann man danach gehen, ob eine Methode in der Klasse noch nicht implementiert wurde oder andere kritische Fehler bei der Verarbeitung aufgetreten sind.


METHOD start_impl.
  DATA:
    lo_obj TYPE REF TO zif_test_sst.

  TRY.
      " Instanz erzeugen
      CREATE OBJECT lo_obj TYPE (id_class).

      " relevante Klasse prüfen
      IF lo_obj->check_step( ) = zif_test_sst=>mc_active.
        lo_obj->execute( ).
      ENDIF.

    CATCH cx_sy_dyn_call_illegal_method. "Implementierung fehlt
    CATCH cx_root. "anderer Fehler
  ENDTRY.
ENDMETHOD.

 

Ausführung

Für die allgemeine Ausführung der Logik, kann die erste Methode direkt in einen Loop integriert werden. Wenn Klassen gefunden werden, werden diese in der Schleife direkt ausgeführt, wenn diese implementiert sind und korrekt funktionieren.


LOOP AT lcl_prog=>get_class( 'ZIF_TEST_SST' ) INTO DATA(ld_class).
  lcl_prog=>start_impl( ld_class ).
ENDLOOP.

 

Fazit

Für die Ermittlung der passenden Tabellen und Inhalte benötigst du etwas Rechercheaufwand. Für die eigentliche Ausführung der Implementierungen kannst du direkt die Interfacemethoden ansprechen, was die Schnittstelle im Programm allgemein bekannt gibt.


Enthaltene Themen:
TippKlasseInterface
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.


ABAP in der Praxis - Objekt Generator

Kategorie - ABAP

In diesem Beispiel schauen wir uns an, wie wir mit der XCO Bibliothek einen wiederverwendbaren Generator erstellen, um uns für unsere Tutorials etwas Arbeit zu sparen und automatisiert DDIC Objekte zu generieren.

09.01.2026

ABAP Tipp - Logging Performance

Kategorie - ABAP

Wie sieht es eigentlich mit der Performance des BAL Logs in der ABAP Cloud Welt aus? Schauen wir uns dazu drei Lösungen an und messen die Performance in verschiedenen Szenarien.

19.12.2025

ABAP in der Praxis - Fiori Daten fehlerhaft

Kategorie - ABAP

In diesem kleinen Praxisbeispiel schauen wir uns einen Fehlerfall in Fiori an. Hier werden die Daten im UI falsch angezeigt, obwohl alles sonst richtig zu sein scheint. Die Spur führt uns durch den RAP Stack in eine andere Richtung.

10.10.2025

ABAP Tipp - Handling von Funktionsbausteinen

Kategorie - ABAP

Wie gehst du eigentlich mit Funktionsbausteinen und der Fehlerbehandlung innerhalb von ABAP um? In diesem kleinen Tipp schauen wir uns die Behandlung auch im Rahmen von RFC an.

26.08.2025

ABAP Tipp - Generische Datentypen

Kategorie - ABAP

Was unterscheidet eigentlich CLIKE von CSEQUENCE? Generische Typen können manchmal etwas undurchsichtig sein und als ABAP Entwickler wählen wir vielleicht den Typen zu generisch.

12.08.2025