Dynamische Fiori Kacheln mit CDS basierten OData Services

Dynamische Fiori Kacheln mit CDS basierten OData Services

Veröffentlicht am 14. November 2025

Bislang war für mich die Erstellung eines CDS basierten OData Service für eine dynamische Fiori Kachel schlicht unmöglich, weil ich ein kleines Details nicht wusste. Der Service benötigt ein Feld namens number, was aber leider ein reserviertes Schlüsselwort ist. Dank eines Blogposts in der SAP Community von Andre Fischer Anfang dieser Woche, ist das aber kein Problem mehr. In diesem Artikel will ich das Vorgehen an einem Beispiel für einen entsprechenden Service aufzeigen.

Was sind dynamische Kacheln

Jede Anwendung in einem Fiori Lauchpad hat eine Kachel zum Starten. Die Texte und Symbole können entweder statisch sein oder dynamisch aus einem OData Service geliefert werden. Typisch sind zum Beispiel Kennzahlen, die groß auf der Kachel angezeigt werden und vielleicht auch noch eine farbliche Hervorhebung haben (rot/grün/gelb).

Das Problem bei Services

Der Service benötigt für die Darstellung der Kennzahl eine Feld mit dem Bezeichner number. Das ist als Feldname in CDS Objekten nicht möglich, weil dann die Syntaxprüfung meldet: "NUMBER" is a reserved word. (choose an other fieldname).

Aber leider benötigen wir exakt diesen Feldnamen. Die SAP Dokumentation ist an dieser Stelle eindeutig. Hier sind alle erlaubten Felder für den Service:

  • icon - ein SAP Icon in dem Format, wie es uns der SAP IconExplorer liefert , z.B. sap-icon://address-book
  • info - Ein Text unter der Kennzahl
  • infoState - Semantische Farbe für die Info. Erlaubt sind hier Negative (rot), Neutral - der Defaultwert, Positive (grün) und Critical
  • number - Die anzuzeigende Kennzahl
  • numberDigits - Anzahl der Nachkomastellen der Kennzahl
  • numberFactor - Faktor, wie die Kennzahl angezeigt werden soll: k, M, % etc.
  • numberState - Semantische Farbe für die Kennzahl. Erlaubt sind Critical (gelb), Error (rot), Good (grün), Neutral - der Defaultwert und None .
  • numberUnit - Mengeneinheit
  • stateArrow - Trendanzeiger - Erlaubt sind None, Up und Down.
  • subtitle - Untertitel der Kachel
  • title - Titel der Kachel

Alle diese Eigenschaften können aus dem Service versorgt werden. Sie übersteuern die statisch festgelegten Werte, wenn sie von dem Service gliefert werden.

Die Erstellung des dynamischen Service

Die Krux bei der Sache ist also der Name des Feldes mit der Kennzahl im Service. Dieser muss number lauten, was im CDS als Feldname nicht erlaut ist. Mit der Annotation

@odata.property.name: 'Number' 

können wir aber einen alternative Feldnamen für eine OData Service festlegen. Damit haben wir dann einen valieden Service, der unsere dynamische Kachel mit Daten versorgt. Hier eine einfaches Beispiel:

@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Dynamic Tile DAta'
/*+[hideWarning] { "IDS" : [ "KEY_CHECK" ] }*/
define view entity zc_dynamic_tile
  as select from tadir
{
  key '1'                              as KeyField,
      'sap-icon://sum'                 as icon,

      concat_with_space(
        'seit ',
        concat(
          concat(
            concat(
              concat(
                right(
                  dats_add_days(
                    $session.system_date,
                    -7,
                    'NULL'
                  ),
                  2
                ),
                '.'
              ),
              substring(
                dats_add_days(
                  $session.system_date,
                  -7,
                  'NULL'
                ),
                3,
                2
              )
            ),
            '.'
          ),
          left(
            dats_add_days(
              $session.system_date,
              -7,
              'NULL'
            ),
            4
          )
        ),
        1
      )                                as info,

      case
        when count(*) > 20 then 'Good'
        when count(*) < 3  then 'Error'
        else 'Neutral'
      end                               as infoState,

      @OData.property.name: 'number'
      count(*)                          as numberValue,

      0                                 as numberDigits,
      ''                                as numberFactor,

      case
        when count(*) > 20 then 'Good'
        when count(*) < 3  then 'Error'
        else 'Neutral'
      end                               as numberState,

      'ST'                              as numberUnit,
      'Up'                              as stateArrow,

      concat_with_space(
        'von',
        $session.user,
        1
      )                                 as subtitle,

      'Anzahl neue Objekte'             as title
}
where
      author     = $session.user
  and created_on > dats_add_days(
                     $session.system_date,
                     -7,
                     'NULL'
                   );

Konfiguration der dynamischen Kachel mit dem CDS basierten OData Service

Auf Basis des CDS -Views habe ich eine Service Definition und ein Service Binding angelegt:

@EndUserText.label: 'Dynamic Tile '
define service Zdynamic_Tile_Service {
  expose zc_dynamic_tile as config;
}

Nach der lokalen veröffentlichung habe ich die folgende, relative URL: /sap/opu/odata/sap/ZDYNAMIC
Der Service muss nur einen Datensatz liefern. Dieser soll nicht als EntitySet sondern als einzelner Datensatz geliefert werden. Dafür wurde der künstliche Schlüssel

  key '1'                              as KeyField,

in den View aufgenommen. Mit der URL /sap/opu/odata/sap/ZDYNAMIC('1') bekommen wir genau diesen einen Datensatz. Diese relative URL wird in der Konfiguration der dynamischen Kachel eingetragen:

Da unser Service alle Felder versorgt, müssen die Felder Titel, Untertitel etc. nicht ausgefüllt werden.

Das Ergebnis: Eine dynamische Fiori Launchpad Kachel

Diese Kachel zeigt die Anzahl der Entwicklungsobjekte eines Benutzers an, die er in den letzten 7 Tagen im Objektkatalog (TADIR) angelegt hat. Falls es mehr als 20 Stück sind, wird die Farbe grün angezeigt.


Nützliche Links

Weitere Artikel

S/4 FIT

Fit für moderne SAP Entwicklung

Erfahre mehr darüber...