Remove orphaned Lotus Notes documents on Domino databases with a 'virtual delete'
Learn about a 'virtual delete' LotusScript solution that will remove orphaned and extraneous Lotus Notes documents on your Domino databases.
![]() |
||||
|
![]() |
|||
![]() |
I am currently developing and maintaining multiple Lotus Notes Domino databases. I created this workaround to help me delete Lotus Notes documents in those databases that were created by mistake, bounced back to the creator, etc.
![]() |
||||
|
![]() |
|||
![]() |
I originally wanted to assign delete privileges to address this issue, but that can only be done through the access control list (ACL) at the Lotus Notes database level -- and I don't think that is a good idea.
To implement my "virtual delete" solution, I created three hidden fields on all Lotus Notes documents during the development. They are as follows:
- IsDeleted (default value = NO)
- DeletedBy (default value = NULL)
- DeletedDate (default value = NULL)
Although the first field is all you really need, I like to know who deleted the Lotus Notes document and when they did it.
Additionally, I created a user action button that populates the above fields using LotusScript. The IsDeleted field is set to "YES" and the others are self-explanatory. All of the user view selection formulas contain IsDeleted = NO. One hidden admin view is used to list all of the deleted Notes documents.
If a Lotus Notes user accidentally deletes a document, I can then use my action button to clear all three fields and restore the Lotus Notes document back to its original state.
Sub Click(Source As Button) Dim session As New NotesSession Dim db As NotesDatabase Set db = session.CurrentDatabase Dim ws As New NotesUIWorkspace Dim uidoc As NotesUIDocument Set uidoc = ws.CurrentDocument ' Make sure document is in edit mode. If Not uidoc.EditMode Then uidoc.EditMode = True End If ' Get the actual username of the person processing this action button. Dim nam As NotesName Dim strCurrentUser As String Set nam = session.CreateName (session.UserName) ' convert to the common name format strCurrentUser = nam.Common Dim dateTime As New NotesDateTime( "" ) Call dateTime.SetNow Dim strDateAndTime As String strDateAndTime = Cstr(dateTime.LocalTime) ' Set the Deletion fields. Call uidoc.FieldSetText( "IsDeleted", "YES" ) Call uidoc.FieldSetText( "DeletedBy", strCurrentUser ) Call uidoc.FieldSetText( "DeletedDate", strDateAndTime ) Call uidoc.Save Call uidoc.Close End Sub
Here is some Formula language code to the rescue:
REM {make sure document is in EDIT mode}; @Command([EditDocument]; "1"); FIELD IsDeleted := "Yes"; FIELD DeletedBy := @Username; REM {maintain a DATETIME value (not a string) for date-related matters}; FIELD DeletedDate := @Now; @Command([FileSave]); @Command([FileCloseWindow])
—Manfred P.
Do you have comments on this tip? Let us know.
This tip was submitted to the SearchDomino.com tip library by member Michael List. 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.