ABAP RAP

ReadOnly-Szenarios

(C) Brandeis Consulting📁

Scpope

In diesem Foliensatz geht es ausschließlich um lesenden Datenbankzugriff. D.h. es werden Anwendungen erstellt, die nur zur Anzeige dienen.

Viele der grundlegenden Konzepte und Arbeitsabläufe lernen wir hier schon kennen:

  • Anlegen von CDS Views
  • Erstellen der Service-Definition und des -Bindings
  • Test der Anwendung als lokaler Service
  • Darstellung der Anwendung als
    • Liste
    • Mit Details
    • Mit Unter-Objekten bzw. assoziierten Objekten
  • Suchfelder
  • Wertehilfen
(C) Brandeis Consulting📁

Schritte für eine erste Read-Only Anwendung

  • CDS View anlegen
  • Service Definition anlegen
  • Service Binding anlegen

Nichts sonst. Das ist (noch) nicht schön und aber einfach!

ReadOnly Anwendung

(C) Brandeis Consulting📁

Annotationen (CDS Views)

Übersicht Annotationen

Annotation

Damit ein Service, basierend auf einem CDS View, in Fiori Elements schön dargestellt werden kann, werden Annotationen benötigt. Diese steuern Eigenschaften der Oberfläche und teilweise auch Funktionen.

  • Definition:
    Metadaten, die das Verhalten, die Darstellung und die Funktionen von Anwendungen steuern.
    • Werden direkt in CDS-Views oder in separaten Annotation-Dateien definiert.
    • Erleichtern die UI-Generierung und die Integration mit Frameworks wie SAP Fiori Elements.
  • Hauptbestandteile:
    • UI-Definitionen
      • Felder
      • Tabellen
      • Filter
(C) Brandeis Consulting📁

Allgemeine Angaben (Header Annotations)

@UI: {
  headerInfo: {
    typeName: 'Aufgabe',
    typeNamePlural: 'Aufgaben',
    typeImageUrl: 'sap-icon: //activity-items',
    title: {
        type: #STANDARD , 
        value: 'Summary'
    }
  }
}
...
define root view entity zbc_c_tasks 
  as select from zbc_tasks {
...
(C) Brandeis Consulting📁

Listendarstellung (List Report Annotations)

List Report

List Report

Mit den folgenden Annotationen auf Feldebene können wir die Listendarstellung konfigurieren:

@UI.lineItem:       [ { position: 30, 
                        label: 'Nachname'  } ] }
(C) Brandeis Consulting📁

Annotationen für die Details (Object Page Annotations)

Damit die Details Sicht etwas enthält, müssen wir zwei Annotationen hinzufügen:

UI.FACET - Definition der Bereiche für die Felder


      @UI.facet: [  { id: 'User',
                      purpose:  #STANDARD,
                      type:     #IDENTIFICATION_REFERENCE,
                      label:    'User',
                      position: 10 }  ]

Auf Feldebene - Zuordnung zum Bereich


      @UI.lineItem:      [ { position: 10 } ] 
      @UI.identification:[ { position: 10, 
                             label: 'User ID' } ] 
  key user_id       as UserId,

Object Page

(C) Brandeis Consulting📁

Demo und Übung

Übung 1

(C) Brandeis Consulting📁

Falls die Oberfläche sich nicht anpasst...

Manchmal passiert es, dass sich die Oberfläche nicht anpasst, obwohl sie es eigentlich anhand unserer Annotationen sollte. Das kann viele Ursachen haben. Meist ist es aber irgendein Cache.

Vorgehen

  • Prüfen ob alle Objekte aktiviert sind
  • Prüfen ob die Referenzen zwischen den Objekten korrekt sind
  • Sind alle benötigten Views in der Servicedefinition?
  • Browser mit Strg. + F5 neu laden
  • Transaktionen zum Löschen der Caches
    • /n/IWFND/CACHE_CLEANUP
    • /n/IWBEP/CACHE_CLEANUP
  • Service Binding Unpublishen und wieder Publishen
  • zur Not: ein lokales Binding anlegen in $tmp und das mal testen
(C) Brandeis Consulting📁

Suchfelder

Im List Report können Suchfelder definiert werden. Dazu muss im CDS View für die entsprechenden Felder die Annotation hinzugefügt werden. Weitere Annotationen, wie z.B. das Label sind optional.

Suchfelder

notwendige Annotation

@UI.selectionField: [{ position: 10 }]
(C) Brandeis Consulting📁

Suchfeld für unscharfe Suche (1/3)

Es ist möglich, ein allgemeines Suchfeld für unscharfe Suche (aka. Google Suchfeld) zu implementieren. Nach der Eingabe werden alle entsprechend annotierten Spalten durchsucht. Das ist häufig viel praktischer, da

  • Nur ein Feld benötigt wird
  • Mehrere Felder gleichzeitig durchsucht werden
  • Je Spalte die Suche unterschiedlich präzise sein kann

(C) Brandeis Consulting📁

Suchfeld für unscharfe Suche (2/3)

Vorgehen

