Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: CrazyCoder am 21.02.03 - 12:50:51
-
Schönen Mittag! :)
Also ich habe jetzt schon mehr fach das Problem gehabt das in meiner datenbank mit der gerade ca 30 User arbeiten 2 gleichzeitig in ein Doc gegangen sind und dann verschiedene Versionen des Doc's abgespeichert haben, was dann natürlich zu Replikationsfehlern führt!! >:(
Nunja, meine Lösung für das Problem ist eigentlich einfach.
Ich müßte kontrollieren ob das Doc gerade von einem anderen User in Bearbeitung ist und dann ne Fehlermeldung bringen!
Hat da jemand Ahnung von?? Ich denke mal das, das vielleicht noch mehr Leute als ich brauchen könnten! :D
Also, ich bitte dringend um Hilfe!!!
cya
CrazyCoder
-
Hi,
Das hab ich mal im Web gefunden. Getestet hab ich es allerdings noch nicht.
Locking documents to prevent save conflicts
This piece of code assigns edit lock to the first user who opens the document. When other users try to open the same document, they get a message saying "Document is locked by X" and a read-only copy is opened for them. They will not be able to edit the document until the lock is released by the first user.
A manually run agent to unlock the document can be provided for Domino Admin in case of system crash.
Form should have a hidden field called "Lock" of type Text (Editable)
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
If (Source.IsNewDoc) Then
Exit Sub
End If 'New Doc, Lock not reqd
Dim varLock As Variant
Dim session As New NotesSession
Dim nnUserName As New NotesName(session.UserName)
Set docBackend=Source.document
varLock=docBackend.GetItemValue("Lock")
If (varLock(0) <> "") Then
Msgbox ("Document is currently locked by "+varLock(0)+". A read-only copy will be opened for your use.")
Exit Sub
End If
docBackend.Lock=nnUserName.Common
Call docBackend.Save(True,True)
End Sub
'When user trys to edit, check if he/she has the lock
Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
If Source.FieldGetText("Lock")<>"" Then
Dim session As New NotesSession
Dim nnUserName As New NotesName(session.UserName)
If (Strcomp(nnUserName.Common,Source.FieldGetText("Lock"),5)=0) Then
continue=True
Else
Msgbox("Sorry, you are in read-only mode ! This operation cannot be performed. This document is currently used by "+Source.FieldGetText("Lock"))
continue=False
End If
End If
End Sub
'Release the lock when the user with the lock closes the document
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
If strNewDoc="New" Then '(exit if it's a new doc.Set this variable to New in postopen if it's a new doc)
Exit Sub
End If
Dim session As New NotesSession
Dim nnUserName As New NotesName(session.UserName)
If (Strcomp(nnUserName.Common,Source.FieldGetText("Lock"),5)=0) Then
Set docBackend=Source.document
docBackend.Lock=""
Call docBackend.Save(True, True)
End If
End Sub
Agent to Unlock selected documents -
Manually run agent - Simple Action
Modify field 'Lock': Set to ''
Axel
-
In den Formularoptionen das Merging aktivieren, falls die Logik das zuläßt.
Record-Locking macht in replizierenden Umgebungen keinen rechten Sinn, finde ich.
-
Hi Leute!
Ich weiß dieser Post war schon fast wieder vergessen, aber ich hatte leider wichtigere Probleme!!
Nunja, den SourceCode der dort über mir ist (Beitrag von Axel) ist nicht so ganz funktionell! Ich versuche mich da gerade durch zu arbeiten, aber ich habe keine Ahung von LotusScript! Meine Programmierkenntnisse reichen gerade soweit, das ich den Code lesen und verstehen kann aber für umschreiben leider nicht mehr!
Kann mir da vielleicht mal einer etwas unter die Arme greifen?!?
Es würde reichen wenn der 2. User entweder das Doc garnicht öffnen oder nur im Lesen-Modus öffen kann.
Hoffe mir kann einer von euch helfen!! :)
cya
CrazyCoder
-
Meine Programmierkenntnisse reichen gerade soweit, das ich den Code lesen und verstehen kann aber für umschreiben leider nicht mehr!
Es würde reichen wenn der 2. User entweder das Doc garnicht öffnen oder nur im Lesen-Modus öffen kann.
CrazyCoder
das macht der code doch, oder ?
gruss
-
@Till_21
Hm... also wenn er das tun würde würde ich mich nicht nochmal deswegen malden! In der Theorie stimmt das wohl, er sollte es machen!!! Aber sollen und tun ist was anderes!!! Ausserdem erkennt er auch nicht, das der User der es geöffnet hat das Doc wieder geschlossen hat und sperrt die Dokumente dauerhaft mit dem Namen der Person, zumindest sag er das!
Aber ich kann trotzdem das Doc öffnen und ich kann immernoch in den Bearbeiten-Modus wechseln und locker-flockig meine Änderungen speichern und das sollte er ja eben verhindern! Ne!? :)
Also, du kannst ihn ja mal bei dir einspielen, du wirst sehen er funzt nicht! Und wenn doch dann mußt du mit erklären was du anders hast als ich!!! ;)
cya
CrazyCoder
-
Hallo CrazyCoder,
es stimmt, das es vorkommen kann, das die Meldung:
"Dokument ist von XY in Bearbeitung" erscheint,
obwohl dieser bereits vor Stunden den Rechner
ausgeschaltet hat. Deswegen gibt es dann 2 Lösungen:
Man lässt einen Agenten in der Nacht laufen, der
alle Lock Felder leer oder
die betreffende Person öffnet das Dokument erneut
(er ist der einzige der das Lock umgehen kann) und
verlässt das Dokument regulär.
Ciao
Don Pasquale
-
Versuchs mal mit http://www.xetrion.com
Document Locking für Notes- und Web-Clients.
Haben es in einigen DBs aktiv, bis jetzt ohne Probleme.
CodeWarrior