matthias_beck
I'm new here

DataStream aus dataaccess

Hi,

ich habe ein Plugin erstellt, welches aus einer Datenquelle Objekte liefert. Dabei implementiere ich das DataStream Interface in meinem Plugin, welches dem ContentCreator die Liste an Ergebnissen liefert.

Meine eigentliche Query liefert mehr als 30 Ergebnisse. Über den DataStream wird die "List<D> getNext(int count)" Methode gecallt, allerdings werden hier nicht alle Ergebnisse abgefragt. Nach 25 Einträgen scheint der ContentCreator an dieser Stelle bereits zufrieden zu sein (möglicherweise ist 25 ein default Wert).

Das zusätzliche Problem ist, dass der ContentCreator auch keine weiteren Einträge nachladen tut, sofern ich ans untere Ende der Liste Scrolle.

Daher die Frage: Habe ich die Möglichkeit den "count" in irgend einer Art zu konfigurieren?

Setzte ich folgenden Hack in die Implementierung meiner getNext Methode:

count = count * 2

oder auch

count = count + 1

bekomme ich im ersten Fall alle Treffer direkt. Im zweiten Fall werden auf einmal sogar Einträge nachgeladen sofern ich ans Ende der Liste scrolle.

Mir wäre es lieber ich habe die Möglichkeit den Count zu konfigurieren. Kann mir hier jemand weiterhelfen?

0 Kudos
2 Replies
mbergmann
Crownpeak employee

Hallo Matthias,

die Anzahl der angefragten Ergebnisse ist nicht konfigurierbar und ich meine sogar vom Client (SA/CC) abhängig.

Bist Du sicher, dass Du auch die weitere Methode hasNext() richtig implementiert hast? Die sollte true liefern, solange die jeweiligen Aufrufe von getNext() noch nicht alles "bekommen" haben was Du liefern "könntest", insbesondere soll sie nicht schon false liefern wenn Du "intern" (also im DataStream) zwar schon alle Elemente hast, sie aber noch nicht durch die getNext()-Aufrufe "ausgeliefert" wurden.

Hintergrund ist letztlich, dass dadurch ein LazyLoading ermöglicht wird. Der Client fragt das Plugin nach den ersten X Elementen und schickt dann erst beim Scrollen (also wenn es "nötig" ist) eine Anfrage nach den nächsten Y (es könnte sein, dass X und Y nicht gleich sind).

Allgemeiner Tipp: Darum ist es übrigens auch wichtig, in der DataStream-Implementierung - soweit möglich - nicht alle Objekte schon initial zu holen und bei den einzelnen getNext()-Aufrufen nur "scheibchenweise auszuliefern". Vielmehr sollten die Objekte nur "on demand" (d.h. beim jeweiligen getNext()) geholt werden - ggf. mit ein bisschen Lookahead.

Übrigens: Soweit ich es im Kopf habe, darf ein getNext() sogar weniger Elemente liefern als "angefragt" wurden, auch wenn es weitere gibt.

Viele Grüße

Michael

0 Kudos

Hallo Michael,

das Problem war, dass die getTotal() Berechnung nicht das korrekte Ergebnis geliefert hat. Problem hat sich somit erledigt. Danke 🙂

VG Matthias

0 Kudos