From time to time, you may find the need to search for a document stored in the current or alternate database. A document search is often used when you need data from one document to populate fields in another document. This section describes several methods to search for a document in a Notes database.
How It Works
A wide variety of solutions can be used to locate a document in a database. This section illustrates how to use While loops, the GeTDocumentByKey method, and the Search method to retrieve a particular document.
In this first example, the GeTDocumentByKey method is used to search a particular view for a text string. If the text string key is found, a handle to the document is assigned to the Doc object. After they are assigned, objects on the document can be referenced or updated. In order to use this approach, the search key must reside in the first column, which must be sorted in either ascending or descending order.
To implement this solution, create a view where the first column in the view contains the search key. Sort the first column in either ascending or descending order. To locate the document, add the following code in a button, agent, or event. Be sure to replace KEY and VIEW with valid values in the following code example.
Dim s As NotesSession Dim db As NotesDatabase Dim view As NotesView Dim doc As NotesDocument Dim key as String Set s = New NotesSession Set db = s.CurrentDatabase key = "John Doe" Set view = db.GetView("VIEW") Set doc = view.GetDocumentByKey(key, True)
The GetdocumentByKey method includes a match parameter. Set the parameter to trUE to enforce a perfect match or FALSE to allow for a partial string match.
In this second example, the Search method and a static key are used to locate a document in the database. This approach can be a bit tricky because it requires delimiters, such as the vertical bars or double quotes, to separate the various parameters. This approach also requires a search string key, a DateTime value, a form name, and a field name. If multiple documents are returned, use the GetFirstDocument method to retrieve the first document or the Forall statement to loop through each document.
To implement this solution, add the following code in a button, agent, or event. Be sure to replace KEY, FORM, and FIELD with valid values in the following code example.
Dim w As New NotesUIWorkspace Dim s As New NotesSession Dim db As NotesDatabase Dim doc As NotesDocument Dim collection as NotesDocumentCollection Dim key As String Dim searchformula As String Dim searchdate As NotesDateTime Set db = s.CurrentDatabase Set searchdate = New NotesDateTime("") '----------------------------------------------------------------- ' Set the search key and search formula values '----------------------------------------------------------------- key = "VALUE" searchformula = "Form=""FORM"" & FIELD="""+Key+"""" Set collection = db.Search(searchformula, searchdate, 0) Set doc = collection.GetFirstDocument
In this third example, the Search method and a dynamic key are used to locate a document in the database. As with the previous example, you will need to pay particular attention to enclose parameters in the correct number of delimiters (or quotes). Here, the actual search is a dynamic value and references a text string field on the current form.
Dim w As NotesUIWorkspace Dim s As NotesSession Dim db As NotesDatabase Dim uidoc As NotesUIDocument Dim collection As NotesDocumentCollection Dim docA As NotesDocument Dim docB As NotesDocument Dim searchformula As String Dim searchdate As NotesDateTime Set w = New NotesUIWorkspace Set s = New NotesSession Set db = s.CurrentDatabase Set searchdate = New NotesDateTime("") Set uidoc = w.CurrentDocument Set docA = uidoc.Document searchformula = "Form=""FORM"" & FIELD="""+DocA.FIELD(0)+"""" Set collection = db.Search(searchformula, searchdate, 0) Set docB = collection.GetFirstDocument
Finally, this last example illustrates how to loop through all documents in a particular view. If a field on each document matches a target value, then an action is taken. For example, using this approach, you could change all documents where the OWNER field equals a person's name such as John Doe.
Dim w As NotesUIWorkspace Dim s As NotesSession Dim db As NotesDatabase Dim doc As NotesDocument Dim view As NotesView Set w = new NotesUIWorkspace Set s = new NotesSession Set db = s.CurrentDatabase Set view = db.GetView("VIEW") Set doc = view.GetFirstDocument While Not(doc Is Nothing) If doc.FIELD(0) = "VALUE" Then msgbox "Found a match." ' do something here. End If Set doc = view.GetNextDocument(doc) Wend
An Introduction to the Lotus Domino Tool Suite
Getting Started with Designer
Navigating the Domino Designer Workspace
Domino Design Elements
An Introduction to Formula Language
An Introduction to LotusScript
Fundamentals of a Notes Application
Reference Library Applications
Design Enhancements Using LotusScript
Design Enhancements Using Formula Language
Miscellaneous Enhancements and Tips for Domino Databases
Application Deployment and Maintenance
Appendix A. Online Project Files and Sample Applications
Appendix B. IBM® Lotus® Notes® and Domino®Whats Next?