Manage Learn to apply best practices and optimize your operations.

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.

Related information from
Tip: Delete documents over the Web using Ajax and JavaScript

Tutorial: 30 LotusScript tips

LotusScript FAQs

LotusScript Reference Center

In this tip, I explain a "virtual delete" solution I developed in LotusScript that removes orphaned and extraneous Lotus Notes documents from my 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
' 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; 


—Manfred P.

Do you have comments on this tip? Let us know.

This tip was submitted to the 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.

Dig Deeper on Lotus Notes Domino Database Management

  • Favorite iSeries cheat sheets

    Here you'll find a collection of valuable cheat sheets gathered from across the iSeries/ community. These cheat ...