BTP - Transport ZLOCAL Objekte
Du möchtest deinen PoC im ABAP Environment nun auf das nächste System bringen? In diesem Artikel ein paar mehr Informationen.
Inhaltsverzeichnis
In diesem Artikel schauen wir uns einmal genauer an, wie wir unseren Proof of Concept (PoC) aus ZLOCAL in die nächste Systemschiene bekommen und auf was wir achten sollten. Die Frage kommt ursprünglich von Sebastian Freilinger-Huber.
Einleitung
Wenn du das erste Mal das ABAP Environment in der BTP verwendest, wirst du wahrscheinlich dein Hello-World in ZLOCAL erstellen. Dabei handelt es sich um das temporäre Paket ($TMP) in ABAP Cloud und auf dem ABAP Environment. In diesem Paket macht fast jeder ABAP Entwickler seine ersten Erfahrungen. Grundsätzlich kannst du dort alle Arten von Objekten anlegen, es wird dann auch ein Transportauftrag von dir verlangt, was an den Einstellungen des Pakets liegt.
Vorbereitung
Bevor wir starten, brauchen wir allerdings noch ein paar Objekte zum Üben. Dazu legen wir uns zwei Klasse an, die fast identisch sind.
CLASS zcl_bs_demo_mypoc_one DEFINITION
PUBLIC FINAL
CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
ENDCLASS.
CLASS zcl_bs_demo_mypoc_one IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
out->write( `Shift me to a SWC (1)` ).
ENDMETHOD.
ENDCLASS.
Die beiden Klassen legen wir in einem Paket ab, welches unter ZLOCAL angelegt wurde und wir erhalten damit die folgende Struktur im System.
Schauen wir uns das Paket an, dann ist dieses keinem Transportlayer zugeordnet und der Software Komponente ZLOCAL.
Herausforderung
Wir haben unseren PoC auf dem ABAP Environment abgeschlossen und wollen nun die Objekte transportieren. Allerdings ist dies nicht möglich, da die Objekte keiner Software Komponente (SWC) zugeordnet wurden. Eine Software Komponente legt im Hintergrund ein Git -Repository in der BTP an und alle freigegebenen Transporte werden als Commit hinzugefügt. Jede SWC hat eine eigene Transportschiene, die im Paket und dem Transport ersichtlich ist. Objekte die in ZLOCAL angelegt wurden, werden ebenfalls in einem Transport aufgezeichnet, eine Freigabe des Transports erzeugt allerdings keinen Commit.
Lösung
In diesem Abschnitt beschreiben wir zwei Lösungen für das Problem, die weiteren Details kannst du auch der SAP Help im unteren Bereich entnehmen. Ziel ist dabei ein Paket unter der Software Komponente "ZBS_SWC_DEMO", die wir bereits in einem älteren Artikel verwendet haben.
Change Package Assignment
Im ersten Schritt führen wir die Standardfunktion "Change Package Assignment" über die ABAP Development Tools durch. Dazu einfach auf das entsprechende Objekt im System klicken und die Option aus dem Kontextmenü wählen.
Im nächsten Schritt geben wir das Zielpaket an, welches in der SWC liegt und bestätigen die weiteren Dialoge.
Es kann nun allerdings vorkommen, dass du den folgenden Fehler erhältst. Dieser ist im ersten Moment nicht sehr sprechend und man muss schon genauer wissen was zu tun ist.
Solltest du den Fehler erhalten, dann ist das Objekt wahrscheinlich noch in einem Transport mit der falschen Software Komponente hinterlegt. Dies ist dann der Fall, wenn ihr euren PoC abgeschlossen habt und nun überlegt, wie ihr die Objekte transportieren könnt. In diesem Fall bleiben dir zwei Optionen:
- Löschen des Objekts aus dem Transportauftrag, um die Sperre zu entfernen
- Freigabe des Transports, damit alle Sperren entfernt werden
Haben wir nun die Sperre entfernt, dann sollte bei der Durchführung der Aktion nun der Transport leer sein. Wir können nun einen neuen Transport anlegen.
Die Aktion sollte nun erfolgreich durchgeführt sein und das Objekt sich in der neuen SWC befinden. Der Transport weist nun das richtige Transportziel auf. Damit kannst du die restlichen Objekte in die Komponente verschieben. In der SAP Help wirst du auch die Information finden, dass Pakete nicht verschoben werden können und Service Bindings vorher "unpublished" werden müssen. Bei dieser Variante musst du jedes Objekt per Hand verschieben, eine Massenaktivität gibt es aktuell nicht.
abapGit
In der zweiten Variante können wir abapGit verwenden, um komplette Pakete zu sichern und auf einem anderen System zur Verfügung zu stellen. Grundsätzlich funktioniert die Methode auch im gleichen System, du musst allerdings vorher alle Objekte löschen, die du gesichert hast, sonst können die Objekte nicht neu angelegt werden.
Dazu legen wir im ersten Schritt ein Git-Repository an und Synchronisieren die Objekte damit. Dafür benötigst du das abapGit Plugin für Eclipse. Im nächsten Schritt verlinken wir unser Repository.
Im nächsten Schritt nehmen wir das zu sichernde Paket und definieren den Branch mit dem wir arbeiten. In den meisten Fällen werden wir beim MAIN Branch bleiben.
Nun können wir einen Commit für alle Objekte erzeugen, die wir im nächsten Schritt sichern und wieder herstellen wollen.
Die Objekte sind nun mit dem Git synchronisiert und wir können ins nächste System wechseln oder das aktuelle System bereinigen. In diesem Fall löschen wir das Objekt aus dem System und entfernen weitere Sperren. Zum Abschluss müssen wir das Projekt aus dem System entfernen über "Unlink".
Nachdem wir diesen Schritt durchgeführt haben, stellen wir einen neuen Link mit unserem neuen Paket her. Im Anschluss führen wir einen Pull aus, um die Objekte aus dem Git mit unserem System zu synchronisieren.
In den nächsten Dialogen ignorieren wir die Objekte, die bereits im Paket sind und wählen die Objekte, die nur Remote zur Verfügung stehen. Ebenso wählen wir den Transport für die SWC oder erstellen einen Neuen. Nach dem erfolgreichen Pull der Objekte sollten nun beide Klassen in der neuen Software Komponente angekommen sein.
Empfehlung
Wir empfehlen dir auch für einen PoC eine Software Komponente zu verwenden, da diese die meiste Flexibilität hat. Am Ende des PoC kannst du dich dann entscheiden, die SWC direkt in den Test zu bringen oder sie komplett aus dem System zu löschen. Dafür müssen allerdings alle Objekte konsistent sein und alle Transporte freigegeben sein, sodass im Git Repository der aktuelle Stand der SWC ist.
Eine Software Komponente steht im Global Account zur Verfügung, sodass sie einfach auf verschiedene ABAP Umgebungen in den verschiedenen Sub-Accounts gebracht werden kann. Die Verwaltung findet über die Fiori App "Manage Software Components" (F3562) statt.
Fazit
Hast du dein erstes Projekt in ZLOCAL angelegt, ist das kein Problem, du kannst die Objekte einfach in eine Software Komponente übernehmen. In Zukunft kannst du aber auch einfach deine PoCs direkt in Software Komponenten anlegen, da diese auch einfach aus dem System entfernt werden können oder du diese dann direkt produktiv nehmen kannst.
Weitere Informationen:
SAP Help - Changing the Package Assignment