100 Einträge im Model – Datenbegrenzung durch $top ändern

Wer schon einmal versucht hat eine größere Datenmenge in einem Control anzuzeigen wird sicher festgestellt haben, dass es dort eine Begrenzung der Datenmenge auf 100 Einträge gibt. Diese ist die Default Begrenzung eines jeden Models.
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!”

Du interessierst dich für Fiori und hast Lust coole Projekte mit uns zu machen? Wir suchen dich! Schau doch mal in unserer Stellenbeschreibung vorbei.

Über den Autor

Sebastian Kielhorn

Kommentar verfassen