Abbildung: Definition einer benutzerdefinierten Tabelle im ABAP Dictionary (SE11). In diesem Beispiel wird die Tabelle ZCUST_REV mit Feldern (z. B. Kundennummer) erstellt. Der Entwickler legt für jedes Feld den Namen, den Datentyp (NUMC mit Länge 6 für die Kundennummer) und die Schlüsselkennzeichnung fest. Solche benutzerdefinierten Tabellen ermöglichen die persistente Speicherung anwendungsspezifischer Daten in der S/4HANA-Datenbank.
Sobald die Tabelle aktiviert ist, kann sie von ABAP-Programmen beschrieben oder ein Pflegedialog für Benutzererstellt werden, um Einträge zu bearbeiten. Benutzerdefinierte Tabellen werden über Workbench-Transporte systemübergreifend transportiert.
Funktionsbaustein
Um eine wiederverwendbare Funktion zu erstellen (z. B. eine Funktion zur Berechnung eines Bonus oder zur Abfrage aggregierter Daten), nutzen Sie SE37 (Function Builder):
1. SE37 öffnen, Funktionsbaustein erstellen auswählen und einen Namen vergeben (z. B. ZCALC_BONUS) innerhalb einer benutzerdefinierten Funktionsgruppe (Funktionen existieren in Gruppen). Eine Kurzbeschreibung angeben.
2. Import-Parameter, Export-Parameter und Ausnahmen (Exceptions) im oberen Bereich des Function Builders definieren. Diese Parameter bilden die Schnittstelle der Funktion.
3. Im Bereich Source Code die ABAP-Logik implementieren. Zum Beispiel:
• Eine Mitarbeiter-ID importieren
• Die Datenbank nach Verkaufsdaten abfragen
• Einen Bonus berechnen
• Den Bonusbetrag als Exportwert zurückgeben
4. Den Funktionsbaustein speichern und aktivieren. Er kann nun aus jedem ABAP-Programm aufgerufen oder als remote-fähige API (RFC) freigegeben werden.
Funktionsbausteine können auch als User Exits dienen (SAP stellt manchmal leere Funktionsbausteine bereit, die bei bestimmten Ereignissen aufgerufen und von Kunden befüllt werden). Zudem können sie in OData- oder SOAP-Services eingebunden und für externe Systeme bereitgestellt werden.
Developing a Custom Report and Transaction Code
Erstellung eines benutzerdefinierten Berichts und Transaktionscodes
Benutzerdefinierter Bericht
ABAP-Berichte sind eigenständige ausführbare Programme, die häufig für Datenabfragen, einfache Ausgaben oder Batch-Jobs verwendet werden. Um einen Bericht zu erstellen:
1. Öffnen Sie SE38 (ABAP Editor) und erstellen Sie ein neues Programm (Typ: “Ausführbar”).
2. Alternativ können Sie in Eclipse ADT ein neues ABAP-Programm erstellen.
Ein einfacher Bericht, der Kunden und ihre Umsätze auflistet, könnte folgendermaßen aussehen:
REPORT zcustomer_revenue_report.
TABLES: zcust_rev. " declare usage of the custom table
SELECT zcust_no AS Customer, SUM(zrevenue) AS Total_Revenue
FROM zcust_rev
GROUP BY zcust_no
INTO TABLE @DATA(lt_rev_by_cust).
LOOP AT lt_rev_by_cust INTO DATA(ls_line).
WRITE: / ls_line-Customer, ls_line-Total_Revenue.
ENDLOOP.
Dieses Programm führt eine SELECT-Abfrage auf der benutzerdefinierten Tabelle aus, um den Umsatz nach Kunden zu aggregieren. Anschließend werden die Ergebnisse in einer Schleife ausgegeben. In der Praxis werden Berichte oft mit der ALV-Gitteranzeige für eine bessere Benutzeroberfläche und Selektionsbildschirme für Benutzereingaben (mittels PARAMETERS oder SELECT-OPTIONS im Code) erstellt.
Nach der Erstellung des Berichts muss dieser aktiviert werden. Sie können ihn direkt in SE38 oder über SA38 durch Eingabe des Programmnamen ausführen.
Falls Endbenutzer diesen Bericht einfach starten sollen, kann ein Transaktionscode erstellt werden:
1. Öffnen Sie SE93 (Transaktionen pflegen).
2. Wählen Sie Erstellen und geben Sie einen Transaktionscode ein (z. B. ZCUST_REV_REP).
3. Wählen Sie als Transaktionstyp “Programm und Selektionsbildschirm” und verknüpfen Sie die Transaktion mit dem Berichtsprogramm.
4. Speichern Sie die Transaktion – danach können Benutzer den Bericht über diesen Transaktionscode aus dem SAP Easy Access-Menü ausführen.
Benutzerdefinierte Transaktionen können auch in Benutzermenüs oder Rollen eingebunden werden, sodass sie im SAP Fiori Launchpad (als GUI-Transaktionen) oder im SAP GUI Easy Access-Menü angezeigt werden.
Erweiterung der SAP-Standardfunktionalität (BADIs und User Exits)
SAP bietet Erweiterungsmechanismen, mit denen benutzerdefinierter Code an vordefinierten Einhängepunkten (Hook Points) in Standardprogrammen ausgeführt werden kann. Dies stellt sicher, dass SAP-Standardcode nicht geändert wird (was zukünftige Upgrades erschweren würde), während dennoch individuelle Logik eingefügt werden kann. Die zwei häufigsten Erweiterungstechniken sind User Exits (einschließlich Customer Exits) und BADIs (Business Add-Ins):
User Exits / Customer Exits
Dies sind klassische (meist prozedurale) Erweiterungstechniken. Ein User Exit ist eine Subroutine oder ein Funktionsbaustein, den SAP an bestimmten Stellen im Programm aufruft. Standardmäßig tun diese Exits nichts, können aber von Kunden implementiert werden.
📌 Beispiel:
Im SD-Modul ermöglicht der User Exit MV45AFZZ das Einfügen benutzerdefinierter Prüfungen während der Auftragsbearbeitung.
So implementieren Sie einen User Exit:
1. Finden Sie die relevante SMOD/CMOD-Erweiterung. SAP gruppiert mehrere Exits oft in einer SMOD-Erweiterungmit einem bestimmten Namen.
2. Öffnen Sie CMOD, erstellen Sie ein Projekt, weisen Sie die relevante Erweiterung zu und fügen Sie Ihren Code in die vorgesehenen Includes oder Funktionsbausteine ein.
3. Nach der Aktivierung wird der benutzerdefinierte Code automatisch als Teil des Standardprozesses ausgeführt.
➡ User Exits erfordern oft Code in Includes oder Funktionsbausteinen, die SAP als Exit-Punkte definiert hat.
BADIs (Business Add-Ins)
BADIs sind eine modernere, objektorientierte Erweiterungstechnik. Ein BADI ist eine Schnittstelle mit einer oder mehreren Methoden, die SAP an einem bestimmten Punkt im Code bereitstellt. Entwickler können eine oder mehrere Implementierungen dieser Schnittstelle erstellen, um ihren benutzerdefinierten Code auszuführen.
BADIs werden über die Transaktionen SE18 (Definition, von SAP) und SE19 (Implementierung, durch Kunden) verwaltet. SAP stellt BADI-Definitionen bereit (z. B. gibt es einen BADI zur Erweiterung der Rechnungsbuchung). Der Entwickler erstellt dazu eine BADI-Implementierung, in der er die Logik in einer der angebotenen Methoden implementiert.
Hauptunterschied zwischen User Exits und BADIs:
✅ User Exits sind ältere, prozedurale Methoden, die oft begrenzter sind (z. B. in Includes eingebettet).
✅ BADIs sind vollständig objektorientiert und können mehrere Implementierungen haben (einige BADIs erlauben parallele oder filtergesteuerte Implementierungen).
Implementierung eines BADIs – Schritt für Schritt
1. Die richtige BADI-Definition finden
• Verwenden Sie SE18, die SAP-Dokumentation oder die “Wo wird verwendet”-Suche in SAP GUI mit dem Begriff „BADI“.
• In neueren Systemen werden viele Erweiterungen über Enhancement Spots verwaltet, die mehrere BADIs enthalten können.
2. Neue Implementierung in SE19 erstellen
• Öffnen Sie SE19, erstellen Sie eine neue BADI-Implementierung, geben Sie ihr einen Namen und wählen Sie die passende BADI-Definition aus.
3. Klasse für die Implementierung erstellen
• Das System fordert Sie auf, eine Klasse zu erstellen, die die BADI-Schnittstelle implementiert.
• In dieser Klasse schreiben Sie die benutzerdefinierte Logik in den bereitgestellten Methoden.
4. BADI-Implementierung aktivieren
• Sobald die Implementierung aktiviert ist, wird Ihr Code automatisch ausgeführt, wenn das Standardprogramm den BADI über CALL BADI oder das Enhancement Framework aufruft.
• Falls es mehrere Implementierungen gibt, werden entweder alle parallel oder nur die passende Implementierung anhand einer Filterbedingung ausgeführt – je nach BADI-Konfiguration.
Beispiel für eine BADI-Implementierung
Angenommen, SAPs Standard-Rechnungsbuchung verwendet den BADI BADI_INVOICE_POST mit der Methode CHECK_DATA, die vor der Buchung der Rechnung zur Datenvalidierung aufgerufen wird.
➡ Ein Entwickler könnte diesen BADI implementieren, um zusätzliche Prüfungen durchzuführen, z. B.:
✅ Überprüfung einer benutzerdefinierten Tabelle auf spezielle Regeln
✅ Abgleich mit einem externen System, bevor die Rechnung gebucht wird
📌 Wichtig:
Der BADI-Mechanismus stellt sicher, dass der benutzerdefinierte Code ohne Änderung der SAP-Standardlogik ausgeführt wird und so eine flexible und wartbare Erweiterung der SAP-Funktionalität ermöglicht.
📖 Laut offizieller SAP-Dokumentation:
“BADIs (Business Add-Ins) sind ein leistungsstarker Mechanismus in ABAP zur Erweiterung der SAP-Standardfunktionalität, ohne den Kerncode zu verändern. Sie bieten eine flexible und wartbare Möglichkeit, SAP-Anwendungen anzupassen.”
Ähnlich ermöglichen User Exits Erweiterungen an vordefinierten Punkten (z. B. am Ende von Form-Routinen usw.). Beide Techniken können innerhalb eines Projekts verwendet werden:
📌 Beispiel: Ein User Exit wird genutzt, um ein neues Feld auf einem Bildschirm hinzuzufügen, während ein BADIverwendet wird, um den Wert für dieses Feld zu befüllen.
Schritte zur Implementierung eines User Exits (Kurzübersicht)
1. Den Exit identifizieren – über SAP Notes oder Entwicklungsdokumentation.
• Beispiel: Ein SAP SD Exit für Verkaufsaufträge könnte sich im Programm MV45AFZZ befinden.
2. CMOD aufrufen → Projekt erstellen → die relevante Erweiterung zuweisen (eine Erweiterung fasst verwandte Exits zusammen).
3. Für jede Komponente der Erweiterung (z. B. ein Include oder Funktionsbaustein) auf Komponenten klicken und zum entsprechenden Include navigieren.
• Den benutzerdefinierten Code innerhalb des Includes schreiben (zwischen FORM…ENDFORM oder wie vorgesehen).
4. Das Projekt aktivieren – Der Code in den Includes wird jetzt als Teil des SAP-Standardprozesses ausgeführt.
Schritte zur Implementierung eines BADIs (Kurzübersicht)
1. Den BADI-Namen finden
• Über SE18 oder durch Debugging/SQL-Trace prüfen, ob für einen bestimmten Prozess GET_INSTANCE aufgerufen wird.
2. SE19 öffnen → Neue BADI-Implementierung erstellen → die BADI-Definition eingeben.
3. Eine Implementierungsklasse angeben (oder Standardklasse übernehmen) und zum Klasseneditor navigieren.
4. Code in der Methode schreiben
• Beispiel: Falls die Methode CHECK_DATA Importparameter hat, kann eine Prüfung implementiert werden, bei Bedarf ein Export-Flag gesetzt oder eine Exception ausgelöst werden.
5. Die Implementierung aktivieren.
Zusätzliche BADI-Optionen
Viele BADIs haben eine Filteroption, d. h. die Implementierung kann auf bestimmte Kriterien beschränkt werden (z. B. Buchungskreis oder Land). Diese Einstellungen werden in der BADI-Implementierungskonfiguration festgelegt.
Erweiterungs-Framework in SAP (ab ECC 6.0 und S/4HANA)
Mit ECC 6.0 und S/4HANA führte SAP Implizite und Explizite Erweiterungen ein.
Diese ermöglichen es, Erweiterungen in bestimmten Coding-Blöcken oder am Anfang/Ende von Form-Routineneinzufügen.
📌 Diese werden direkt im ABAP Editor über die Option „Enhance“ verwaltet und sind eine weitere Möglichkeit, Standard- oder benutzerdefinierten Code zu erweitern.
📢 Für mittlere Entwicklungsprojekte sind jedoch BADIs und User Exits die am häufigsten verwendeten Techniken und sollten im Fokus stehen.
Erstellung und Bereitstellung von ABAP CDS Views
ABAP Core Data Services (CDS) Views sind ein zentraler Bestandteil der S/4HANA-Entwicklung und spielen eine entscheidende Rolle in SAPs Strategie für in-memory-optimierte Programmierung.
📌 CDS Views ermöglichen es, komplexe Logik und Berechnungen direkt auf die HANA-Datenbankebene zu verlagern. Dadurch können sie effizient in Benutzeroberflächen (Fiori) oder Integrationsszenarien wiederverwendet werden.
➡ CDS Views werden in ABAP mit einem Eclipse-basierten Editor definiert.
➡ Sie verwenden eine deklarative SQL-ähnliche Syntax und integrieren sich nach der Aktivierung mit dem ABAP Data Dictionary.
Wichtige Merkmale von CDS Views
✔ CDS Views werden mit der Syntax DEFINE VIEW in einer DDL-Quelldatei definiert.
• Sie können Basis-Tabellen oder andere Views referenzieren,
• Filter, Joins, Assoziationen und sogar einfache Berechnungen anwenden.
✔ CDS Views unterstützen Annotationen – Metadaten, die:
• Den View als OData-Service bereitstellen,
• Das UI-Verhalten in Fiori Elements steuern.
✔ Nach der Aktivierung erzeugt ein CDS View:
• Eine SQL-View in der HANA-Datenbank,
• Ein Laufzeitobjekt in ABAP, das in ABAP-Programmen per SELECT-Abfrage wie eine Tabelle genutzt werden kann.
Erstellung eines CDS Views (Schritt-für-Schritt)
1️⃣ In Eclipse ADT:
• Ein neues ABAP DDL-Quelldokument erstellen (z. B. ZCUST_REVENUE_VIEW).
• Ein Transportauftrag und ein Paket müssen je nach Projekt ausgewählt werden.
2️⃣ Verwendung der CDS-Syntax zur Definition des Views.
• Beispiel:
@AbapCatalog.sqlViewName: 'ZCUSTREVV'
@AbapCatalog.compiler.compareFilter: true
@OData.publish: true
define view ZCUST_REVENUE_VIEW
as select from zcust_rev
{
zcust_no,
zregion,
sum( zrevenue ) as total_revenue
}
group by zcust_no, zregion
TDies definiert einen CDS-View, der die benutzerdefinierte Tabelle nach Kunde und Region aggregiert und den Umsatz summiert.
Die hier verwendeten Annotationen geben den zugehörigen SQL-View-Namen an und ermöglichen die OData-Expose-Funktion.
📌 @OData.publish: true würde in SAP S/4HANA automatisch einen OData-Service für diesen View generieren.
Schritte nach der Definition des CDS-Views
1️⃣ CDS-View aktivieren
• Die Aktivierung erstellt die Datenbank-View und macht den OData-Service verfügbar.
• Falls OData genutzt wird, generiert SAP im Hintergrund automatisch einen Service, den Sie in Transaktion /IWFND/MAINT_SERVICE finden und für die Nutzung aktivieren können.
2️⃣ CDS-View testen
• Datenvorschau in Eclipse durchführen oder
• In SE16 die generierte SQL-View aufrufen.
CDS Views als mehrschichtige Architektur
CDS Views können in Schichten unterteilt werden:
📌 Basisschicht → Komposit-Schicht → Konsumschicht (Consumption Views).
✅ In S/4HANA werden CDS Views intensiv genutzt – viele vorkonfigurierte S/4HANA-Analysen und Fiori-Elemente basieren darauf.
✅ Ein großer Vorteil ist, dass durch wenige Annotationen ein CDS-View als OData-Service bereitgestellt werden kann.
• Dadurch entfällt oft das manuelle Erstellen eines OData-Services für einfache Leseoperationen – die Plattform generiert dies automatisch.
Bereitstellung und Transport von CDS Views
• Nach der Erstellung können CDS Views über die üblichen SAP-Transporte in andere Systeme übertragen werden.
• CDS Views sind Objekte des Typs R3TR DDLS und können nach Entwicklung und Tests von DEV nach QA und Produktion transportiert werden.
Zusammenfassung
Die ABAP-Entwicklung für Add-ons umfasst:
✔ Die Erstellung benutzerdefinierter Dictionary-Objekte (Tabellen, Datenelemente),
✔ Das Schreiben von ABAP-Programmen oder die Erweiterung bestehender Programme,
✔ Die Nutzung von ABAP-Frameworks wie CDS und Enhancement-Spots, um Standardfunktionen upgradesicher zu erweitern.
4. Entwicklung von Fiori-Anwendungen mit SAP BTP
In diesem Abschnitt wechseln wir zur Frontend-Entwicklung:
📌 SAP Fiori-Anwendungen mit SAPUI5.
Diese Anwendungen laufen im Webbrowser (oder im Fiori Launchpad) und kommunizieren mit dem SAP S/4HANA-Backend über OData-Services.
➡ Wir nutzen SAPs cloudbasierte Entwicklungsumgebungen (SAP Web IDE oder SAP Business Application Studio auf SAP BTP), um eine Fiori-App zu erstellen, zu testen und bereitzustellen.
Überblick über die SAP Fiori/UI5-Architektur
Eine SAP Fiori-Anwendung folgt typischerweise einem Client-Server-Modell:
✔ Client-Seite → Die SAPUI5-App (HTML5/JavaScript-Anwendung) läuft im Browser und verwaltet die Benutzeroberfläche und Benutzerinteraktionen.
✔ Server-Seite →
• Das SAP S/4HANA-System (oder eine SAP BTP ABAP-Umgebung) stellt Geschäftsdaten über OData-Servicesbereit.
• Die SAP Gateway-Komponente (integriert in S/4HANA) veröffentlicht diese OData REST-Endpunkte, die von der UI5-App genutzt werden, um Daten zu erstellen, zu lesen, zu aktualisieren oder zu löschen (CRUD-Operationen).
SAP Fiori Launchpad – Der zentrale Einstiegspunkt
SAP Fiori-Apps werden aus dem SAP Fiori Launchpad gestartet.
📌 Das Launchpad ist eine Web-Plattform, die als zentrale Homepage mit Kacheln für jede App dient.
✔ Jede Kachel repräsentiert eine Fiori-App (oder einen Link zu einer klassischen GUI-Transaktion).
✔ Die Kachel ist mit einem OData-Service und einem UI5-Komponenten-Namen verknüpft.
✔ Wenn ein Benutzer eine Kachel klickt, wird die UI5-App im Browser geladen und ruft die OData-Services im Backend auf, um Daten zu holen oder zu senden.
🔹 Fiori-Apps sind rollenbasiert:
• Benutzer sehen nur die Apps, für die sie berechtigt sind.
• Die Berechtigungen steuern, welche Aktionen innerhalb der App möglich sind.
Architektur: Trennung von UI und Backend durch OData
Fiori nutzt ein entkoppeltes Modell, in dem die UI vom Backend durch OData-Services getrennt ist:
✅ Der gleiche OData-Service kann mehrere Oberflächen bedienen (Web UI, mobile UI usw.).
✅ Die UI kommuniziert nicht direkt mit der Datenbank, sondern über definierte Service-APIs.
Zusammenfassung
➡ “SAP Fiori-Apps werden mit SAPUI5 entwickelt, über das SAP Fiori Launchpad gestartet und beziehen Geschäftsdaten über OData-Services aus dem SAP S/4HANA-Backend.”
✔ Die Architektur ist stateless (jeder OData-Aufruf ist unabhängig → bessere Skalierbarkeit).
✔ Moderne Konzepte wie “Draft Handling” für langlaufende Transaktionen werden unterstützt.
Jetzt entwickeln wir eine Fiori-App – Schritt für Schritt. 🚀
Erstellung einer Fiori-App mit SAP Web IDE / Business Application Studio
In diesem Beispiel nutzen wir die SAP Web IDE (Full-Stack) für die Entwicklung einer Fiori-App.
📌 Die Schritte sind sehr ähnlich in SAP Business Application Studio (BAS).
Schritt-für-Schritt-Anleitung zur Erstellung einer Fiori-App
1️⃣ SAP Web IDE starten
• Öffnen Sie SAP Web IDE über das SAP BTP Cockpit (stellen Sie sicher, dass es zuvor aktiviert wurde, wie in Abschnitt 2 beschrieben).
• Die webbasierte Entwicklungsumgebung sollte nun sichtbar sein.
• Wählen Sie File > New > Project from Template, um den Projekt-Wizard für eine neue Fiori-App zu starten.
• (In Business Application Studio: Öffnen Sie einen Dev Space und nutzen den Befehl „Fiori: Create Project“ oder die Yeoman-Templates.)
2️⃣ Projektvorlage auswählen
• Die SAP Web IDE bietet vordefinierte Projektvorlagen, z. B.:
• SAP Fiori Worklist Application
• SAPUI5 Application
• Master-Detail Application
• Wählen Sie z. B. die SAP Fiori Master-Detail Application und klicken Sie auf Next.
3️⃣ Projekt konfigurieren
• Geben Sie einen Projektnamen ein (z. B. CustomerRevenueApp).
• Falls erforderlich, legen Sie ein Namespace fest.
• Wählen Sie die Datenquelle für die App aus:
• Falls ein OData-Service bereits existiert (z. B. der zuvor erstellte CDS View oder ein SAP-Standard-Service), wählen Sie Service Catalog.
• Wählen Sie dann die vorkonfigurierte Destination und den OData-Service aus S/4HANA.
• Der Wizard ruft automatisch die Service-Metadaten ab.
• Wählen Sie das Entity Set, das in der App angezeigt werden soll (z. B. eine Entität für Kundenumsätze).
4️⃣ Wizard abschließen
• Die Web IDE generiert nun ein vollständiges Projekt mit allen notwendigen Dateien:
• Controller (JavaScript)
• Views (XML)
• i18n-Texte (Mehrsprachigkeit)
• manifest.json (Anwendungsbeschreibung)
• Dieses generierte Projekt ist direkt lauffähig und kann sofort getestet werden.
5️⃣ App ausführen und testen
• Klicken Sie mit der rechten Maustaste auf den neu erstellten Projektordner und wählen Sie Run > Run as Web Application.
• Dies öffnet ein neues Browser-Tab mit einer Test-URL (häufig Port 8080 für lokale Tests oder ein FLP Sandbox-Modus in der Cloud).
• Die App wird geladen und ruft den OData-Service auf (über die konfigurierte Destination).
• Falls alles korrekt eingerichtet ist, sehen Sie nun Echtdaten aus Ihrem Backend, z. B.:
• Eine Kundenliste
• Eine Detailseite mit Umsatzdaten für jeden Kunden.
6️⃣ Die App weiterentwickeln
• Nun können Sie den generierten Code anpassen:
• Öffnen Sie die View-XML-Dateien, um das UI-Layout oder die Labels zu ändern.
• Bearbeiten Sie die Controller-JS-Dateien, um zusätzliche Logik hinzuzufügen (z. B. Eingabevalidierung, dynamische Navigation).
• Passen Sie die i18n-Property-Dateien an, um Texte zu lokalisieren.
• Neue UI-Elemente (Diagramme, Tabellen, Filter) mit SAPUI5-Steuerelementen hinzufügen und mit OData-Daten binden.
Typische Entwicklungsaufgaben in einer Fiori-App
✅ Datenformatierung (mit Formattern in UI5).
✅ Navigation zwischen Views (falls nicht im Template enthalten).
✅ Custom OData-Calls – Methodenaufrufe für Aktionen wie Genehmigungen oder Datenänderungen.
✅ Leistungsoptimierung
• Nutzung von $select oder $expand in OData-Abfragen, um die Datenlast zu minimieren.
Debugging und Testen während der Entwicklung
🛠 Während der Entwicklung wird häufig:
✔ Die Browser-Konsole (Chrome DevTools) zur Fehlersuche verwendet.
✔ Die UI5-Debugging-Tools genutzt.
✔ Der Fiori Launchpad Sandbox-Modus in SAP Web IDE oder BAS verwendet, um mehrere Apps in einer simulierten Launchpad-Umgebung zu testen.
🚀 Nächster Schritt: Die Fiori-App weiterentwickeln und für den produktiven Einsatz bereitstellen!