Posts Tagged: ‘DataContext’

XSnippet: ViewEntries ohne repeat-control in XPage durchloopen

20. Dezember 2011 Posted by airwolf89

Hallo,

ich hatte heute ein kleines Problem. Die Lösung habe ich als XSnippet veröffentlicht und werde ich hier etwas genauer erklären:

Problem war das folgende:

Ich hatte ein kleines Modul, welches die Bilder von diversen Mitgliedern einer Community anzeigen sollte. Das ganze sollte auch immer zufällig passieren, also dass ich an jeder Position immer andere Mitglieder sehen würde. Leider war es aufgrund der Struktur und des Aufbaus des Moduls nicht möglich ein repeat-control zu verwenden. Daher folgender Lösungsansatz:

Speichere einen Iterator im Hintergrund und greife an jeder benötigten Stelle mit iterator.next() darauf zu.

Ich habe das mal ausprobiert, und siehe da, es funktioniert und ist performanter als gedacht.

Im DataContext der XPage (so etwas wie eine lokale Variable einer XPage, auf welche ich einfach per SSJS zugreifen kann) compute ich meinen Iterator, so zum Beispiel:

var tempTreeMap:java.util.TreeMap = new java.util.TreeMap();
var tempColl:NotesViewEntryCollection = allActiveUsers.getAllEntries();
var tempEntry:NotesViewEntry = tempColl.getFirstEntry();
var tempCollection:java.util.Collection = null;

while (tempEntry != null) {
tempTreeMap.put(@Unique(), tempEntry.getDocument());
tempEntry = tempColl.getNextEntry(tempEntry);
}

tempCollection = tempTreeMap.values();
return tempCollection.iterator();

Somit liegt schonmal ein Iterator im Hintergrund. Nun kann ich in jedem verwendeten image-control mit iterator.next() darauf zugreifen und mir das Dokument holen, welches in der dazugehörigen TreeMap liegt um mir die URL des Bildes zu berechnen.

Natürlich muss abgefangen werden ob es noch ein nächtes Element im Iterator gibt auf welches ich zugreifen möchte, um diese kleinen hässlichen Null-Pointer Exceptions zu vermeiden.

Hier das Snippet:
XSnippets