This is a test message to test the length of the message box.
Login
|
ABAP OO Interface IGNORE DEFAULT
Erstellt von Software-Heroes

ABAP OO - Interface (DEFAULT IGNORE)

472

In diesem Artikel geht es um die Entwicklung eines Interface mit dem Zusatz DEFAULT und die Konsequenzen auf Implementierung und Nutzung.

Werbung


Beim Schreiben des Artikels für die Exits in Application Jobs, sind wir auf ein Konstrukt gestoßen, welches wir bisher noch nicht gesehen haben. Unsere Eindrücke und Arbeit mit solchen Interfaces wollen wir heute mit dir teilen und durch die Einzelheiten der Implementierung gehen.

 

Einleitung

Um was geht es in diesem Artikel genau? Interfaces sind normalerweise so definiert, dass der Verwender alle Methoden in seinem Coding implementieren muss, ansonsten kann die Klasse nicht aktiviert werden. Das sorgt unter Umständen dafür, dass man 20 Methoden anlegt, man selbst aber eigentlich nur eine Methode implementieren möchte. Dazu wurde bei der Methodendefinition der Zusatz DEFAULT eingeführt, auf den wir in diesem Artikel eingehen wollen.

 

Interface

Dazu definieren wir uns ein gemischtes Interface, wo alle Arten von Methoden definiert sind. Wir verwenden eine normale Methode, für die wir später eine Implementierung benötigen, zwei Methoden mit DEFAULT IGNORE und eine Methode mit DEFAULT FAIL. Das Interface ist wie folgt definiert:

INTERFACE zif_bs_demo_intf_default
  PUBLIC.

  METHODS:
    method_with_implementation
      IMPORTING id_value         TYPE string
      RETURNING VALUE(rd_result) TYPE abap_bool,

    method_with_default_bool DEFAULT IGNORE
      IMPORTING id_value         TYPE string
      RETURNING VALUE(rd_result) TYPE abap_bool,

    method_with_default_integer DEFAULT IGNORE
      IMPORTING id_value         TYPE string
      RETURNING VALUE(rd_result) TYPE i,

    method_with_fail DEFAULT FAIL
      IMPORTING id_value         TYPE string
      RETURNING VALUE(rd_result) TYPE abap_bool.
ENDINTERFACE.

 

Für den Zusatz DEFAULT gibt es zwei Erweiterungen:

  1. IGNORE - Ist die Methode nicht implementiert, dann verhält sich die Implementierung wie eine leere Methodenimplementierung (initiale Parameter).
  2. FAIL - Ist die Methode nicht implementiert und wird aufgerufen, dann wird eine Ausnahme (CX_SY_DYN_CALL_ILLEGAL_METHOD) ausgelöst, aber erst wenn auch ein Aufruf erfolgt.

 

Implementierung

Im nächsten Schritt wollen wir einmal die Standardimplementierung des Interfaces testen und legen dazu eine ausführbare Klasse an und implementieren das Interface. Dazu geben wir im Wizard die beiden Interfaces mit an:

 

Die Klasse wird standardmäßig mit allen Methoden erstellt, damit implementiert der Wizard automatisch auch Methoden die als DEFAULT markiert sind:

CLASS zcl_bs_demo_intf_default DEFINITION PUBLIC FINAL CREATE PUBLIC.
  PUBLIC SECTION.
    INTERFACES if_oo_adt_classrun.
    INTERFACES zif_bs_demo_intf_default.
ENDCLASS.


CLASS zcl_bs_demo_intf_default IMPLEMENTATION.
  METHOD if_oo_adt_classrun~main.
  ENDMETHOD.


  METHOD zif_bs_demo_intf_default~method_with_default_bool.
  ENDMETHOD.


  METHOD zif_bs_demo_intf_default~method_with_default_integer.
  ENDMETHOD.


  METHOD zif_bs_demo_intf_default~method_with_fail.
  ENDMETHOD.


  METHOD zif_bs_demo_intf_default~method_with_implementation.
  ENDMETHOD.
ENDCLASS.

 

Zum Testen löschen wir nun alle Methoden aus unserem Interface und versuchen diese über den "Quick Fix" (STRG + 1) wieder zu implementieren, dabei fällt auf, dass dieses mal nur unsere Pflichtmethode angelegt wird:

 

Der Quick Fix funktioniert für die anderen Methoden nicht und die weiteren Methoden müssen von Hand implementiert werden.

 

Testcode

Implementieren wir nun erst einmal unseren Testcode, um die Klasse zu testen. Dazu legen wir das folgende Coding in der Main Methode an, um die Funktionalität der einzelnen Methoden ohne Implementierung zu validieren.

DATA lo_test TYPE REF TO zif_bs_demo_intf_default.

lo_test = NEW zcl_bs_demo_intf_default( ).

out->write( |Normal implementation: { lo_test->method_with_implementation( `Normal` ) }| ).
out->write( |Default with Bool: { lo_test->method_with_default_bool( `Default` ) }| ).
out->write( |Default with Integer: { lo_test->method_with_default_integer( `Default` ) }| ).

TRY.
    out->write( |Default to Fail: { lo_test->method_with_fail( `Fail` ) }| ).
  CATCH cx_sy_dyn_call_illegal_method.
    out->write( `Method failed` ).
ENDTRY.

 

