Willkommen zum RAP Tutorial für Anfänger! In diesem ersten Teil baust du in 30 Minuten eine vollständige SAP Fiori App - von der Datenbanktabelle bis zur UI. Kein Vorkenntnisse erforderlich!
🎯 Was du bauen wirst
Eine Bücherverwaltung (Book Management App) mit:
- ✅ Liste aller Bücher
- ✅ Anlegen neuer Bücher
- ✅ Bearbeiten/Löschen von Büchern
- ✅ Such- und Filterfunktion
- ✅ Automatisch generierte Fiori Elements UI
Ergebnis: Voll funktionsfähige Fiori App ohne eine Zeile UI-Code!
📋 Voraussetzungen
System
- SAP BTP ABAP Environment Trial (kostenlos, 365 Tage)
Oder:
- SAP S/4HANA 2022 oder höher (On-Premise/Cloud)
Tools
- ABAP Development Tools (ADT) für Eclipse
- Download: tools.hana.ondemand.com
- Version: Neueste (2024 oder höher)
Wissen
- Basis ABAP-Kenntnisse hilfreich, aber nicht zwingend
- Keine RAP-, CDS- oder Fiori-Kenntnisse nötig
Geschätzte Zeit: 30-45 Minuten
🏗️ RAP-Architektur im Überblick
Bevor wir starten, kurz die Struktur:
┌─────────────────────────────────────┐│ Fiori Elements UI │ ← Automatisch generiert!├─────────────────────────────────────┤│ OData Service │ ← Service Binding├─────────────────────────────────────┤│ Service Definition │ ← Welche Entities exposen?├─────────────────────────────────────┤│ Projection Layer (C_*) │ ← UI-spezifische View│ + Behavior Definition │├─────────────────────────────────────┤│ Business Object Layer (I_*) │ ← Datenmodell (CDS View)│ + Behavior Definition (BDEF) │ ← CRUD-Logik│ + Behavior Implementation (BIL) │├─────────────────────────────────────┤│ Datenbanktabelle │ ← Daten speichern└─────────────────────────────────────┘Keine Sorge! Klingt komplex, ist es aber nicht. Wir gehen Schritt für Schritt durch.
Schritt 1: Package erstellen
Wir brauchen ein Package für alle Objekte.
In ADT:
- Rechtsklick auf
ZLOCAL(oder dein Package) →New→ABAP Package - Name:
ZBOOK_RAP_TUTORIAL - Description:
RAP Tutorial - Book Management - Package Type:
Development - Finish
Ergebnis: Package ZBOOK_RAP_TUTORIAL ist angelegt.
Schritt 2: Datenbanktabelle erstellen
2.1 Neue Tabelle anlegen
- Rechtsklick auf Package →
New→Other ABAP Repository Object - Suche:
Database Table - Name:
ZBOOK_TAB - Description:
Books Table - Next → Finish
2.2 Tabellenstruktur definieren
Ersetze den generierten Code mit:
@EndUserText.label : 'Books Table'@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE@AbapCatalog.tableCategory : #TRANSPARENT@AbapCatalog.deliveryClass : #A@AbapCatalog.dataMaintenance : #RESTRICTEDdefine table zbook_tab { key client : abap.clnt not null; key book_id : abap.char(10) not null; title : abap.char(100); author : abap.char(50); publisher : abap.char(50); isbn : abap.char(13); @Semantics.amount.currencyCode : 'zbook_tab.currency_code' price : abap.curr(16,2); currency_code : abap.cuky; pages : abap.int4; publication_year: abap.numc(4); language : abap.char(2);
@Semantics.user.createdBy : true created_by : abap.char(12); @Semantics.systemDateTime.createdAt : true created_at : timestampl; @Semantics.user.lastChangedBy : true last_changed_by : abap.char(12); @Semantics.systemDateTime.lastChangedAt : true last_changed_at : timestampl;}2.3 Speichern & Aktivieren
- Speichern:
Ctrl+S - Aktivieren:
Ctrl+F3
Ergebnis: Tabelle ZBOOK_TAB existiert in der Datenbank.
Schritt 3: CDS Interface View erstellen (I_*)
Die Interface View ist das Datenmodell unseres Business Objects.
3.1 Neue CDS View anlegen
- Rechtsklick auf Package →
New→Other ABAP Repository Object - Suche:
Data Definition - Name:
ZI_BOOK - Description:
Book - Interface View - Referenced Object:
ZBOOK_TAB - Next → Finish
3.2 CDS View definieren
Ersetze den Code mit:
@AccessControl.authorizationCheck: #NOT_REQUIRED@EndUserText.label: 'Book - Interface View'
define root view entity ZI_BOOK as select from zbook_tab{ key book_id as BookId, title as Title, author as Author, publisher as Publisher, isbn as Isbn,
@Semantics.amount.currencyCode: 'CurrencyCode' price as Price,
@Semantics.currencyCode: true currency_code as CurrencyCode,
pages as Pages, publication_year as PublicationYear, language as Language,
@Semantics.user.createdBy: true created_by as CreatedBy,
@Semantics.systemDateTime.createdAt: true created_at as CreatedAt,
@Semantics.user.lastChangedBy: true last_changed_by as LastChangedBy,
@Semantics.systemDateTime.lastChangedAt: true last_changed_at as LastChangedAt}Wichtig: define root view entity - “root” bedeutet, dass dies das Haupt-Business Object ist.
3.3 Aktivieren
Ctrl+F3
Ergebnis: CDS View ZI_BOOK ist aktiviert.
Schritt 4: Behavior Definition erstellen (BDEF)
Die Behavior Definition definiert, was mit dem Business Object gemacht werden kann (Create, Update, Delete, etc.).
4.1 BDEF anlegen
- Rechtsklick auf
ZI_BOOK→New Behavior Definition - Implementation Type:
Managed - Next → Finish
4.2 BDEF definieren
Ersetze den Code mit:
managed implementation in class zbp_i_book unique;strict ( 2 );
define behavior for ZI_BOOK alias Bookpersistent table zbook_tablock masterauthorization master ( instance )etag master LastChangedAt{ // Standard CRUD-Operationen create; update; delete;
// Felder, die readonly sind field ( readonly ) BookId; field ( readonly ) CreatedBy, CreatedAt, LastChangedBy, LastChangedAt;
// Automatische Nummernvergabe für BookId field ( numbering : managed ) BookId;
// Mapping: CDS-Feld → Tabellenfeld mapping for zbook_tab { BookId = book_id; Title = title; Author = author; Publisher = publisher; Isbn = isbn; Price = price; CurrencyCode = currency_code; Pages = pages; PublicationYear = publication_year; Language = language; CreatedBy = created_by; CreatedAt = created_at; LastChangedBy = last_changed_by; LastChangedAt = last_changed_at; }}Erklärung:
managed: Framework übernimmt CRUD-Operationen automatischstrict ( 2 ): Best-Practice-Moduscreate; update; delete;: Diese Operationen sind erlaubtfield ( numbering : managed ): BookId wird automatisch vergeben
4.3 Aktivieren
Ctrl+F3
Ergebnis: Behavior Definition ZI_BOOK ist aktiviert. ADT generiert automatisch die Behavior Implementation Class ZBP_I_BOOK.
Schritt 5: CDS Projection View erstellen (C_*)
Die Projection View ist die UI-spezifische Sicht auf das Business Object.
5.1 Projection View anlegen
- Rechtsklick auf Package →
New→Other ABAP Repository Object - Suche:
Data Definition - Name:
ZC_BOOK - Description:
Book - Projection View - Next → Finish
5.2 Projection View definieren
@EndUserText.label: 'Book - Projection View'@AccessControl.authorizationCheck: #NOT_REQUIRED
@Metadata.allowExtensions: true@Search.searchable: true
define root view entity ZC_BOOK provider contract transactional_query as projection on ZI_BOOK{ key BookId,
@Search.defaultSearchElement: true @Search.fuzzinessThreshold: 0.8 Title,
@Search.defaultSearchElement: true Author,
Publisher, Isbn,
@Semantics.amount.currencyCode: 'CurrencyCode' Price,
@Semantics.currencyCode: true CurrencyCode,
Pages, PublicationYear, Language,
CreatedBy, CreatedAt, LastChangedBy, LastChangedAt}Neu:
@Search.searchable: true: Aktiviert Suche@Search.defaultSearchElement: true: Title & Author sind durchsuchbar
5.3 Aktivieren
Ctrl+F3
Schritt 6: Projection Behavior Definition
6.1 BDEF für Projection anlegen
- Rechtsklick auf
ZC_BOOK→New Behavior Definition - Implementation Type:
Projection - Next → Finish
6.2 Projection BDEF definieren
projection;strict ( 2 );
define behavior for ZC_BOOK alias Book{ use create; use update; use delete;}Kurz und knapp: Wir “verwenden” (use) die CRUD-Operationen vom Interface Layer.
6.3 Aktivieren
Ctrl+F3
Schritt 7: Metadata Extensions (UI-Annotations)
Hier definieren wir, wie die UI aussehen soll.
7.1 Metadata Extension anlegen
- Rechtsklick auf
ZC_BOOK→New Metadata Extension - Name:
ZC_BOOK(gleicher Name wie View) - Next → Finish
7.2 UI-Annotations definieren
@Metadata.layer: #CORE
annotate view ZC_BOOK with{ // Kopfbereich der Fiori App @UI.headerInfo: { typeName: 'Buch', typeNamePlural: 'Bücher', title: { value: 'Title' }, description: { value: 'Author' } }
// Facetten (Bereiche im Objekt-Detail) @UI.facet: [ { id: 'BookDetails', purpose: #STANDARD, type: #IDENTIFICATION_REFERENCE, label: 'Buch-Details', position: 10 } ]
// Felder in der Liste @UI: { lineItem: [{ position: 10, importance: #HIGH }], identification: [{ position: 10 }], selectionField: [{ position: 10 }] } BookId;
@UI: { lineItem: [{ position: 20, importance: #HIGH }], identification: [{ position: 20 }], selectionField: [{ position: 20 }] } Title;
@UI: { lineItem: [{ position: 30, importance: #HIGH }], identification: [{ position: 30 }], selectionField: [{ position: 30 }] } Author;
@UI: { lineItem: [{ position: 40 }], identification: [{ position: 40 }] } Publisher;
@UI: { identification: [{ position: 50 }] } Isbn;
@UI: { lineItem: [{ position: 50 }], identification: [{ position: 60 }] } Price;
@UI: { identification: [{ position: 70 }] } Pages;
@UI: { lineItem: [{ position: 60 }], identification: [{ position: 80 }] } PublicationYear;
@UI: { identification: [{ position: 90 }] } Language;}Erklärung:
@UI.lineItem: Spalten in der Liste@UI.identification: Felder im Detail-Bildschirm@UI.selectionField: Filter-Felder obenposition: Reihenfolgeimportance: HIGH = immer sichtbar
7.3 Aktivieren
Ctrl+F3
Schritt 8: Service Definition
8.1 Service Definition anlegen
- Rechtsklick auf Package →
New→Other ABAP Repository Object - Suche:
Service Definition - Name:
ZUI_BOOK_O4 - Description:
Book Service Definition - Next → Finish
8.2 Service definieren
@EndUserText.label: 'Book Service Definition'define service ZUI_BOOK_O4 { expose ZC_BOOK as Book;}Super einfach: Wir “exposen” nur unsere Projection View.
8.3 Aktivieren
Ctrl+F3
Schritt 9: Service Binding (OData Service)
Fast geschafft! Jetzt machen wir aus dem Service ein echtes OData-API.
9.1 Service Binding anlegen
- Rechtsklick auf Package →
New→Other ABAP Repository Object - Suche:
Service Binding - Name:
ZUI_BOOK_O4 - Description:
Book Service Binding - Binding Type:
OData V4 - UI - Service Definition:
ZUI_BOOK_O4 - Next → Finish
9.2 Service Binding aktivieren & publishen
- Speichern:
Ctrl+S - Aktivieren:
Ctrl+F3 - Publish klicken (Button rechts oben im Editor)
Ergebnis: OData Service ist aktiv!
Schritt 10: Fiori App öffnen 🎉
10.1 Preview starten
- Im Service Binding (noch offen):
- Entity
Bookmarkieren - Preview klicken (Rechte Seite)
- Browser öffnet sich mit deiner Fiori App!
10.2 Testdaten anlegen
Die Liste ist noch leer. Lass uns Bücher anlegen:
- Create klicken
- Felder ausfüllen:
- Title:
Harry Potter und der Stein der Weisen - Author:
J.K. Rowling - Publisher:
Carlsen - Price:
20.00 - Currency:
EUR - Pages:
335 - Publication Year:
1998 - Language:
DE
- Title:
- Create klicken
Glückwunsch! Dein erstes Buch ist angelegt! 🎉
10.3 Features testen
- Suche: Gib “Harry” in Suchfeld ein → findet das Buch
- Filter: Klicke auf Filter → Filtere nach Author
- Edit: Klicke auf Buch → Edit → Ändere Preis → Save
- Delete: Markiere Buch → Delete
Alles funktioniert - ohne eine Zeile UI-Code!
🎯 Was haben wir gelernt?
Objekte erstellt:
- ✅ Datenbanktabelle (
ZBOOK_TAB) - ✅ CDS Interface View (
ZI_BOOK) - ✅ Behavior Definition Interface (BDEF)
- ✅ CDS Projection View (
ZC_BOOK) - ✅ Behavior Definition Projection
- ✅ Metadata Extension (UI-Annotations)
- ✅ Service Definition (
ZUI_BOOK_O4) - ✅ Service Binding (OData V4)
RAP-Prinzipien:
- Managed Szenario: Framework übernimmt CRUD
- Interface vs. Projection: Trennung Business Logic / UI
- Behavior Definition: Was kann mit Daten gemacht werden?
- Fiori Elements: UI wird aus Annotations generiert
🚀 Nächste Schritte
In Teil 2: Advanced Features lernst du:
- Actions hinzufügen (z.B. “Als gelesen markieren”)
- Validations (z.B. ISBN-Prüfung)
- Determinations (automatische Werte setzen)
- Value Helps (Dropdown-Listen)
- Performance-Optimierung
- Error Handling
- Testing
- Häufige Fehler vermeiden
📚 Weiterführende Ressourcen
Auf abapcloud.com:
SAP Tutorials:
💬 Fragen?
- Hat alles funktioniert?
- Wo bist du hängengeblieben?
- Was soll in Teil 2 vertieft werden?
Schreib uns in den Kommentaren!
Weiter mit Teil 2: Advanced Features →