This is a test message to test the length of the message box.
Login
ABAP Cloud Deprecation Flow
Erstellt von Software-Heroes

ABAP Cloud - Deprecation Flow

89

Welche Hilfemittel stehen dir in ABAP Cloud zur Verfügung, um Objekte freizugeben oder auch auf veraltet zu setzen? Schauen wir uns einmal die Details an.

Werbung


Wie kannst du einfach und sauber mit Schnittstellen und genutzten Objekten im System umgehen? In diesem Artikel werden wir auf den aktuellen Objektlebenszyklus innerhalb von ABAP Cloud eingehen.

 

Einleitung

In ABAP Cloud arbeiten wir sehr stark mit Software Komponenten, kurz SWC, und geben zwischen den Komponenten unsere Objekte über sogenannte Verträge (Contract) frei. Diese freigegebenen APIs kann dann jeder im System nutzen. Dabei gehen wir den Vertrag ein, dass das Objekt stabil bleibt. Damit sollten wir Änderungen vermeiden, die bestehenden Code kaputt machen, wie zum Beispiel:

  • Löschen von Methoden
  • Erweiterung von bestehenden Methoden um neue Pflichtparameter

 

Mehr zum Thema "Stabile ABAP APIs" findest du in der SAP Community von Lars Hvam.

 

Vorbereitung

Für die Demonstration legen wir zuerst einmal zwei einfache Objekte im System an. Dabei erstellen wir eine Utility Klasse, um uns den aktuellen Zeitstempel zurückgeben zu lassen.

CLASS zcl_bs_demo_timestamps DEFINITION
  PUBLIC FINAL
  CREATE PUBLIC.

  PUBLIC SECTION.
    INTERFACES zif_bs_demo_timestamps.
ENDCLASS.


CLASS zcl_bs_demo_timestamps IMPLEMENTATION.
  METHOD zif_bs_demo_timestamps~get.
    GET TIME STAMP FIELD rd_result.
  ENDMETHOD.
ENDCLASS.

 

Zu jeder Klasse gehört auch ein entsprechendes Interface, damit wir gleich noch ein testbares Objekt erstellen. Im Interface definieren wir den Typen, die Methode und hinterlegen gleich noch eine Dokumentation mit ABAP Docs.

INTERFACE zif_bs_demo_timestamps
  PUBLIC.

  TYPES td_timestamp TYPE timestampl.

  "! Get current timestamp in TIMESTAMPL format
  "! @parameter rd_result | Actual timestamp
  METHODS get
    RETURNING VALUE(rd_result) TYPE td_timestamp.
ENDINTERFACE.

 

Freigabe

Damit wir nun das Objekt außerhalb unserer SWC nutzen können, müssen wir es zuerst einmal freigeben. Dazu rufen wir das Objekt auf und wechseln in den View "Properties" und in den Reiter "API State". 

 

Über den Plus (+) Button legen wir einen neuen Contract an. Wenn du das Objekt in ABAP Cloud nutzen willst, dann lässt du die Checkbox bei "Use in Cloud Development". Wenn du die Klasse auch in den Keyuser Apps verwenden willst, kannst du auch das Flag bei "Use in Key User Apps" setzen.

 

Zum Abschluss erfolgt noch eine Prüfung, ob das Objekt entsprechend freigegeben werden kann und eine Zuordnung zu einem entsprechenden Transportauftrag. Zum Abschluss finden wir nun auf dem Reiter "API State" den neuen Contract für das Objekt.

 

Diesen Vorgang wiederholen wir nun noch für die Klasse, erhalten hier aber eine entsprechende Meldung, dass die Instanziierung auf PRIVATE stehen sollte. Dies Meldung kannst du mit einer Factory oder einer Factory Methode lösen.

 

Zum Abschluss verwenden wir die Klasse und lassen uns einen Zeitstempel zurückgeben, den wir ausgeben können. Die Klasse können wir in allen SWC verwenden, da sie einen C1 Contract hat.

DATA lo_timestamp TYPE REF TO zif_bs_demo_timestamps.

lo_timestamp = NEW zcl_bs_demo_timestamps( ).
out->write( lo_timestamp->get( ) ).

 

Veraltet

Nun kommt im Laufe der Nutzung eines Objektes der Zeitpunkt, da möchtest du, als Entwickler, das Objekt modernisieren, erweitern oder neu zur Verfügung stellen. In so einem Fall wirst du das bestehende Objekt aber nicht verändern, da dieses noch in bestehendem Code verwendet wird und die die Stabilität nicht gefährden willst. In so einem Fall greifen wir auf den Deprecation Flow zurück, damit geben wir dem Verwender das Signal, dass die verwendete API veraltet ist.

 

Nachfolger

Dazu entwickeln wir zuerst einmal die neuen API im System. In unserem Beispiel wollen wir den alten Timestamp nicht mehr verwenden, sondern auf den UTCLONG setzen. Dazu definieren wir das folgende Interface:

INTERFACE zif_bs_demo_utc_timestamps
  PUBLIC.

  TYPES td_timestamp TYPE utclong.

  "! Get current timestamp in UTCLONG format
  "! @parameter rd_result | Actual timestamp
  METHODS get
    RETURNING VALUE(rd_result) TYPE td_timestamp.
