ABAP RAP

Oberflächen und Services

(C) Brandeis Consulting📁

Scpope

In diesem Foliensatz geht es um die Gestaltung der Oberflächen.

  • Was ist möglich mit Fiori Elements? Wo sind die Grenzen?
(C) Brandeis Consulting📁

Layouts und Floorplans

Fiori Elements unterstützt unterschiedliche Floorplans. Alle Details findet Ihr in den Fiori Design Guidelines . Mit Fiori Elements sind die folgenden Floorplans implementierbar:

  • Overview Page
  • List Report
  • Worklist
  • Analytical List Page
  • Object Page

Ohne Fiori Tools können wir mit RAP nur die beiden hervorgehobenen Floorplans verwenden.

Beispiel und Demo für die UI5 Dokumentation

https://sapui5.hana.ondemand.com/sdk/#/topic/214dc25fb47f42c6a0091dfe71e87950

(C) Brandeis Consulting📁

Header Annotations

@UI: {
  headerInfo: {
    typeName: 'Kommentar',
    typeNamePlural: 'Kommentare',
    typeImageUrl: 'sap-icon://comment',
    description.value: 'CommentText',
    title.value: 'TaskKey'
  }
}
...
define root view entity zbc_c_tasks 
  as select from zbc_tasks {
...
(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📁

List Report

(C) Brandeis Consulting📁

List Report Features

  • Suchfelder für einzelne Spalten und unscharfes Suchfeld für mehrere Spalten
  • Spaltenanzeige
  • Header Bereich

List Report Annotations

Die Annotation @UI.lineItem definiert, dass das Feld als Spalte in einer Tabelle angezeigt wird. Meist wird mindestens die position angegeben.

@UI.lineItem: [ { position: 30 ,         
                  label: 'Bearbeiter' ,
                  importance: #HIGH
                  } ]  
Assignee,

@ObjectModel.text.element stellt die Verbindung zwischen dem Bezeichner-Element und seinen beschreibenden sprachunabhängigen Texten her.

@ObjectModel.text.element: [ 'Name' ]
key user_id       as UserId,
(C) Brandeis Consulting📁

Annotationen für die Darstellung in Listen

Unabhängig davon, ob in einem ListReport oder als Unterobjekt.

  • UI.lineItem.position - Position nach der sortiert wird. Dadurch wird das Element angezeigt.
  • UI.lineItem.importance - Wichtigkeit, wird für die Priorität beim Ausblenden benötigt.
  • UI.lineItem.label - Spaltentitle
(C) Brandeis Consulting📁

Annotationen für Suchfelder 1

Filter

Die Filterfelder eines List Report können vom Benutzer über den Button Filter anpassen selber eingestellt werden. Wenn die Annotation @UI.selectionField verwendet wird, können diese voreingestellt werden. Auch hier muss mindestens die position angegeben werden.

@UI.selectionField: [ { position: 10, 
                        label: 'Aufgabenstatus',
                        exclude: true } ]
Status,
(C) Brandeis Consulting📁

Annotationen für Suchfelder 2

Suche

Für eine unscharfe Suche über mehrere Felder kann die @Search Annotation auf View-Ebene verwendet werden.
@Search.searchable: true

Für jedes Feld, das Durchsuchbar sein soll, kommen dazu noch die folgenden Annotationen:

@Search:{ defaultSearchElement: true,
          fuzzinessThreshold: 0.7 }  

Der fuzzinessThreshold (Intervall 0 bis 1) gibt an, wie unscharf gesucht werden soll. Die SAP empfiehlt als Startwert 0.7.

(C) Brandeis Consulting📁

Gestaltung der Object Page

(C) Brandeis Consulting📁

Object Pages - Feldgruppen (Facets)

Gruppen von Feldern mit Überschrift:

(C) Brandeis Consulting📁

Object Pages - Feldgruppen Beispiel

Definition der Gruppe:

@UI.facet: [ { label: 'Task Info', 
               purpose: #STANDARD, 
               type: #FIELDGROUP_REFERENCE,
               targetQualifier: 'TaskInfo' }]

Zuordnung der Felder


@UI.fieldGroup: [ { importance: #HIGH, 
                    position: 10, 
                    qualifier: 'TaskInfo' } ]                    
@UI.lineItem: [{ position: 10 }]
@UI.identification: [{ position: 10 }]
    TaskKey;
(C) Brandeis Consulting📁

Ausklappbare Bereiche - Show More / Show Less

Mit der Annotation

isPartOfPreview: false

in einer Facette kann man einen Bereich beim ersten Laden ausblenden. Mit der Schaltfläche "Show More" und "Show Less" kann der Bereich dann wie gewünscht eingestellt werden

Beispiel

  @UI.facet: [  { label: 'Task Info',
                   purpose: #HEADER,
                   type: #FIELDGROUP_REFERENCE,
                   targetQualifier: 'TaskInfo',
                   isPartOfPreview: false }]

(C) Brandeis Consulting📁

Gruppen auf der Object Page

Definition der Gruppen

  @UI.facet: [ {    id: 'Details',
                    purpose: #STANDARD ,
                    type:     #FIELDGROUP_REFERENCE,
                    label: 'Details',
                    position: 20 ,
                    targetQualifier: 'Details'}  ]

Zuordnung der Felder


  @UI.fieldGroup: [ { qualifier: 'Details' ,
                      position: 20 }]
  Name;
(C) Brandeis Consulting📁

Services

Die bisher genutzten Services sind nur lokal. Das bedeutet, dass der Transport auf Folgesysteme nicht möglich ist. Für produktiv genutzte Anwendungen muss noch ein Service angelegt werden. Dazu verwenden wird die Transaktion /IWFND/MAINT_SERVICE oder den publish Button im Service Binding

(C) Brandeis Consulting📁

Service Definitions

Service Definition

  • Service Definitions legen fest, welche Business Objekte in dem Service veröffentlicht werden sollen. Mit Alias Namen können die technischen Namen nach aussen für den Service schön benannt werden.
@EndUserText.label: 'Task Management'
DEFINE SERVICE zbc_tm {
  EXPOSE zc_users AS Users;
  EXPOSE zc_tasks AS Tasks;
}
(C) Brandeis Consulting📁

Service Bindings

Service Bindings weisen den zuvor definierten Services ein Protokoll zu. olgende Binding-Types können gewählt werden:

  • OData 2.0 (V2) oder 4.0 (V4) - Version V2 oder V4
    • UI - Überträgt die UI-Annotationen
    • Web API - Ohne UI-Annotationen
  • InA - UI - Für Analytische Datenmodelle Bsp. für Live-Datenzugriff.
  • SQL - Web API - Zugriff mit Open SQL.

V2 oder V4

Die SAP empfiehlt die Verwendung von V4. Dieser unterstützt Fiori Elements nur mit Draft vollständig. V2 ist nicht deprecated oder veraltet, es überträgt aber mehr Datenvolumen.

(C) Brandeis Consulting📁

/n/IWFND/MAINT_SERVICE

Service Hinzufügen:

Suchen des Bindings:

(C) Brandeis Consulting📁

/n/IWFND/MAINT_SERVICE

Die Transaktion SEGW ist nicht notwendig.

(C) Brandeis Consulting📁