Script to Record Lock a Document

Mindwatering Incorporated

Author: Tripp W Black

Created: 07/05/2000 at 11:20 AM

 

Category:
Notes Developer Tips
Forms/Subforms, LotusScript

Obsolete - Domino has document locking as a built-in feature. Use new new development.

---------------------------------------------------------------
COOL DOMINO PROGRAMMING TIP
---------------------------------------------------------------
Title: Record Locking Made Simple
Author: Yvonne Ewing, Independent

This is a method I came up with to "lock" a record by
a user when editing. Other information I found either
had me using several complicated scripts that weren't
working for us (due to restricted agents) or called for
a save on the close event. The save on the close event
forces changes to be saved even if the user didn't want
them saved.

The code causes a message to be produced if other users
try to edit the document while someone is already doing
so. It indicates who has the document locked which
should help track down the user if there are questions
about leaving a document open unintentionally.

I created a hidden view called (DocLock) with the alias
of DocLock to use for the lookup (getdocumentbykey
method).

I then created a form also called DocLock with the fields:
DocLock (to store the unid of the document to be locked)
and CreatedBy (to hold the name of the author).

I then placed this code in the QueryModeChange event
and the QueryModeClose event.


Code for the QueryModeChange Event
----------------------------------------

Dim sess As New NotesSession
Dim db As NotesDatabase
Dim ws As NotesUIWorkspace
Dim newdoc As NotesUIDocument
Dim doc As NotesDocument
Dim destnote As NotesDocument
Dim destview As NotesView

Set db = sess.CurrentDatabase
Set ws = New NotesUIWorkspace
Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
unid$ = doc.UniversalID
Set destview = db.GetView("DocLock")
Set destnote = destview.GetDocumentByKey(unid$,
True)

If destnote Is Nothing Then 'Document is
not being edited by another user.
Set lockdoc = New NotesDocument( db )

lockdoc.Form = "DocLock"
lockdoc.DocLock = unid$
lockdoc.CreatedBy = sess.CommonUserName
lockdoc.Save True, False

Else 'The document is already being edited by
another user.
lockedBy = destnote.GetItemValue("CreatedBy")
Messagebox "Document cannot be edited."_
& Chr$ (10) & Chr$ (10) & "This document is
currently being edited by: " + lockedBy(0) _
& Chr$ (10) & Chr$ (10) & "You may only
view the document." _
& Chr$ (10) & Chr$ (10) & "Please try to
edit the document again later.", _
MB_OK+MBIconExclamation, "Cannot Edit"

Continue = False
Exit Sub
End If


Code for the QueryClose Event
-----------------------------------------

Dim sess As New NotesSession
Dim ws As NotesUIWorkSpace
Dim db As NotesDatabase
Dim uidoc As NotesUIDocument

Dim doc As NotesDocument
Dim destnote As NotesDocument
Dim destview As NotesView

Set ws = New NotesUIWorkSpace
Set uidoc = ws.currentdocument
Continue = True

Set db = sess.CurrentDatabase
Set doc = uidoc.Document
unid$ = doc.UniversalID
Set destview = db.GetView("DocLock")
Set destnote = destview.GetDocumentByKey(unid$,
True)

If destnote Is Nothing Then 'Document is not
locked. Users shouldn't be able to get here.
Exit Sub
Else'Document is locked, need to unlock.
destnote.Remove (True)
End If

previous page