Domino 9 und frühere Versionen > ND6: Entwicklung
Database.UnprocessedDocuments Reihenfolge der Dokumente in der View
Untitled:
Hi zusammen
Wenn ich mit UnprocessedDocuments eine Dokument-Collection aus einer View fresse, sind die Dokumente in der Collection völlig ungeordnet.
Ich habe hier im Forum bereits eine Klasse für das Sortieren von Klassen gefunden.
Nun möchte ich aber dynamisch die Sortierung der View übernehmen, ohne für jede View das Script anpassen zu müssen.
In einer Testdatenbank stimmt die Reihenfolge überein mit der View, in der richtigen Datenbank aber leider nicht. Hat das was mit dem Index zu tun? Oder wisst ihr, wie man das beeinflussen könnte? ???
Danke und Grüsse
Moritz
flaite:
--- Zitat von: Untitled am 28.07.06 - 11:27:08 ---
In einer Testdatenbank stimmt die Reihenfolge überein mit der View, in der richtigen Datenbank aber leider nicht. Hat das was mit dem Index zu tun? Oder wisst ihr, wie man das beeinflussen könnte? ???
--- Ende Zitat ---
Wenn ich in einer Doku irgendwo den Satz finde: Die Collection ist unsortiert, dann nehme ich das auch ernst.
Natürlich ist jede Collection irgendwie sortiert. Solche offiziell unsortierten Collections sind aber nach irgendwelchen internen Dingen sortiert, die von den Entwicklern rein aus Performance-Gesichtspunkten ausgewählt wurden. Die Entwickler von Notes selbst haben auch die Freiheit beim nächsten Release dieses interne Sortierkriterium zu ändern, weil in ihrem Vertrag (Kontrakt) mit den Notes-Anwendungsentwicklern (die Doku) eben unsortiert steht (es ist nix zugesichert).
Wenn es für die Testdatenbank zufällig passt, heisst das gar nichts.
Glombi:
Unsortiert sind die Dokumente nicht. Aber die sind nicht so sortiert, wie die Einträge in der View stehen.
Dafür gibt es die NotesViewEntryCollection.
Ich denke, dass die Dokumente in einer NotesDocumentCollection nach dem Erstelldatum sortiert sind.
Andreas
Untitled:
Ok. Danke für die Antworten!
Dann werde ich mal sehen, was sich machen lässt.
Grüsse
Moritz
Untitled:
Falls es jemanden mal interessiert, wie ichs nun gemacht habe:
Ich bekomme die Collection mittels "UnprocessedDocuments".
Dann hole ich mir noch eine zweite Collection mit allen NotesViewEntries (da UIView.Documents leider auch eine nach Erstelldatum geordnete Collection liefert) per View.AllEntries.
Nun loope ich durch alle Entries durch und vergleiche die UniversalID mit allen UniversalIDs der ersten Collection. In etwa so:
--- Code: ---Set dc = Database.UnprocessedDocuments
Set ViewEntryCollection = View.AllEntries
Set ViewEntry = ViewEntryCollection.GetFirstEntry
'loop all entries and export the entry, if there's a corresponding selected doc
While Not (ViewEntry Is Nothing)
Set doc = dc.GetFirstDocument
'in every entry, loop every selected document
While Not (doc Is Nothing)
If doc.UniversalID = ViewEntry.Document.UniversalID Then
'do sth with the document
'count the exported document
EntryPosY = EntryPosY + 1
If EntryPosY >= dc.Count Then
'if all docs have been exported, leave the loop
Goto allDocs
Else
'don't search the remaining docs
Goto nextDoc
End If
End If
'navigate to the next document
Set doc = dc.GetNextDocument(doc)
Wend
nextDoc:
'navigate to the next view-entry
Set ViewEntry = ViewEntryCollection.GetNextEntry(ViewEntry)
Wend
allDocs:
--- Ende Code ---
So werden am Ende alle selektierten Docs in der richtigen Reihenfolge abgearbeitet.
Das grosse Problem in diesem Code ist die Performance. Wenn ich eine View mit 4'000 Dokumenten habe und nur das Letzte markiere, muss die Schleife trotzdem durch sämtliche Entries durch, bis sie das besagte Dokument findet.
Aber ich habe bis jetzt keine andere Möglichkeit gefunden, die Sortierung in der View mit den markierten Dokumenten zu übernehmen. ::)
Grüsse
Moritz
P.S. Man möge mir bitte die beiden "Gotos" verzeihen. Die werd' ich später mal eliminieren ;D
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln