Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17


Document revision history in a Notes R5 field

Posted on 2008-10-13
Medium Priority
Last Modified: 2013-12-18

I am trying to add a doc revision history at the bottom of a Notes form/doc. I just need date/time and user name of last 3 edits. I _really_ need to keep this as simple as possible. I've tried a few code snippets online but nothing has worked so far. Last code attempt is posted. Thanks in advance for any assistance.
This formula allows you to keep a revision history in a single computed field. Unlike most such revision trackers, it does not rely on the QuerySave event. The formula tests if the current user's name is in the most recent entry in the field. If so, only the date is updated so you don't get multiple entries for the same person if there is no intervening editor. The results display like this:
Joe Smith 10/29/2001 12:40:08 PM
George Bush 10/29/2001 12:40:46 PM
Rob Pinion 10/29/2001 12:50:15 PM
George Bush 10/29/2001 12:50:41 PM
REM "To use this function change the field name below from displayUpdater to your field name";
REM "The field should be Text, computed, allow multiple values, display separate entries with New Line"; 
REM "Assign all current lines in this field to a temporary variable";
REM "Each new line will have the user's name and the current date-time";
newLine:=thisUser+" "+@Text(@Now);
REM "Now compare to see if the current user is the most recent editor";
REM "Get the last entry since it contains the most recent editor";
REM "First get a count of the number of lines --- elements --- already there";
REM "If there's only one line assign it to lastEntry var, otherwise assign the last entry to lastEntry var";
REM "Test whether the last line contains the name of the current user";
REM "Later we want to replace that line rather than adding a new line every time he saves the doc";
REM "Now get all lines but the last line";
REM "If the doc is being saved, then if this is same user return all but the last line followed by the new line";
REM "If this is not the same user, return everything preexisting plus a new line";
REM "If the doc is not being saved just show the contents of the field";

Open in new window

Question by:yim11
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
LVL 63

Expert Comment

ID: 22708261
WHat is not working ?

Have you defined the field displayUpdater as required by this code ?

What is happening ?

Any errors ?

have you tried the debugger ?

I hope this helps !

Author Comment

ID: 22711851
Thanks for the reply - I have defined the field displayUpdater to match my field name, when I say nothing is happening I mean that as literally as possible. Absolutely nothing is displayed - no field, no error, no data or information. I'm pretty sure that's due to the field being set to computed. Never run the debugger without an actual error so not sure how to do that. Sorry I don't have more info, let me know what else is needed.

LVL 63

Expert Comment

ID: 22714545
have you tested this in a clean DB, in a simple form first, with nothing else but 1 other field ?

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.


Author Comment

ID: 22715999
I have now. And was able to get it to work on a clean db and a couple basic fields (needed a text field to actually edit to make sure it was working) - and it does work in the sandbox. I copied the entire field/info over to the form I'm working with and it doesnt work. My first thought is that since this code was based on not having to use the Querysave event and my form DOES use a querysave event that may be whats messing things up, but not sure since I'm no Notes expert. I've attached the querysave code just in case it helps.


Sub Querysave(Source As Notesuidocument, Continue As Variant)
	If Source.Document.Size > 5000000 Then
		If Messagebox( "File is very large (" & Round( Source.Document.Size / 1000000, 0) _
		& "MB). Please reduce if possible before attach. Press CANCEL.   Press OK to attach anyway",  257, "Size check") _
		= 2 Then Continue = False
	End If
End Sub

Open in new window


Accepted Solution

rd153 earned 2000 total points
ID: 22937986
You have a number of options available to you, however since you only want simple information, it would be just as easy to do this using the following collection of fields set out in a table:

txtCreatedBy - @Name (Computed when composed Text Field)

timCreatedDate - @Now (Computed when composed Date Field)

RN - @If(@IsDocBeingSaved;@If(RN="";1;(@Subset(RN;1) +1): @If(@Elements(RN)>4; @Subset(RN;4); RN));@IsNewDoc;"";RN) (Computed Numeric Field which displays revision number)

txtEditor - @If(@IsDocBeingSaved;@If(txtEditor = "";@Name([CN];@UserName);@Name([CN];@UserName) :@If(@Elements(txtEditor) >4 ; @Subset(txtEditor;4); txtEditor)); @IsNewDoc;"";txtEditor) (Computed Text Field which dispays editor name)

txtEditDate - @If(@IsDocBeingSaved; @If(txtEditDate = ""; @Now;@Now : @If(@Elements(txtEditDate) > 4 ; @Subset(txtEditDate; 4);txtEditDate)); @IsNewDoc;"";txtEditDate) (Computed Date Field which dispays modified date)

The attached gif provides some idea of what it would look like.  If you want to do the same thing in script, you can use a subform with something like this:

Field 'History'
Subform Declarations:
Dim session As NotesSession
Dim old List As String

Sub Postopen(Source As Notesuidocument)
      Set session = New NotesSession
      Dim sRichText As String
      old("Subject") = Source.FieldGetText("Subject")
      old("Categories") = Source.FieldGetText("Categories")
      old("ReviewerList") = Source.FieldGetText("ReviewerList")
      old("ReviewType") = Source.FieldGetText("ReviewType")
      old("Body") = Source.FieldGetText("Body")
End Sub

Sub Querysave(Source As Notesuidocument, Continue As Variant)
      On Error Goto E
      On Error Goto 0
      initial = Source.IsNewDoc
      If initial Then m$ = session.CommonUserName & " - " & Cstr(Now()) & " - created document"
      Forall F In old
            v$ = Source.FieldGetText(Listtag(F))
            If Not initial And Not v$ = F Then
                  If m$ = "" Then
                        m$ = session.CommonUserName & " - " & Cstr(Now()) & " - modified "
                        m$ = m$ & ", "
                  End If
                  If F = "" Then F = {""}
                  m$ = m$ &  Listtag(F) & Chr$(10) & " from " & Chr$(10) & F & Chr$(10) & " to " & Chr$(10) & v$
            End If
            F = v$
      End Forall
      If initial Then
            Source.FieldSetText "History", m$
      Elseif Not m$ = "" Then
            Source.FieldAppendText "History", Chr$(10) & m$
      End If
X: Exit Sub
E: Continue = False
      Resume X
End Sub

Author Closing Comment

ID: 31505678

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

For users on the Lotus Notes 8 Standard client, this article provides information on checking the Java Heap size and adjusting it to half of your system RAM in attempt to get the Lotus Notes 8.x Standard client to run faster.  I've had to exercise t…
Sometimes clients can lose connectivity with the Lotus Notes Domino Server, but there's not always an obvious answer as to why it happens.   Read this article to follow one of the first experiences I had with Lotus Notes on a client's machine, my…
This tutorial will teach you the special effect of super speed similar to the fictional character Wally West aka "The Flash" After Shake : All lightning effects with instructions : http://www.mediaf…
Have you created a query with information for a calendar? ... and then, abra-cadabra, the calendar is done?! I am going to show you how to make that happen. Visualize your data!  ... really see it To use the code to create a calendar from a q…
Suggested Courses

715 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question