Allgemein ·Entwicklung ·Fiori ·Gateway ·OData ·SAPUI5-API ·Usability

$count – oData Models auf die man zählen kann, aber nicht muss

Moin Moin UI5-Entwickler,

eine Frage bekommen meine Kollegen und ich ständig von unseren Kunden gestellt: „Was zeichnet eine gute Fiori eigentlich aus?!“

Die Antwort auf diese zentrale Fragestellung ist verblüffend einfach. Eine gute Fiori zeichnet sich nämlich durch zufriedene Nutzer aus. Und nichts macht einen Nutzer unzufriedener als unnötiges Warten auf Daten. Deshalb sollte ein SAPUI5-Entwickler stehts unter der Prämisse arbeiten, überflüssige oder redundante Backend-Calls zu vermeiden, um so die Wartezeiten für den Anwender so gering wie möglich zu halten.

Vor diesem Hintergrund möchte ich in diesem Beitrag auf eine Standardeinstellung des oData Models ( sap.ui.model.odata.v2.ODataModel ) näher eingehen, die vielen Entwicklern unbekannt ist, da sie meiner Meinung nach nicht gut dokumentiert wurde. Die Rede ist vom sap.ui.model.odata.CountMode.

Standardmäßig sendet das oData Model zu jedem http GET-Call einen weiteren $count-Aufruf, um die Anzahl der vorhandenen Einträge zu ermitteln. Das kann natürlich von Nutzen sein, vorausgesetzt man möchte diese Information dem Benutzer anzeigen oder benötigt sie um weitere clientseitige Berechnungen durchzuführen. Das ist aber sehr häufig nicht der Fall.

GET mit zusätzlichem $count-Aufruf in Standardeinstellung

Um diesen zusätzlichen Datenbankabruf zu unterdrücken muss man den CountMode der Modelinstanz auf sap.ui.model.odata.CountMode.None ändern. Das kann man auf zwei unterschiedliche Arten realisieren:
Entweder man benutzt setDefaultCountMode() in der init() der Component.js,

init: function () {
  ...
  this.getModel().setDefaultCountMode(sap.ui.model.odata.CountMode.None);
}

oder man überschreibt den Standard in der Descriptor-Datei (manifest.json).

"models": {
   "i18n": {
      "type": "sap.ui.model.resource.ResourceModel",
      "settings": {
      "bundleName": "acando.i18n.i18n"
   }
 },
 "": {
      "dataSource": "mainService",
      "settings": {
         "metadataUrlParams": {
         "sap-documentation": "heading"
         },
        "defaultCountMode": "None"
      }
   }
 }

Diese eine unscheinbare Zeile Code erspart dem Nutzer eine ganze Menge Wartezeit und erhöht damit die Gesamtzufriedenheit.

HTTP Timing mit sap.ui.model.odata.CountMode.None
HTTP Timing mit sap.ui.model.odata.CountMode.Request

In diesem Beispiel muss der User ca. 50% kürzer auf die angefragten Daten warten, was ein beträchtlichen Unterschied für das Nutzungserlebnis bedeutet!

Ich hoffe dieser Beitrag hilft euch eure Fiori von unnötigen Backen-Calls zu befreien sodass auch Ihr zufriedene Anwender habt.

Bis dahin erstmal und: „Kiek mol wedder in!“

Schon gesehen? Arbeiten als SAPUI5-Entwickler bei Acando

Schreibe einen Kommentar