Die Pflichtmethode implementieren wir entsprechend und geben ABAP_TRUE zurück, um ein Ergebnis zu erhalten. Die gesamte Klasse sieht zu diesem Zeitpunkt wie folgt aus:

CLASS zcl_bs_demo_intf_default DEFINITION PUBLIC FINAL CREATE PUBLIC.
  PUBLIC SECTION.
    INTERFACES if_oo_adt_classrun.
    INTERFACES zif_bs_demo_intf_default.
ENDCLASS.


CLASS zcl_bs_demo_intf_default IMPLEMENTATION.
  METHOD if_oo_adt_classrun~main.
    DATA lo_test TYPE REF TO zif_bs_demo_intf_default.

    lo_test = NEW zcl_bs_demo_intf_default( ).

    out->write( |Normal implementation: { lo_test->method_with_implementation( `Normal` ) }| ).
    out->write( |Default with Bool: { lo_test->method_with_default_bool( `Default` ) }| ).
    out->write( |Default with Integer: { lo_test->method_with_default_integer( `Default` ) }| ).

    TRY.
        out->write( |Default to Fail: { lo_test->method_with_fail( `Fail` ) }| ).
      CATCH cx_sy_dyn_call_illegal_method.
        out->write( `Method failed` ).
    ENDTRY.
  ENDMETHOD.


  METHOD zif_bs_demo_intf_default~method_with_implementation.
    rd_result = abap_true.
  ENDMETHOD.
ENDCLASS.

 

Ausführung

Führen wir nun einmal die Klasse im aktuellen Zustand aus und schauen uns das Ergebnis an. Da es sich um eine ausführbare Klasse handelt, können wir diese mit F9 starten und uns das Ergebnis in der Konsole ausgeben lassen.

 

Wie zu erwarten wurden die ersten drei Methoden ausgeführt und die letzte Methode ist auf Fehler gelaufen, hier gibt es keine Ausgabe, da eine Ausnahme erzeugt wurde. Die beiden Methoden mit DEFAULT IGNORE haben entsprechend initiale Rückgabewerte geliefert und sind erfolgreich durchlaufen worden.

 

FAIL

Zum Abschluss implementieren wir zum Test noch die Methode mit DEFAULT FAIL, legen die Methode an und geben ABAP_TRUE zurück.

METHOD zif_bs_demo_intf_default~method_with_fail.
  rd_result = abap_true.
ENDMETHOD.

 

Die Methode sollte nun sauber durchlaufen werden und keine Ausnahme mehr auslösen. Nach Ausführung der Klasse erhalten wir das folgende Ergebnis, so wie wir es auch erwartet haben:

 

Komplettes Beispiel

Zum Abschluss noch die komplette Implementierung der Klasse, das Interface findest du im oberen Bereich des Artikels.

CLASS zcl_bs_demo_intf_default DEFINITION PUBLIC FINAL CREATE PUBLIC.
  PUBLIC SECTION.
    INTERFACES if_oo_adt_classrun.
    INTERFACES zif_bs_demo_intf_default.
ENDCLASS.


CLASS zcl_bs_demo_intf_default IMPLEMENTATION.
  METHOD if_oo_adt_classrun~main.
    DATA lo_test TYPE REF TO zif_bs_demo_intf_default.

    lo_test = NEW zcl_bs_demo_intf_default( ).

    out->write( |Normal implementation: { lo_test->method_with_implementation( `Normal` ) }| ).
    out->write( |Default with Bool: { lo_test->method_with_default_bool( `Default` ) }| ).
    out->write( |Default with Integer: { lo_test->method_with_default_integer( `Default` ) }| ).

    TRY.
        out->write( |Default to Fail: { lo_test->method_with_fail( `Fail` ) }| ).
      CATCH cx_sy_dyn_call_illegal_method.
        out->write( `Method failed` ).
    ENDTRY.
  ENDMETHOD.


  METHOD zif_bs_demo_intf_default~method_with_implementation.
    rd_result = abap_true.
  ENDMETHOD.


  METHOD zif_bs_demo_intf_default~method_with_fail.
    rd_result = abap_true.
  ENDMETHOD.
ENDCLASS.

 

Fazit 

Die Nutzung war für uns neu, vielleicht sogar für dich? Der Artikel soll dir dabei helfen, zu verstehen was damit möglich ist. Laut Dokumentation wird es vor allem im Bereich der BADIs zum Einsatz kommen, aber auch freigegebene Objekte von SAP werden damit ausgestattet sein.

 

Quellen:
SAP-Help - Methods DEFAULT


Enthaltene Themen:
OOABAP OOInterfaceDEFAULT IGNORE
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.


ADT - Metadata Wizard [MIA]

Kategorie - ABAP

In diesem Artikel schauen wir uns den Metadata Wizard an und wie er vielleicht in Zukunft dein Leben bei der Anlage von UI-Annotationen in RAP vereinfachen könnte.

16.01.2026

ABAP OO - Injector

Kategorie - ABAP

Beim letzten Artikel hatten wir uns ABAP OO und die Evolution der Design Pattern angeschaut und wie wir sie am besten nutzen können. Daher gehen wir in diesem Artikel noch einmal in die Details des Injector für die Testbarkeit.

23.12.2025

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 (Tabelle)

Kategorie - ABAP

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.

09.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