This example shows entries in ascending order, but the array sort within the function can be extended.
Note: The comment within the code explains what happens as the code goes into effect.
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
Thanks for the code.
ReplyDeleteQuick tip for those who want to sort collections from a database which is different to the one the code is running in
replace: Set db = session.CurrentDatabase
with: Set db = dc.Parent
Hi,
ReplyDeleteThanks for the code ,
%REM
in the declaration set-up the following custom class Type SortingArray
sortkey As Variant
unid As String
End Type
%END REM
Can you explain how to declare this,I am unable to do it.Please help me on this
Thanks
In the declaration type:
DeleteType SortingArray
sortkey As Variant
unid As String
End Type
Pinched from http://searchdomino.techtarget.com/tip/LotusScript-sorts-a-Lotus-Notes-document-collection eh ?
ReplyDeleteAlternative / Original? http://blog.tjitjing.com/index.php/2006/05/how-to-sort-notesdocumentcollection-in.html
ReplyDeleteGreat and that i have a nifty provide: How To Reno A House house renovation budget template
ReplyDelete