This is a test message to test the length of the message box.
Login
|
BTP Pakete und SWC bereinigen
Erstellt von Software-Heroes

BTP - Pakete und SWC bereinigen

108

Du möchtest ein Pakete im ABAP Environment löschen, doch es gibt noch Objekte die blockieren und vielleicht gar nicht mehr in Eclipse sichtbar sind? Schauen wir uns dazu einige Punkte zur Bereinigung an.

Werbung


In diesem Artikel schauen wir uns im Detail an, wie wir Objekte aus dem ABAP Environment und einer Software Komponente entfernen können, auch wenn es vielleicht nicht möglich ist.

 

Einleitung

In unserem Beispiel starten wir mit einem Paket innerhalb einer Software Komponente. Das zu löschende Paket enthält aktuell ein Objekt, welches für uns sichtbar ist. Diese Klasse wollen wir entfernen. Das Aufräumen und Reorganisieren von Paketen innerhalb von Software Komponenten ist eine gängige Praxis. Doch wie sieht es eigentlich aus, wenn das Löschen einmal schiefläuft oder es zu Informationen kommt, die uns nicht weiterbringen?

 

Bereinigung

Versuchen wir, das Paket direkt zu löschen, werden wir eine Fehlermeldung erhalten, dass das Paket noch Objekte enthält und ein Löschen nicht möglich ist. Grundsätzlich handelt es sich hierbei um den Standard. Wir müssen das Paket zuvor erst leeren, bevor wir dieses löschen können.

 

Dazu löschen wir die enthaltene Klasse und geben den Transport frei. Erst beim Freigeben des Transportes werden die Objekte komplett aus dem System entfernt. Normalerweise gibt es ein Lösch-Flag, welches markiert, dass ein Objekt gelöscht ist, und erst beim Transportieren dieses Objektes wird dann die Registrierung entfernt. In diesem Fall ist unser Paket erst einmal leer. Allerdings können wir das Paket immer noch nicht löschen, obwohl wir den Transport freigegeben haben.

 

TADIR

Der Grund ist in den meisten Fällen dann, dass es noch Objekte auf Datenbankebene gibt, die das Löschen des Paketes blockieren. In einem klassischen System würden wir dazu auf die Datenbank gehen und in die Tabelle TADIR schauen, die uns dann Informationen gibt, welches Objekt noch unter dem Paket vorhanden ist. Allerdings befinden wir uns hier in einem Cloud-System, und SAP stellt einen Core Data Service zur Verfügung, nämlich den "I_CustABAPObjDirectoryEntry". Diesen können wir nutzen, um weitere Informationen zu Objekten eines Pakets zu erhalten.

 

Dazu stellen wir eine kleine Hilfsklasse zur Verfügung, die du ausführen kannst, um weitere Informationen zu bekommen, welche Objekte innerhalb einer Software Komponente zum Beispiel schon mit einem Lösch-Flag gekennzeichnet sind. Manchmal kann es auch vorkommen, dass ein Kollege ein gelöschtes Objekt direkt aus dem Transport entfernt hat. Damit wird die Löschung nicht transportiert, das Objekt bleibt mit dem Lösch-Flag auf der Datenbank stehen und hindert uns daran, das Paket zu löschen.

CLASS zcl_bs_demo_object_cleanup DEFINITION
  PUBLIC FINAL
  CREATE PUBLIC.

  PUBLIC SECTION.
    INTERFACES if_oo_adt_classrun.

    TYPES objects TYPE STANDARD TABLE OF I_CustABAPObjDirectoryEntry WITH EMPTY KEY.

    METHODS read_objects
      IMPORTING software_component    TYPE I_CustABAPObjDirectoryEntry-ABAPSoftwareComponent
      EXPORTING deleted_objects       TYPE objects
                objects_to_be_deleted TYPE objects.

  PRIVATE SECTION.
    METHODS output_line
      IMPORTING !object TYPE I_CustABAPObjDirectoryEntry
                !out    TYPE REF TO if_oo_adt_classrun_out.
ENDCLASS.