ENDINTERFACE.

 

Im zweiten Schritt implementieren wir die neue Klasse und verwenden in diesem Fall die Funktion UTCLONG_CURRENT, um an den aktuellen Zeitstempel zu gelangen.

CLASS zcl_bs_demo_utc_timestamps DEFINITION
  PUBLIC FINAL
  CREATE PUBLIC.

  PUBLIC SECTION.
    INTERFACES zif_bs_demo_utc_timestamps.
ENDCLASS.


CLASS zcl_bs_demo_utc_timestamps IMPLEMENTATION.
  METHOD zif_bs_demo_utc_timestamps~get.
    rd_result = utclong_current( ).
  ENDMETHOD.
ENDCLASS.

 

Zum Abschluss nicht vergessen, die neuen Objekte als API zur Verfügung zu stellen und den C1 Contract zu erstellen (wie schon in den Schritten zuvor).

 

Workflow

Nun müssen wir die aktuellen Objekte auf veraltet setzen, dazu gehen wir wieder in das Objekt in den "Properties" View. Über den "Edit" Button können wir den aktuellen Vertrag noch einmal bearbeiten.

 

Dazu setzen wir den Status (Release State) des Objekts auf "Deprecated".

 

Im nächsten Schritt können wir nun einen oder mehrere Nachfolger angeben. Hier können wir nach unserem neuen Interface suchen und dieses hinterlegen. Im Feld "Concept Name" kannst du per Freitext ein Kommentar bzw. ein ganzes Konzept hinterlegen.

 

Nachdem der Contract aktualisiert wurde, finden wir die aktuellen Informationen unter "API State" aufgelistet.

 

Diesen Vorgang wiederholen wir noch für die Klasse, setzen diese auf Veraltet und hinterlegen den Nachfolger.

 

Sichtbarkeit

Zum Abschluss schauen wir uns noch die Klasse an, die unsere freigegebene API nutzt. Welche Informationen erhält der Verwender von der IDE? Sobald wir die Klasse öffnen, erhalten wir zwei Warnmeldungen im Code:

 

Die Meldung verweist uns auch gleich an das neue Interface bzw. die neue Klasse.

 

Hinweis: Zusätzlich gibt es auch eine Prüfung im ABAP Test Cockpit, womit wir steuern können, ob auch veraltete APIs genutzt werden können oder ob diese durch den Ausnahmeprozess laufen sollten.

 

Vollständiges Beispiel

Hier noch einmal die vollständige Klasse, die unsere veraltete API nutzt. Damit kannst du das Beispiel in diesem System einfacher nachstellen.

CLASS zcl_bs_demo_use_depr_flow DEFINITION
  PUBLIC FINAL
  CREATE PUBLIC.

  PUBLIC SECTION.
    INTERFACES if_oo_adt_classrun.
ENDCLASS.


CLASS zcl_bs_demo_use_depr_flow IMPLEMENTATION.
  METHOD if_oo_adt_classrun~main.
    DATA lo_timestamp TYPE REF TO zif_bs_demo_timestamps.

    lo_timestamp = NEW zcl_bs_demo_timestamps( ).
    out->write( lo_timestamp->get( ) ).
  ENDMETHOD.
ENDCLASS.

 

Fazit

Der Deprecation Flow hilft dir bei der Verwaltung von freigegebenen Objekten im System und zeigt anderen Entwicklern, welche Objekte ohne Probleme verwendet werden können oder welche Objekte mittlerweile veraltet sind.


Enthaltene Themen:
ABAP CloudABAPDeprecation Flow
Kommentare (0)



Und weiter ...

Bist du zufrieden mit dem Inhalt des Artikels? Wir posten jeden 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 Cloud - ADT Bäume (Übersicht)

Kategorie - ABAP

Welchen Hilfen und Übersichten stehen dir in den ABAP Development Tools zur Verfügung, um dein Leben mit ABAP Cloud zu vereinfachen?

17.12.2024

ABAP Cloud - Relevante Objekte

Kategorie - ABAP

Welche Objekte sind in der ABAP Entwicklung eigentlich noch relevant und welche kannst du so langsam in die Mottenkiste packen? Hier erfährst du mehr.

19.11.2024

ABAP Cloud - Sperren

Kategorie - ABAP

Für was musst du Sperren setzen und wie kannst du das leicht in ABAP Cloud machen? In diesem Artikel schauen wir uns den Prozess im Detail an.

08.11.2024

ABAP Cloud - HTTP Client

Kategorie - ABAP

Wie sieht eigentlich der aktuelle HTTP Client in ABAP Cloud aus? Lasst uns einen Blick auf das neue Modell werfen.

01.11.2024

ABAP Cloud - Key User Apps

Kategorie - ABAP

Die Key User Extensibility ist ein Teil von ABAP Cloud, wenn es um die Erweiterung des Core geht, doch wie kannst du die Werkzeuge sinnvoll nutzen und wie ergänzen sie sich?

11.10.2024