ABAP - XCO Bibliotheken
Was kannst du mit der Bibliothek in ABAP und ABAP Cloud machen und wie nutzt du die Objekte am besten? Hier erfährst du mehr.
Inhaltsverzeichnis
In diesem Artikel schauen wir uns im Allgemeinen die Bibliothek an, wie sie integriert wird und welche weiteren Methoden und Ideen dahinter stecken.
Einleitung
SAP stellt die sogenannten XCO (Extension Components) Bibliotheken zur Verfügung, die im klassischen ABAP, sowie in ABAP Cloud verwendet werden können. Du findest die Objekte anhand der Namensgebung in deinem System. Die Klassen beginnen mit XCO*, dort können dann nach Abkürzungen wie CP (Cloud Platform) oder KU (Key User Tools) vorkommen, die dann das Szenario weiter einschränken. Eine Übersicht in der offiziellen Dokumentation findest du hier.
In ABAP Cloud wird die Nutzung von freigegebenen APIs immer wichtiger, daher ist ein einheitliches Verständnis und einheitlich genutzte Komponenten wichtig. Welche API nutzt du nun für welchen Use-Case sollte damit in Zukunft eindeutiger werden.
Struktur
Möchtest du dir einen Überblick über die verschiedenen Klassen und die Struktur machen, dann kannst du über die ABAP Development Tools im Project Explorer einen neuen Baum einblenden. Dazu kannst du über das Kontextmenü auf dem System einen neuen Baum anlegen.
In diesem Fall lassen wir uns die freigegebenen Objekte anzeigen. Dazu schränken wir die Namen auf XCO_* ein, die Object Type Group können wir so weit entfernen.
Nachdem der Baum erstellt wurde, finden wir die Objekte klassifiziert nach ABAP Cloud und Key User Extensibility im Project Explorer. Dort sollten nun alle nutzbaren Klassen vorhanden sein. Grundsätzlich kommt es auf das Backend Release an, wie viele Klassen dir zur Verfügung stehen und ob auch alle Methoden vorhanden sind.
Aufbau
In diesem Abschnitt schauen wir uns einmal das Design und den Aufbau der Klassen an und wie du sie am besten verwenden kannst.
Fluent Interface
Die Klassen sind im Fluent Interface Pattern entwickelt, das heißt du kannst die verschiedenen Aufrufe und Objekte miteinander verketten. Jede Methode gibt meist ein neues oder das gleiche Objekt zurück, damit können die Aufrufe aneinanderketten. Dazu das folgende Beispiel:
DATA(ld_string) = `This is my new text string`.
xco_cp=>string( ld_string )->to_upper_case( )->append( ` with addition` )->split( ` ` )->value.
In diesem Beispiel erzeugen wir über die String Klasse ein neues String Objekt, konvertieren den String in Großschreibung, hängen noch einen weiteren Teil an und teilen den String am Leerzeichen. Das Ergebnis lassen wir zum Schluss noch ausgeben.
Neben dem Fluent Interface Pattern gibt es auch zu allen Objekten entsprechende Interfaces, was die Testbarkeit und das Mocking erleichtert. Bei vielen Klassen wirst du auch lokale Unit Tests finden.
Wert
Wie du bereits im Beispiel oben gesehen hast, stehen verschiedene Methoden zur Verfügung, die jede Klasse mit sich bringt. Um auf den Inhalt des Objekts zugreifen zu können, verwendest du das Attribut VALUE. Je nach Klasse kann es sich dabei um einen Wert, eine Tabelle oder ein Objekt handeln.
xco_cp=>string( ld_string )->value.
Fehlerbehandlung
Alle Klassen sind mit NO_CHECK ausgestattet. Das heißt in der Signatur wirst du keine Exception finden und musst dich damit nicht um das Exception Handling kümmern. Allerdings können Ausnahmen erzeugt werden die vom Typ CX_XCO_RUNTIME_EXCEPTION bzw. Ausnahmen, die von dieser Klasse erben. Weitere Informationen dazu in den Kernprinzipien der Klassen.
Objekte
Die Objekte werden direkt beim Aufruf instanziiert und selbst die verschiedenen Einstellungen und Konfigurationen stehen als Objekt in der Hauptklasse zur Verfügung. Suchst du nach dem Interface und der Verwendung, kannst du schnell in einer Sackgasse landen. Schauen wir uns dazu zum Beispiel die Klasse XCO_CP_JSON an und wie wir die richtige Formatierung übergeben. Dazu müssen wir die APPLY Methode aufrufen, um eine Tabelle mit Instanzen vom Typ IF_XCO_JSON_TRANSFORMATION zu übergeben.
Normalerweise würden wir uns nun die "Type Hierarchy" (F4) zu dem Interface anschauen, um die Klassen für die Erzeugung heranzuziehen.
Schauen wir uns aber nun die Klasse an, steht diese auf PRIVATE und wir können davon kein Objekt erzeugen.
Schauen wir uns dann den Global Friend der Klasse an, werden die Instanzen im Konstruktor der Factory-Klasse erzeugt.
Über das Interface der Factory IF_XCO_JSON_TRANSFORMATION_FCT finden wir dann die öffentlichen Attribute, die wir hier eigentlich verwenden sollten. Daher lohnt sich bei den Klassen der Blick in die Hauptobjekte, wenn es um die Konfiguration und zusätzliche Einstellungen geht.
Übersicht
Über unsere Übersichtsseite wollen wir dir einen allgemeinen Überblick über die verschiedenen Bibliotheken geben und im Laufe der Zeit die Seite mit weiteren Beispielen und Klassen befüllen. Damit erhältst du einen leichteren Überblick, was es alles gibt und wie du es nutzen kannst.
Fazit
Die XCO Klassen sind gesammelte Wünsche aus der Community und sollen zentrale Funktionen zur Wiederverwendung zur Verfügung stellen. Die Suche nach der passenden Funktion in den weiten der Klassen und Funktionsbausteine soll damit entfallen.