CLASS zcl_bs_demo_object_cleanup IMPLEMENTATION.
  METHOD if_oo_adt_classrun~main.
    read_objects( EXPORTING software_component    = 'ZBS_DMO'
                  IMPORTING deleted_objects       = DATA(deleted_objects)
                            objects_to_be_deleted = DATA(objects_to_be_deleted) ).

    out->write( `Deleted objects` ).
    LOOP AT deleted_objects INTO FINAL(deleted_object).
      output_line( object = deleted_object
                   out    = out ).
    ENDLOOP.

    out->write( |
Active objects| ).
    LOOP AT objects_to_be_deleted INTO FINAL(active_objects).
      output_line( object = active_objects
                   out    = out ).
    ENDLOOP.
  ENDMETHOD.


  METHOD read_objects.
    SELECT FROM I_CustABAPObjDirectoryEntry
      FIELDS *
      WHERE     ABAPSoftwareComponent  = @software_component
            AND ABAPObjectType        <> 'DEVC'
      ORDER BY ABAPPackage, ABAPObject
      INTO TABLE @DATA(package_objects).

    LOOP AT package_objects ASSIGNING FIELD-SYMBOL(<package_object>).
      IF <package_object>-ABAPObjectIsDeleted = abap_true.
        APPEND <package_object> TO deleted_objects.
      ELSE.
        APPEND <package_object> TO objects_to_be_deleted.
      ENDIF.
    ENDLOOP.
  ENDMETHOD.


  METHOD output_line.
    DATA(seperator) = ` - `.

    out->write( |{ object-ABAPPackage }{ seperator }{ object-ABAPObjectType }{ seperator }{ object-ABAPObject }| ).
  ENDMETHOD.
ENDCLASS.

 

Im Ergebnis erhalten wir zwei Listen: eine für die Objekte mit Lösch-Flag und in welchem Paket sich diese befinden, und eine für die verschiedenen aktiven Objekte, die ebenfalls zu dieser Software Komponente und anderen Paketen gehören. Die Informationen des Objekttyps und des Objektnamens benötigen wir dann im nächsten Schritt für das Löschen.

 

Löschen

Wie du oben siehst, gibt es ein Objekt im zu löschenden Paket, welches im Project Explorer nicht mehr sichtbar ist. Das liegt daran, dass ein Löschkennzeichen gesetzt wurde, aber der Eintrag nicht transportiert wurde. In diesem Fall gehen wir in die Aufgabe und können über den Hinzufügen-Button das Objekt angeben, welches wir dann in den Transportauftrag schreiben. So können wir die verschiedenen Objekte hinzufügen, was nur manuell funktioniert.

 

Geben wir dann den Transportauftrag frei. Um das Löschen zu transportieren, sollten nun keine Objekte mehr auf der Datenbank vorhanden sein, sondern nur noch ein Objekt, nämlich unser Paket. Starten wir dann das Löschen des Pakets, erhalten wir nur noch eine Warnmeldung, die auf sich selbst referenziert. Wir geben einen Transportauftrag an und können damit dann auch final das Paket aus dem System entfernen.

 

Hinweis: Wir hatten eigentlich auch versucht, einen automatischen Weg über die XCO-Klassen zu entwickeln. Allerdings unterstützen die XCO-Klassen aktuell kein Hinzufügen von Objektschlüsseln, womit wir die gelöschten Objekte nicht automatisiert per API hinzufügen können.

 

Fazit

Hast du Probleme beim Löschen eines Paketes? Dann solltest du als Erstes den Objekt-Explorer prüfen und im nächsten Schritt auf der Datenbank schauen, ob vielleicht noch Objekte mit Löschkennzeichen vorhanden sind. Das Entfernen von Objekten über das Freigeben einzelner Transporte ist immer etwas schmerzhaft, da so viele Schritte notwendig sind, um ein Paket am Ende zu löschen.


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


BTP - E-Mail Anbindung OAuth 2.0

Kategorie - ABAP

Die Mail-Anbindung per Basic Auth funktioniert nun nicht mehr. Welche Möglichkeiten bestehen alternativ für die Anbindung von Office365 an das ABAP Environment und wie kannst du sie einrichten?

13.10.2026

RAP - Sales App Learnings

Kategorie - ABAP

Das Tutorial für die Sales App ist zu Ende und dieses Mal wurde eine große Bandbreite an Themen und Bereichen adressiert. In diesem Artikel schauen wir auf das Gelernte und wichtige Punkte.

08.09.2026

RAP - Navigation (App to App)

Kategorie - ABAP

Wie kannst du eigentlich innerhalb deiner Fiori Anwendung auf eine andere Anwendung navigieren, ohne das der User die App manuell wechseln muss? Schauen wir uns die Navigation zwischen Fiori Apps an.

01.09.2026

RAP - Singleton Pattern

Kategorie - ABAP

Das Singleton Pattern in RAP gibt es schon länger, doch wie genau funktioniert es und wie kannst du es auch für andere Use-Cases nutzen? Schauen wir uns dazu die Details in diesem Artikel an.

25.08.2026

RAP - Nativer Datei-Upload

Kategorie - ABAP

Du willst eine Datei in deine RAP Application hochladen und im Anschluss verarbeiten? Die offizielle Lösung für Up- und Download lässt noch warten, mit einem kleinen Umweg ist es aber bereits Heute möglich.

18.08.2026