Allgemein ·Entwicklung ·Fiori ·Performance

$top 100 – Datenbegrenzung des Models ändern

By the framework: Wer schon einmal versucht hat eine größere Datenmenge in einem Control anzuzeigen wird sicher festgestellt haben, dass es dort eine Begrenzung der Datenmenge gibt. Diese liegt standardmäßig bei 100 Einträgen.
Manchmal durchaus sinnvoll (Hallo liebe Performance), manchmal aber auch einfach nur so semi gut. Dann nämlich, wenn mehr Daten geladen werden sollen, aber nicht werden.
Mein Klassiker ist das Laden von Ländern in eine Combo- oder SelectBox. Nach Ländern mit Anfangsbuchstaben L war dann Schluss.

Es gibt natürlich Wege, diese Begrenzung zu umgehen.
Eine standardmäßige ist, wenn das verwendete Control das Growing-Feature unterstützt. Oftmals liegt hier die Obergrenze bei weniger als 100 Einträgen. Durch das Growing-Feature können aber nach und nach alle Einträge geladen werden.
Ein Beispiel ist z.B. das sap.m.List Control, dass standardmäßig bei Master-Detail Anwendungen als Masterlist genutzt wird

Was aber, wenn wir ein Control benutzen, dass dies nicht tut?

Nun, da gibt es meiner Meinung nach zwei ordentliche Möglichkeiten, wobei ich die eine eigentlich immer der anderen vorziehe.
Deshalb sei diese zuerst erwähnt.

Direkt im Binding – Parameter length

Um bei einem Binding die Standardbegrenzung des Models zu umgehen kann direkt im Binding der Parameter length gesetzt werden. length wird als Integer Wert im Binding mitgegeben, analog zu anderen Parametern wie z.B. filter oder sorter.
Ein Binding mit Vergrößerung des $top-Werts kann wie folgt aussehen:

<Select
  items="{
    path: '/Country',
    length: 500
  }" >
  <items>
    <core:ListItem key="{CountryIsoCode}" text="{Text}" />
  </items>
</Select>

Der Vorteil bei dieser Methode ist, dass pro Binding einzeln entschieden werden kann wie hoch der $top-Wert ist. Was das genau bedeutet können wir sehen, wenn wir uns die zweite Möglichkeit angucken.

Global mit .setSizeLimit() am Model

Die Funktion setSizeLimit eines Models verändert den default $top-Wert des Models, was bedeutet, dass jedes Binding des Models die Daten mit diesem neu gesetzten Limit lädt.
Für mich hat sich bewährt, sofern ich diese Einstellung verwendet habe, diese im init-Prozess der Component zu setzen.
Code-Technisch sieht das dann wie folgt aus:

  init: function() {
    ...
      this.getModel().setSizeLimit(500);
    ...
  }

Problematisch kann diese Methode werden, wenn das limit vergrößert wird. Das kann zu fiesen Performanceverlusten führen, je nachdem wie viele Bindings in der Anwendung sind und/oder wie viele Daten dann in die Anwendung geladen werden. Denn, wie schon erwähnt, dieses neue Limit greift bei jedem Binding!

Probiert’s aus, es kann vielleicht ganz nützlich sein.

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

Schon gesehen?
Arbeiten als SAPUI5-Entwickler bei Acando

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

5 + 5 =