Function SortDocumentCollection(dc As NotesDocumentCollection, strKeyFieldName As String) As NotesDocumentCollection
%REM
dc a populated document collection that you what to sort
strKeyFieldName the field in the document that will be used as a key in the sort
%END REM
Dim session As New NotesSession
Dim db As NotesDatabase
Dim sdc As NotesDocumentCollection
Dim doc As NotesDocument
Dim itemSorKey As NotesItem
Dim a As Integer, b As Integer, c As Integer, moved As Integer
Dim varSorKey As Variant
Dim tmparray As SortingArray
%REM
in the declaration set-up the following custom class Type SortingArray
sortkey As Variant
unid As String
End Type
%END REM
Set db = session.CurrentDatabase
%REM
by creating a profile document collection for a form that dose not exist in the database create a document collection with no document in, this is used later to hold the sorted results.
%END REM
Set sdc = db.GetProfileDocCollection("$$Blank-DocumentCollection")
a% = 0
REM loop through document collection.
Set doc = dc.GetFirstDocument
Do While Not(doc Is Nothing)
Set itemSorKey = doc.GetFirstItem(strKeyFieldName)
REM check the sork key field item existes.
If itemSorKey Is Nothing Then
REM if not set the sort key to blank.
varSorKey = ""
Else
REM else set the sort key to the fiest value in the sort key item.
varSorKey = itemSorKey.values(0)
End If
REM populate custom class.
Redim Preserve array(a%) As SortingArray
array(a%).sortkey = varSorKey
array(a%).unid = doc.UniversalID
REM get the next document.
Set doc = dc.GetNextDocument(doc)
a% = a% + 1
Loop
REM sort sort the array.
b% = 0
moved% = True
Do Until Not moved%
moved% = False
REM assending sort.
For b% = 0 To Ubound(array) - 1
If array(b%).sortkey > array(b% + 1).sortkey Then
tmparray = array(b%)
array(b%) = array(b% + 1)
array(b% + 1) = tmparray
moved% = True
End If
Next
Loop
REM populate the blank document collection (sdc) in sorted order.
For c% = 0 To Ubound(array)
Set doc = db.GetDocumentByUNID(array(c%).unid)
Call sdc.AddDocument(doc)
Next
REM return the sorted document collection.
Set SortDocumentCollection = sdc
End Function