also ich habe sowas mal geschrieben...
Allerdings musst Du einen anderen Ansatz verwenden: Eine dc ist per se nicht sortiert, auch wenn Du die Dokumente in der richtigen Reihenfolge reinschiebst...
Mit folgendem Code in einem Agenten und 3 markierten Dokumenten z.B. in Deiner Mail- DB kannst Du das nachvollziehen:
Dim ses As New NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim dc2 As NotesDocumentCollection
Dim doc2 As NotesDocument
Dim subject1 As String, subject2 As String
Dim i As Integer
Set db = ses.CurrentDatabase
Set dc = db.UnprocessedDocuments
Set dc2 = db.Search( |Form="blablub"| , Nothing , 0 )
Set doc = dc.GetLastDocument
While Not doc Is Nothing
Call dc2.AddDocument( doc )
Set doc = dc.GetPrevDocument( doc )
Wend
For i = 1 To dc.Count
Set doc = dc.GetNthDocument( i )
subject1 = doc.GetItemValue( "Subject" )( 0 )
Set doc2 = dc2.GetNthDocument( i )
subject2 = doc2.GetItemValue( "Subject" )( 0 )
Next
Du wirst sehen: Obwohl doch eigentlich dc2 genau umgekehrt sortiert sein sollte wie dc, sind subject1 und subject2 immer gleich.
Der einzige Ansatz, der funktioniert ist folgender:
For i = 1 to dc.Count
set doc = GetKleinstesDokument( dc , "Subject" )
call dc.RemoveDocument( doc )
End For
und dann natürlich das "ausprogrammieren" der Funktion "GetKleinstesDokument", das ist aber sehr einfach, weil es keine komplizierte Sortier- Funktion erfordert sondern die einzige Möglichkeit das "stupide" durchlaufen aller Dokumente ist:
Set doc = dc.GetFirstDocument
While not doc is nothing
tmp = doc.GetItemValue( feldName )( 0 )
if tmp < minimum then
minimum = tmp
set minDoc = doc
end if
set doc = dc.GetNextDocument( doc )
Wend
Das ist von der Performance her natürlich miserabel..
Es gibt noch eine andere etwas performantere aber wesentlich komplexere Methode die Sortierung von DCs zu realisieren, nämlich über Listen (dann kann man alles in eine Funktion packen, und muss nicht stupide durchzykeln:
dim dcList List as NotesDocument
Dim sortList() as String
Redim sortList( dc.Count - 1 )
x = 0
Set doc = dc.GetFirstDocument( )
While not doc is nothing
tmp = doc.GetItemValue( sortFeld )
dcList( tmp ) = doc
sortList( x ) = tmp
x = x + 1
Wend
' jetzt sortlist sortieren über den performanten @Sort- Befehl:
Dim tmpDoc as NotesDocument
tmpDoc.SortIt = sortList
evalString = |@Sort( sortIt )|
sortedList = Evaluate( evalString , tmpDoc )
Forall sortedVal in sortedList
Set nextDoc = dcList( sortedVal )
'- diese Dokumente sind jetzt sortiert...
Next
Achtung: Diese Funktion muss erweitert werden, wenn die Sortierwerte möglicherweise nicht eindeutig sind...Wenn also einzelne Werte mehrfach vorkommen, dann muss vor dem hinzufügen zur Liste noch geprüft werden "schon vorhanden" (über isElement( ) ) und dann ggf. der Wert ergänzt werden (z.B. durch eine laufende Nummer)
HTH
Tode