Einleitung – Vom Datenknecht zum Alleskönner
Denk zurück an deinen ersten CDS-View – vielleicht saßest du damals noch mit einem Kaffee in der Hand und hast dich gefreut, als endlich die ersten Flugdaten angezeigt wurden. Aber hast du dich je gefragt, was noch alles in den CDS-Views steckt? Viel mehr als nur Datenabruf! Mit gezielten Annotationen kannst du nicht nur Abfragen bauen, sondern gleich ganze SAP-Anwendungen steuern – UI, OData-Services und Analysen. In diesem ausführlichen Guide (jetzt mit erweitertem Storytelling und SEO-Optimierung) nehme ich dich mit auf eine spannende Reise durch die Welt der CDS-Annotationen. Hier findest du Praxisbeispiele, Anekdoten aus echten CloudDNA-Projekten und alles, was du brauchst, um deine SAP-Entwicklung auf ein neues Level zu heben.
@UI: Das Gesicht deiner Anwendung – Detailliert erklärt
Bevor wir in die Details einsteigen, hier eine kurze Einleitung: Die @UI-Annotationen sind dein Werkzeug, um Fiori-Apps ohne viel Frontend-Code zu gestalten. Mit ihnen definierst du, welche Felder in Tabellen, Formularen oder Diagrammen erscheinen, wie sie angeordnet sind und welche Interaktionen möglich sind. Diese Annotationen sparen dir Stunden an Entwicklungszeit und bieten eine einheitliche Benutzererfahrung. Nun zu den Details:
Mit @UI gestaltest du Fiori-Apps direkt aus dem CDS-View heraus: Diese Annotation bietet eine Vielzahl an Möglichkeiten. Du kannst nicht nur Tabellen und Formulare erstellen, sondern auch Aktions-Buttons hinzufügen, Standardwerte setzen und responsive Designs definieren. Ein Beispiel: Mit @UI.presentationVariant legst du Sortierung und Gruppierung fest. CloudDNA hat in vielen Projekten erlebt, wie @UI die Entwicklungszeit halbiert. Lass uns tiefer einsteigen:
Tabellenansichten (List-Reports)
Diese Annotation ist eine der wichtigsten im UI-Bereich. Sie bestimmt, welche Felder in einer Tabellenansicht angezeigt werden, in welcher Reihenfolge sie erscheinen und wie sie formatiert sind. Du kannst auch Aktionen wie Bearbeiten, Löschen oder spezielle Buttons hinzufügen. Beispiel aus einem CloudDNA-Projekt: Wir haben in einer Flugdaten-App mit @UI.lineItem alle relevanten Flugdaten angezeigt und gleichzeitig Quick-Actions wie Umbuchungen und Stornierungen integriert. Ein weiterer Tipp: Nutze @UI.dataPoint, um Kennzahlen direkt in der Tabelle als grafische Balken oder Symbole darzustellen. Diese kleinen Details machen deine Fiori-Apps nicht nur funktional, sondern auch visuell ansprechend und benutzerfreundlich.
@UI.lineItem: [{ position: 10, label: 'Flugnummer', importance: #HIGH }]
Filter- und Suchfelder
Diese Annotation ist unverzichtbar für benutzerfreundliche SAP-Fiori-Apps. Sie definiert, welche Felder in der Suchleiste angezeigt werden, wie sie beschriftet sind und in welcher Reihenfolge sie erscheinen. Ein Beispiel aus einem CloudDNA-Projekt: Wir haben mit @UI.selectionField in einer Reisekosten-App wichtige Felder wie Abflughafen, Ankunftsdatum und Buchungscode eingebaut, was den Suchprozess für Nutzer enorm beschleunigte. Außerdem kannst du mit @Consumption.filter vordefinierte Filterlogik hinterlegen, z.B. Standardwerte oder Pflichtfelder. In einem weiteren Projekt haben wir @UI.selectionField genutzt, um dynamische Suchfelder bereitzustellen, die je nach Benutzerrolle unterschiedlich angezeigt wurden. So entsteht eine flexible und intuitive Sucherfahrung.
@UI.selectionField: [{ position: 20, label: 'Abflughafen' }]
Diagramme aus CDS-Views:
Erstelle direkt Diagramme wie Säulen- oder Liniendiagramme. Die @UI.chart-Annotation ist extrem vielseitig: Du kannst Achsenbeschriftungen, Farben, Legenden und sogar Drilldown-Funktionen direkt im CDS-View festlegen. In einem CloudDNA-Projekt haben wir mit @UI.chart interaktive Flugbuchungs-Dashboards gebaut, bei denen Nutzer von der Gesamtübersicht bis zum einzelnen Passagier klicken konnten. Auch Optionen wie Kreisdiagramme, Heatmaps und kombinierte Diagramme sind möglich. Mit @UI.chart definierst du nicht nur den Diagrammtyp, sondern auch Aggregationen, Filter und Sortierungen – und das alles im CDS-View, ohne zusätzlichen UI5-Code.
@UI.chart: { type: #COLUMN, title: 'Buchungen pro Monat' }
Strukturierte Formulare und Tabs:
Hierarchisiere deine App-Ansichten in Tabs oder Sektionen. Die @UI.facet-Annotation ist extrem mächtig und vielseitig. Sie erlaubt es, große Datenmengen und viele Felder in einer SAP-Fiori-App übersichtlich zu strukturieren. Du kannst verschiedene Facetten für Hauptdaten, Detailinformationen, Historien oder Anhänge definieren. In einem CloudDNA-Projekt haben wir @UI.facet genutzt, um eine Flugbuchungsmaske in mehrere Tabs zu unterteilen: Passagierdaten, Flugdetails, Zahlungsinformationen und Historie. Jede Facette wurde direkt im CDS-View konfiguriert, inklusive Reihenfolge, Überschrift und optionaler Anzeige. Auch verschachtelte Facets sind möglich, sodass Benutzer zwischen verschiedenen Sektionen navigieren können. Ein Tipp: Mit @UI.facet.type kannst du zwischen verschiedenen Layouts wählen, wie #COLLECTION für Tabs oder #IDENTIFICATION_REFERENCE für Detailansichten. So sorgst du für eine intuitive Navigation und ein benutzerfreundliches Erlebnis – und das alles direkt aus deinem CDS-View
@UI.facet: [{ id: 'Details', label: 'Flugdetails', type: #FIELDGROUP }]
@OData: Schnittstellen effizient gestalten
@OData-Annotationen bieten eine einfache Möglichkeit, deine CDS-Views als OData-Services bereitzustellen. OData steht für ‚Open Data Protocol‘ und ist ein Standardprotokoll, das den Zugriff auf Daten über das Web erleichtert – ähnlich wie REST, aber speziell für Datenabfragen optimiert. Mit OData kannst du deine SAP-Daten in Echtzeit für andere Systeme oder Benutzer bereitstellen. Sie sparen Zeit, da keine manuelle Erstellung von Gateway-Projekten nötig ist. Neben der Veröffentlichung kannst du auch Entwurfsmodi, Berechtigungssteuerungen und Suchfunktionen aktivieren. Hier ein erweitertes Beispiel:
@OData.publish: true
@OData.entitySet.name: 'FlightSet'
@OData.draft.enabled: true
Dieses Beispiel erstellt automatisch einen Service namens FlightSet mit Entwurfsmodus-Unterstützung. Mit @OData machst du aus deinem CDS-View eine API in Minuten.
Publikation
Sofort eine OData-API erzeugen – ohne zusätzliche Coding. Außerdem kannst du OData-Services in SAP durch das Hinzufügen von Service-Bereitstellungen im SAP Gateway registrieren. In SAP S/4HANA wird dies oft über die Service Maintenance Transaktion /IWFND/MAINT_SERVICE für OData V2 erledigt. Für OData V4 wird hingegen die Transaktion /IWFND/V4_ADMIN verwendet, die speziell für die Verwaltung und Aktivierung von OData V4-Services entwickelt wurde. Dort kannst du den Service aktivieren, Metadaten einsehen und Berechtigungen steuern. Zudem ist es wichtig zu wissen, dass SAP sowohl OData V2 als auch OData V4 unterstützt. V2 wird häufig für Bestandsprojekte genutzt, während V4 moderne Features wie Batch-Requests, komplexere Filterungen und bessere Performance bietet. CloudDNA hat in Projekten gezeigt, wie OData V4 die Integration mit Cloud- und On-Premise-Systemen erheblich erleichtert.
@OData.publish: true
Draft-Funktionalität
Aktiviert die Entwurfsfunktion für Bearbeitungen. Ein OData-Draft ermöglicht es Benutzern, Änderungen an Daten vorzunehmen, ohne diese sofort zu speichern. Ähnlich wie ein Entwurf in einer E-Mail können Änderungen zwischengespeichert und später weiterbearbeitet werden. In SAP CDS-Views wird dies durch @OData.draft.enabled aktiviert, was automatisch Entwurfstabellen und -logik im Hintergrund erzeugt. Ein Beispiel aus einem CloudDNA-Projekt: Mit der Draft-Funktion konnten Nutzer Flugbuchungen temporär speichern und erst final abschließen, wenn alle Daten geprüft waren. Dies erhöht die Benutzerfreundlichkeit und verhindert Datenverluste bei längeren Eingaben.
@OData.draft.enabled: true
Suchfunktion
Macht die API durchsuchbar. Mit @Search.searchable definierst du, dass die gesamte OData-API durchsuchbar ist. Wenn du jedoch bestimmte Felder standardmäßig in der Suchfunktion haben möchtest, kannst du @Search.defaultSearchElement: true für einzelne Felder setzen. Ein Beispiel: @Search.defaultSearchElement: true bei Flugnummer sorgt dafür, dass Benutzer direkt nach der Flugnummer suchen können, ohne sie explizit auszuwählen. In einem CloudDNA-Projekt haben wir diese Annotation genutzt, um die Buchungssuche zu optimieren und eine bessere User-Experience zu schaffen.
@Search.searchable: true
@Analytics: Reporting-Wunderwaffen – Tiefgehende Erklärung und Beispiele
In diesem Abschnitt erfährst du, wie du mit @Analytics-Annotationen leistungsstarke Reports und analytische Anwendungen direkt aus deinem CDS-View heraus erstellst. Ob Summen, Kennzahlen oder benutzerfreundliche Dimensionen – hier wird gezeigt, wie du SAP-Reporting auf das nächste Level bringst. Neben den Grundlagen erklären wir dir hier auch, wie du analytische Queries effizienter gestaltest, Dimensionen detailliert beschreibst und benutzerfreundliche Dashboards baust. Wir tauchen in fortgeschrittene Features ein, wie z.B. die Verwendung von @Analytics.dataCategory für komplexe CUBEs und @DefaultAggregation für vordefinierte Summen. Ein Beispiel aus einem CloudDNA-Projekt: Mit diesen Annotationen haben wir ein KPI-Dashboard erstellt, das Echtzeit-Daten zu Flugauslastungen anzeigt – inklusive Drilldown-Möglichkeiten, Filterlogiken und benutzerdefinierten Aggregationen. Hier bekommst du alles, was du brauchst, um analytische CDS-Views zu meistern.
@Analytics.query
Aktiviert analytische Abfragen. Damit definierst du einen CDS-View als analytische Query, die in Reporting-Tools genutzt werden kann. Mit dieser Annotation wird dein View im SAP-Analytics-Manager sichtbar und kann in Fiori-Apps oder SAC-Dashboards verwendet werden. Du kannst Kennzahlen, Dimensionen und Filter direkt im CDS-View festlegen. Beispiel: @Analytics.query: true in einem CloudDNA-Projekt ermöglichte ein Dashboard, das Umsatzdaten nach Regionen filterte. Auch erweiterte Optionen wie @AnalyticsDetails.query.resultSet für benutzerdefinierte Ergebnisdarstellungen sind möglich.
@Analytics.query: true
@Analytics.dataCategory
Definiert, ob dein View ein Cube, eine Dimension oder eine Faktentabelle ist. Ein Cube fasst Daten mehrdimensional zusammen. Er stellt Daten in einer mehrdimensionalen Struktur dar, ähnlich einem Würfel, bei dem jede Dimension eine Achse repräsentiert. In SAP-Analytics bedeutet das, dass du Kennzahlen entlang mehrerer Dimensionen wie Zeit, Region und Produkt analysieren kannst. Beispiel: Ein Cube im Flugdatenmodell könnte Buchungen nach Monat, Abflughafen und Fluggesellschaft anzeigen. Mit @Analytics.dataCategory: #CUBE legst du fest, dass dein CDS-View für solche multidimensionalen Analysen geeignet ist. Zusätzlich kannst du mit @Analytics.dataCategory: #DIMENSION Dimensionstabellen wie Flughäfen oder Airlines definieren und mit #FACT reine Faktentabellen für detaillierte Transaktionen anlegen. CloudDNA hat mit diesen Annotationen komplexe Vertriebs- und Finanzberichte aufgebaut, die interaktive Drilldowns und Filter in Echtzeit ermöglichen.
@Analytics.dataCategory: #CUBE
@DefaultAggregation
Legt fest, wie Kennzahlen aggregiert werden. Perfekt für Summenbildung und Durchschnittswerte. Mit @DefaultAggregation kannst du festlegen, wie deine Kennzahlen standardmäßig zusammengefasst werden. Zum Beispiel: @DefaultAggregation: #SUM für Summen, @DefaultAggregation: #AVG für Durchschnittswerte oder #MAX und #MIN für Höchst- und Tiefstwerte. In einem CloudDNA-Projekt haben wir diese Annotation genutzt, um die monatlichen Einnahmen einer Airline automatisch zu summieren und die durchschnittlichen Passagierzahlen pro Flug zu berechnen. Dies spart Zeit und vermeidet redundanten Code in Berichtslogiken. Auch Kombinationen sind möglich: Eine Kennzahl kann standardmäßig summiert, aber optional auch im Bericht gemittelt werden – alles direkt im CDS-View.
@DefaultAggregation: #SUM
@EndUserText.label
Gibt benutzerfreundliche Bezeichnungen für Felder. Mit dieser Annotation kannst du sicherstellen, dass technische Feldnamen wie FLIGHT_ID oder CUST_NO im Frontend als ‚Flugnummer‘ oder ‚Kundennummer‘ angezeigt werden. Ein Beispiel aus einem CloudDNA-Projekt: Wir haben alle Dimensionen in einem Vertriebsreport mit @EndUserText.label versehen, was die Akzeptanz bei den Endnutzern enorm gesteigert hat. Zusätzlich kannst du @EndUserText.quickInfo verwenden, um kurze Erklärungen anzuzeigen, wenn der Benutzer über ein Feld hovert. So wird die Benutzeroberfläche nicht nur verständlicher, sondern auch intuitiver.
@EndUserText.label: 'Fluggesellschaft'
@AnalyticsDetails
Detaillierte Einstellungen, z.B. Anzeigeoptionen. Diese Annotation bietet viele Möglichkeiten: Du kannst festlegen, ob ein Feld als Schlüssel, Text oder beides angezeigt wird, Standardwerte definieren, die im Bericht direkt gesetzt sind, und sogar benutzerdefinierte Filter implementieren. Ein Beispiel aus einem CloudDNA-Projekt: Wir haben mit @AnalyticsDetails.query.display: #KEY_AND_TEXT dafür gesorgt, dass Benutzer in einem Flugreport sowohl den IATA-Code als auch den vollständigen Flughafennamen sehen. Zudem kannst du mit @AnalyticsDetails.variable.defaultValue vordefinierte Filter setzen, z.B. ein Standardjahr, sodass Berichte immer mit einem sinnvollen Anfangswert starten.
@AnalyticsDetails.query.display: #KEY_AND_TEXT
Praxisbeispiel
In einem CloudDNA-Projekt haben wir mit @Analytics-Annotationen ein Dashboard entwickelt, das Flugauslastungen in Echtzeit zeigt, inklusive Filter und Drilldowns. Codebeispiel:
@Analytics.query: true
@Analytics.dataCategory: #CUBE
@DefaultAggregation: #SUM
### 4. Kombinationen für maximale Effizienz
#### Ein weiteres Beispiel für eine Kombination mehrerer Annotationen
@UI.lineItem: [{ position: 1, label: 'Flugnummer', importance: #HIGH }]
@UI.identification: [{ position: 2, label: 'Passagiername' }]
@OData.publish: true
@Analytics.query: true
@AnalyticsDetails.query.display: #KEY_AND_TEXT
In diesem Beispiel wird:
-
Mit @UI.lineItem die Haupttabelle gestaltet.
-
@UI.identification für die Detailseite verwendet.
-
@OData.publish die API automatisch bereitgestellt.
-
@Analytics.query den View für Reports freigegeben.
-
@AnalyticsDetails.query.display die Anzeige im Bericht optimiert.
Erweiterte Beispiele und Praxistipps
Hier findest du viele erweiterte Beispiele, die weit über die Basis hinausgehen. Lass uns tiefer eintauchen:
@UI.identification
Diese Annotation wird genutzt, um die Detailseiten einer Fiori-App zu steuern. Sie ermöglicht die Definition der Reihenfolge, Sichtbarkeit und Beschriftung von Feldern in Detailansichten. Du kannst auch Aktionen wie Bearbeiten oder Löschen hinzufügen. Ein Beispiel aus einem CloudDNA-Projekt: Wir haben für ein Travel-Management-Tool die Buchungsdetails mit @UI.identification: [{ position: 1, label: ‚Buchungs-ID‘ }] direkt im CDS-View definiert und gleichzeitig weitere Felder wie Passagiername und Flugnummer eingebunden. Mit @UI.identification kannst du außerdem Bedingungen setzen, um bestimmte Felder nur bei bestimmten Rollen anzuzeigen. So bleibt die Detailseite übersichtlich und flexibel.
@UI.fieldGroup
Diese Annotation gruppiert Felder logisch und strukturiert deine Formulare in übersichtliche Sektionen. Du kannst mehrere Felder zu einer Gruppe zusammenfassen und sie mit einem Label versehen, was die Benutzerfreundlichkeit deutlich erhöht. Beispiel: @UI.fieldGroup: [{ id: ‚Reisedaten‘, label: ‚Reisedetails‘ }] für eine strukturierte Buchungsmaske. In einem CloudDNA-Projekt haben wir damit Buchungsformulare erstellt, die Felder wie Abflugdatum, Ankunftsdatum und Flugnummer logisch gruppierten. Mit @UI.fieldGroup.position kannst du außerdem die Reihenfolge der Gruppen festlegen. Weitere Optionen wie @UI.fieldGroup.qualifier erlauben es, gleiche Feldgruppen in verschiedenen Kontexten wiederzuverwenden. Diese Annotation sorgt für saubere und verständliche Formulare in deinen Fiori-Apps.
@Consumption.filter
Mit dieser Annotation definierst du benutzerfreundliche Filter. Diese Annotation ist besonders nützlich, um Pflichtfilter oder vordefinierte Filterwerte direkt im CDS-View zu setzen. Du kannst Filter als optional, obligatorisch oder mit Standardwerten versehen. Beispiel: @Consumption.filter: { mandatory: true, label: ‚Abflugdatum‘ } sorgt dafür, dass User im Travel-Tool das Abflugdatum immer angeben müssen. Ein weiteres Beispiel: @Consumption.filter: { defaultValue: ‚2024-01-01‘, label: ‚Startdatum‘ } setzt ein Standarddatum für den Filter. CloudDNA hat mit dieser Annotation in Projekten Filter erstellt, die je nach Benutzerrolle variieren. Auch Mehrfachfilter sind möglich, um Benutzern eine flexible Suche zu bieten. Diese Annotation spart Zeit und verbessert die Benutzererfahrung erheblich.
@ObjectModel.semanticKey
Außerdem ein weiterer Praxistipp: Nutze @ObjectModel.semanticKey für eindeutige Schlüssel in deiner App. Diese Annotation wird verwendet, um Primärschlüssel oder eindeutige Identifikatoren in einem CDS-View zu definieren. Damit sagst du SAP eindeutig, welches Feld oder welche Kombination von Feldern einen Datensatz identifiziert. Ein Beispiel:
@ObjectModel.semanticKey: ['Flugnummer']
Dies legt fest, dass die Flugnummer der eindeutige Schlüssel ist. In einem CloudDNA-Projekt haben wir @ObjectModel.semanticKey genutzt, um in einer Buchungsanwendung sicherzustellen, dass jede Buchung eindeutig durch Buchungs-ID und Passagiernummer identifiziert wird. Ohne diese Annotation kann es bei OData-Services zu Fehlern kommen, wenn kein eindeutiger Schlüssel definiert ist. Daher ist sie besonders wichtig für Datenintegrität und saubere API-Bereitstellung.
Mit diesen zusätzlichen Details und Best Practices bekommst du noch mehr aus deinen CDS-Annotationen heraus.
CloudDNA-Insights aus der Praxis
In einem CloudDNA-Projekt für eine Airline haben wir eine Buchungsübersicht mit @UI, @OData und @Analytics erstellt – und zwar nicht nur mit 60 % schnellerer Entwicklung, sondern auch mit spannenden Herausforderungen: von der Definition benutzerfreundlicher Filter mit @Consumption.filter bis zur Optimierung von OData-Services für mobile Geräte. Die CDS-Annotationen halfen uns, komplexe Buchungsprozesse in eine einfache Fiori-Oberfläche zu verwandeln. Wir haben zudem die @AnalyticsDetails-Annotation genutzt, um Management-Reports direkt aus den Buchungsdaten zu generieren, inklusive Drilldown-Funktionen und Echtzeit-Analysen. So entstand ein ganzheitliches Tool, das den Buchungsprozess revolutionierte, gleichzeitig flexibel erweiterbar blieb und als Blaupause für viele unserer SAP-Kunden dient.
Zusammenfassung
CDS-Annotationen sind dein Schlüssel zu effizienten SAP-Apps. Diese mächtigen Tools sparen dir Entwicklungszeit, sorgen für eine einheitliche Benutzererfahrung und bieten flexible Erweiterungsmöglichkeiten. Wenn du sie meistern willst, ist CloudDNA dein perfekter Partner – mit Erfahrung, Best Practices und spannenden Projekten aus verschiedenen Branchen, die wir gerne mit dir teilen. Wir unterstützen dich dabei, CDS-Annotationen nicht nur zu verstehen, sondern in deinen Projekten perfekt einzusetzen. Außerdem findest du in unseren SAP Press Büchern zu SAP Fiori Elements, SAP Fiori und SAPUI5 detaillierte Anleitungen und Praxisbeispiele, die dich Schritt für Schritt durch die SAP-Entwicklung mit modernsten Tools führen.