ich habe mal 2 Jahre lang eine Sperre in Betrieb gehabt, die in einer separaten Datenbank einen Sperreintrag anlegt, wo die Unique-ID des gesperrten Dokumentes drinsteht. Bei jeder Änderung Lesen - Bearbeiten - Lesen wird hier das Dokument erzeugt oder gelöscht. Dies funktionierte recht gut, das ganze dauerte nur Millisekunden. Zusätzlich habe ich vermerkt, welcher Benutzer das Dokument wann gesperrt hat.
Einziges Problem: Ab und zu blieben Dokumente im Gesperrt-Modus, wenn z.B. ein Client abgestürzt ist während des Editierens. Daher habe ich abends alle Sperrdokumente automatisch gelöscht.
Code zur Abfrage der Sperre:
Function IsDocLockedUI(doc As Notesdocument) As Integer
Dim session As NotesSession
Dim dbLock As NotesDatabase
Dim viewLock As NotesView
Dim docLock As NotesDocument
Dim strUNID As String
Dim strUser As String
Dim strCallnr As String
Dim db As NotesDatabase
Dim view As NotesView
Dim IsLocked As Integer
On Error Goto ProcessError
Set session = New NotesSession
Dim prodoc As NotesDocument
Set db = session.CurrentDatabase
Set prodoc=db.GetProfileDocument("SETUP")
Set dbLock = New NotesDatabase(prodoc.LockServer(0), prodoc.LockDB(0))
Set viewLock = dbLock.GetView("refLock")
strUNID = doc.UniversalID
Set docLock = viewLock.GetDocumentByKey( strUNID, True)
If docLock Is Nothing Then
IsDocLockedUI = False
Else
IsDocLockedUI = True
End If
Exit Function
ProcessError:
Call LogEntry(Err, "Error (" & Cstr(Err) & " ) -> " & Error$(Err) & " in Zeile " & Erl & " Lib: HelpDesk - IsDocLockedUI")
Exit Function
End Function