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!

(C) Brandeis Consulting📁

Annotationen für die Listendarstellung

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

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,
(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

@UI.selectionField: [{ position: 10 }]

hinzugefügt werden. Weitere Annotationen, wie z.B. das Label sind optional.

(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
(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📁