Auf View-Ebene wird die folgende Annotation benötigt:
@Search.searchable: true

Darüber hinaus muss für die Suchfelder auf Feld-Ebene festgelegt werden:

      @Search: { defaultSearchElement: true,
                 fuzzinessThreshold: 0.7,
                 ranking: #LOW }

Als Schwellenwert (Threshold) empfiehlt die SAP mit 0.7 zu starten.

Ergebnisrelevanz

Mit der Annotation @Search.ranking: #LOW //#MEDIUM #HIGH kann man die Relevanz der Suchtreffer für die Trefferliste

SAP Dokumentation

(C) Brandeis Consulting📁

Suchfeld für unscharfe Suche (3/3)

Assoziierte Felder

Die unscharfe Suche kann auch Felder aus assoziierten Views mit einbeziehen. Dazu muss zum Einen die Assoziation in der Feldliste entsprechend annotiert werden:

@Search.defaultSearchElement: true

Und zum Anderen müssen in dem assoziierten View die entsprechenden Felder markiert werden.

(C) Brandeis Consulting📁

Wertehilfen

Für jedes Eingabefeld kann eine Wertehilfe definiert werden, also auch für ein Suchfeld. Basis für jede Wertehilfe ist ein CDS-View, der die entsprechenden Daten bereitstellt.

Mit der Feld-Annotation

@Consumption.valueHelpDefinition.entity: { Name : <CDS View>, 
                                           Element: <Feldname> }

wird die Verknüpfung hergestellt.

Der Wertehilfe CDS View kann sich auf jede Tabelle beziehen und kann natürlich auch als CDS Table Function mit SQLScript ausprogrammiert werden.

Eine häufiges Szenario ist die Verwendung der Tabelle DD07T, die Domänenfestwerte enthält. Darauf können wir uns ganz einfach beziehen.

Komplexere Wertehilfen werden mit dem additionalBinding implementiert. Hier können mehrere Felder gebunden werden, so dass die Daten aus der Oberfläche die Wertehilfe einschränken.

(C) Brandeis Consulting📁

Texte zu Schlüsseln

Falls für Schlüssel, wie z.B. beim Feld GENDER, ein passender, vielleicht sogar sprachabhängiger Text angezeigt werden soll, so kann man das mit einer Text-Assoziation erreichen.

Textview

@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Gender Value Help'
define view entity zi_jb1c_gender
  as select from dd07t
{
  key valpos     as value_position,
  
      @Semantics.language: true
  key ddlanguage as language,
      domvalue_l as value,
      
      @Semantics.text: true
      ddtext     as text
}
where
  domname = 'ZBC_GENDER'

Einbindung im RAP


define view entity ZI_JB2_USERS
  as select from zbc_users
  
  association [0..1] to zi_jb1c_gender as _GenderText 
  on $projection.Gender = _GenderText.value
        
{
  key user_id       as UserId,
      ...
      @ObjectModel.text.association: '_GenderText'
      gender        as Gender,
      ...
      _GenderText
}
(C) Brandeis Consulting📁

Mehrzeilige Langtextfelder

@UI.multiLineText: true

TextArea

(C) Brandeis Consulting📁

Allgemeine Feld Annotationen

Die folgenden Annotationen können an unterschiedlichen Stellen eingesetzt werden. Zum Beispiel bei @UI.lineItem ,@UI.fieldGroup, @UI.identification:

  • hidden - Das Feld wird nicht angezeigt und kann auch mit Personalisierung nicht hinzugefügt werden
  • position - Gibt die Reihenfolge der Felder in der Facette/Tabelle an
  • label - Feldlabel
  • qualifier - Bezug auf den targetQualifier der Facette. Damit können unterschiedliche Darstellungen erreicht werden.
(C) Brandeis Consulting📁

Metadata Extension (MDE)

  • Definition:
    Metadata Extensions sind Erweiterungsartefakte im SAP-Ökosystem, die verwendet werden, um bestehende CDS-Views mit zusätzlichen Annotations zu erweitern.
    • Ermöglichen die Trennung von Standard-Anpassungen und benutzerdefinierten Erweiterungen.
    • Unterstützt eine modulare und flexible Entwicklung.
  • Einsatzgebiete:
    • Hinzufügen von UI-, OData- oder Verhaltens-Annotations zu bestehenden CDS-Views.
    • Kundenspezifische Anpassungen ohne Änderung der Basis-CDS-Definition.

Vorraussetzungen

  • Die Annotation @Metadata.layer: #CUSTOMER sollte in der MDE gesetzt sein.
  • Die Annotation @Metadata.allowExtensions: true muss in dem CDS View gesetzt sein
@Metadata.allowExtensions: true
define view entity zi_jb1_users
  as select from zbc_users
(C) Brandeis Consulting📁

UI Features - Listen von Unterobjekten

Voraussetzungen:

  • View Definiert
  • Felder für die Listenansicht konfiguriert
  • View in Service Definition erwähnt
  • Behaviour entsprechend eingestellt
(C) Brandeis Consulting📁