The Lotus Domino support site has a bubble sort algorithm posted with no help on how to implement it. And since it takes an array as input, it isn't obvious how to pass in the appropriate value. Here are step-by-step instructions on using the bubble sort script, assuming you have multiple values in one field that you want sorted and placed in a different field.
1. Create a form with two fields on it, INPUT and OUTPUT. Both are editable text (the default). Both allow multiple values (not the default). Values are separated when the user enters a semi-colon (the default).
2. Create a button on the same form called SORT that runs a script.
3. Go to the Declarations event (instead of the Click event) of the Sort button. (This isn't necessary, but it is a good place to paste the code in the step that follows.)
4. Copy the script below beginning with SUB BUB_SORT and ending with the last END SUB and paste that into the Declarations event of the Sort button. This will create a new event for the Sort button (and the code will disappear from the Declarations event).
5. Go back to the Click event of the SORT button, and replace the existing code with the script below that begins with SUB CLICK ending with the first END SUB.
6. Save the form.
7. Using the form in the Notes client, type some values in the INPUT field separated by a semi-colon (such as: b; d; a; c). You don't need to save the document.
8. Click the SORT button. The sorted values should appear in the OUTPUT field.
You could modify the script to put the sorted values back in the INPUT field if desired. Search for "Bubble" on this site to see variation(s) of the bubble sort algorithm.
Sub Click(Source As Button) Dim workspace As New NotesUIWorkspace Dim uidoc As NotesUIDocument Set uidoc = workspace.CurrentDocument Dim doc As NotesDocument Set doc = uidoc.document Dim i As NotesItem Set i = doc.GetFirstItem("input") Dim myarray As Variant myarray = i.values Call bub_sort(myarray) doc.output = myarray End Sub Sub bub_sort (in_array As Variant) ' This code is from the public Lotus site and is assumed to be the intellectual property of IBM Corporation. 'returns a sorted array based on a complexity of O(n^2) using a bubble sort If Not Isarray(in_array) Then Print "bub_sort: not receiving array" Exit Sub End If Dim top, bot, cur, cur2 As Integer top=Ubound (in_array) bot=Lbound (in_array) If top=bot Then Print "bub_sort: only one element" Exit Sub End If Dim tmp_element As Variant For cur=bot To top cur2=cur Do While cur2 > bot 'bubble up If (in_array(cur2) > in_array(cur2-1)) Then Exit Do Else 'swap tmp_element=in_array(cur2) in_array(cur2)=in_array(cur2-1) in_array(cur2-1)=tmp_element End If cur2=cur2-1 Loop Next End Sub
This was first published in September 2001