This tip shows you how to create a function that returns the top-level document in a response thread. If you design an application that allows users to create response documents, you may need a script that retrieves a value located in the top-level document. For example, a "Response to response" document may need a value from a "Main Topic" document.
The following function does this:
'This is a recursive function. It returns the main document at the top
of a thread.
Function GetParentDocument( doc As NotesDocument ) As NotesDocument
If Not( doc.IsResponse ) Then
Set GetParentDocument = doc
Exit Function
End If
Dim note As NotesDocument
Set note = doc.ParentDatabase.GetDocumentByUNID( doc.ParentDocumentUNID )
If note.IsResponse Then
Set GetParentDocument = GetParentDocument( note )
Else
Set GetParentDocument = note
End If
End Function |
The following example shows you one way to use this function. In this example, you have a database containing project documents and several "Response to response" documents. When a user closes a response document, the application should notify the sales manager. Define the manager's name on the Project document. Place the following code in the Queryclose event in a Form type Response.
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
'// Send a bookmark to the sales manager for this project.
'// This is located on the Project document (main topic, or top most
document in this discussion thread).
Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
Dim doc As NotesDocument
Set doc = Source.Document
' Find the main topic document.
Dim MainTopic As NotesDocument
Get MainTopic = GetParentDocument( doc ) 'here we are calling our
"GetParentDocument" function
If MainTopic Is Nothing Then Exit Sub 'if the document can't be found, we
have nothing to do
' Create the bookmark document
Set bookmark = New NotesDocument( db ) 'create a new document to be
mailed to the sales manager
'add a doclink to the bookmark
Set rtitem = New NotesRichTextItem( bookmark, "Body" )
'create a new rich text Body field on the document
Call rtitem.AppendDocLink( doc, InheritedDbTitle )
'place a doclink in the Body field
'add content to the bookmark
bookmark.Form = "Bookmark"
bookmark.Subject = doc.Subject(0)
bookmark.InheritedDBTitle = db.Title
bookmark.InheritedSubject = doc.Subject(0)
bookmark.FlowStatus = "Please review the following document"
bookmark.~_ViewIcon = 11 'view icons appear in the Inbox, 1-175
bookmark.CopyTo = ""
bookmark.BlindCopyTo = session.Username 'blind carbon copy the current user
'address the document to the sales manager
bookmark.SendTo = MainTopic.SalesManager(0) 'place the SalesManager
(located on the MainTopic) in the SendTo field
'send the bookmark
If Not( bookmark.SendTo(0) = "" ) Then
Call bookmark.Send( False )
End If
End Sub |
Brian Green is a software engineer for Automated Logic Corporation. ALC is a manufacturer of hardware and software used for Building Automation Systems. Their products are used for monitoring and controlling various building functions such as heating, air conditioning, lighting, and so on. Brian has been using Notes since 1996. He is currently working on internal thin client applications using Domino and Java.



