Schon das Fehlverhalten zu beschreiben, ist nicht ganz einfach...
Folgendes Szenario: Der Benutzer wählt in einer Ansicht einige Dokumente aus und klickt auf eine Aktion, die einen Agenten startet. Der Agent soll die gewählten Dokumente in der Reihenfolge bearbeiten, wie sie in der Ansicht dargestellt werden.
Erstes Problem: Wie komme ich an die vom Benutzer ausgewählten Dokumente?
Antwort:
Set coll = uiws.CurrentView.Documents
Folgeproblem: Das ist eine NotesDocumentCollection, die per Definition unsortiert ist. Wie komme ich jetzt an die sortierte Liste der Dokumente?
Antwort:
Set view = currentDB.GetView(uiws.CurrentView.ViewName)
Set entries = view.AllEntries
Call entries.Intersect(coll, True)
Der zweite Parameter bei Intersect gibt an, dass die erzeugte NotesViewEntryCollection die Sortierung beibehalten soll.
Jetzt wäre ich eigentlich fertig. So funktioniert es. Habe ich so auch schon benutzt.
Aber: Als ich es gestern wieder verwendet habe, bekam ich plötzlich die falschen Dokumente, also solche, die der Benutzer gar nicht ausgewählt hatte (die aber schon in der Ansicht vorhanden sind).
Ich habe auf die Einträge über entries.GetFirstEntry/entries.GetNextEntry zugegriffen.
Als erstes habe ich das umgestellt auf entries.GetNthEntry. Problem bestand weiter.
Nach vielen vergeblichen Versuchen und Grübeln kam der Geistesblitz: Es hängt von der Ansicht ab, genauer: von der Anzahl der Einträge in der Ansicht.
Eine längere Versuchsreihe ergab: enthält die Ansicht mehr als ca. 16.350 Dokumente, tritt der Fehler auf.
Betroffen ist Notes 10.0.1FP2 (und V11 Beta 2), aber nicht 9.0.1FP6. Irgendwo dazwischen gab es die entscheidende Änderung.
Bemerkung am Rande:
Wenn der Benutzer z. B. 3 Dokumente ausgewählt hat, lief GetFirstEntry/GetNextEntry über sehr viel mehr Dokumente (die falschen).
Hat die Ansicht 23.028 Einträge, läuft GetFirstEntry/GetNextEntry über 6.677 Einträge.
Hat die Ansicht 16.429 Einträge, läuft GetFirstEntry/GetNextEntry über 81 Einträge.
Hat die Ansicht 16.381 Einträge, läuft GetFirstEntry/GetNextEntry über 33 Einträge.
Hat die Ansicht 16.353 Einträge, läuft GetFirstEntry/GetNextEntry über 5 Einträge.
Mit einer kleinen "Unschärfe" beträgt die Differenz immer 16.348.