Whenever a change is made to a Lotus Notes document in the back-end, the same change is reflected in the front-end document -- except the rich-text fields. For rich-text field changes, you have to close the front-end Lotus Notes document and open it again
using the NotesUIWorkspace.EditDocument method. However, this ends up also firing all associated Lotus Notes form events. This tip overcomes this problem by allowing you to dynamically update the front-end rich-text fields without closing and re-opening the main Lotus Notes form.
For the sake of simplicity, I am appending the current Lotus Notes username, system time and attachments (as selected by the Lotus Notes user) to the rich-text field. The LotusScript code below also allows you to append rich-text item from another Lotus Notes document (commented in the code). You can modify it for your needs.
Here is an outline of how the LotusScript code works:
- Create a dummy Lotus Notes document in the back end using the db.CreateDocument method.
- Add a rich-text field to it.
- Perform all the necessary actions on this rich-text field.
- Open the Lotus Notes document in the front-end with a dummy form with just one rich-text field (with the same name as created in the second step above).
- Place the cursor in this rich-text field, select all the text, and copy everything to the clipboard.
- Close the dummy Lotus Notes form.
- Go to the destination rich-text field on the main Lotus Notes form.
- Paste everything from the clipboard.
- Mission accomplished.
Here are the steps you'll need to attain the desired result:
- Create a new form. Name it "Dummy Form."
- Place a rich-text field, named "DummyRT" on it.
- Open your main Lotus Notes form where you'd like these updates to happen.
- Create a new Action button, and name it "Update RT Field." You may use the LotusScript code anywhere. For the sake of simplicity I am using it in a button.
- Select LotusScript as the coding language and paste the code given below into it.
Sub Click(Source As Button)
Dim workspace As New NotesUIWorkspace
Dim session As New NotesSession
'COMMENT #######> UiDoc represents the
currently open Fron End document, where the rich
text field exists.
Dim uidoc As NotesUIDocument
'COMMENT #######> Dummy UIDoc ---
needed by the code
Dim DummyUIDoc As NotesUIDocument
Dim db As NotesDatabase
'COMMENT #######> Back End version of
DummyUIDoc
Dim DummyDoc As NotesDocument
'COMMENT #######> RT Item in DummyDoc
---From where you would be pulling the changes
Dim DummyRT As NotesRichTextItem
Dim FilePath As Variant
Set db = session.CurrentDatabase
Set uidoc = workspace.CurrentDocument
Set DummyDoc = db.CreateDocument
'COMMENT #######> Set Fields for Dummy
Document
DummyDoc.Form = "Dummy Form" ' NOTE: It
shud be dummy form, not your main form.
DummyDoc.SaveOptions = "0"
'COMMENT #######> Get the File path for
the file to be attached
FilePath = workspace.OpenFileDialog(True,
"Select Files")
'COMMENT #######> Insert RT Field
Set DummyRT = New NotesRichTextItem
(DummyDoc,"DummyRT")
'COMMENT #######> Update the Field- as
per your requirements
Call DummyRT.AppendText(session.
CommonUserName & " - ")
Call DummyRT.AppendText(Cstr(Now))
Call DummyRT.AddNewline(1)
'COMMENT #######>Embed Selected Files,
if Any
If Not Isempty(FilePath) Then
Forall CurrentFilepath In FilePath
Call DummyRT.EmbedObject(1454,"",
CurrentFilePath)
End Forall
End If
'COMMENT #######>You may also append
an RT Item from any other document. eg.
%REM
Dim RTItemB As NotesRichTextItem
Set RTItemB = DocB.GetFirstItem("RTItemName")
Call DummyRT.AppendRTItem(RTItemB)
%END REM
'COMMENT #######> Call this to commit all
the RT Item Changes to the Document
Call DummyRT.Update
'Here is the Trick
'******************************************************
**************************************
Set DummyUIDoc = workspace.EditDocument(
True,DummyDoc)
Call DummyUIDoc.GotoField("DummyRT")
Call DummyUIDoc.SelectAll
Call DummyUIDoc.Copy
Call DummyUIDoc.Close(True)
'COMMENT #######> Goto Main doc Rich Text
Field (desitnation field)
Call uidoc.GotoField("RTF")
Call uidoc.Paste
'*****************************************************
***************************************
Messagebox "Process Completed Successfully.",
64, "Complete"
End Sub
Now -- with a click of this action button -- you can update the front end of your rich-text item in real-time without having to close and re-open the main Lotus Notes document. You can also apply the same logic to move contents of one rich-text item to the other rich-text item on the same form in real time -- without having to re-open the front end document. If you'd like to do that, this code will help you:
Call UIDoc.GotoField("FirstRT")
Call UIDoc.SelectAll
Call UIDoc.Copy
Call uidoc.GotoField("SecondRT")
Call uidoc.Paste
MEMBER FEEDBACK TO THIS TIP
This is an excellent tip that has benefited one of our applications, while simultaneously removing undue bottlenecks and hurdles. Auditing dynamic tables over to rich-text fields helps prevent users from saving Lotus Notes documents unnecessarily.
Prasanna P.
Do you have comments on this tip? Let us know.
This tip was submitted to the SearchDomino.com tip library by member Amith Narera. Please let others know how useful it is via the rating scale below. Do you have a useful Lotus Notes, Domino, Workplace or WebSphere tip or code snippet to share? Submit it to our monthly tip contest and you could win a prize.