Domino 9 und frühere Versionen > Entwicklung

Dokumente Aus- und Einchecken

(1/1)

Don Pasquale:
Hallo Leute,

hat da jemand eine Idee dazu, oder ist das Lotus immanent nicht möglich :
Ich möchte Dokumente, die von anderen User in Bearbeitung sind sperren, oder zumindest einen Hinweis an den User geben:
"Dieses Dokument ist bereits in Bearbeitung."

Kann ich im QueryOpen Ereignis einen Feldwert setzen,
das Dokument speichern (ohne es zu schliessen) ?

für jede Idee dankbar
ps: Um das Problem zu vernfachen, die DB wird zentral gehalten und User sollen sich keine Replik anlegen
Don Pasquale

adminnaddel:
hi,

zufällig habe ich gerade etwas über sperren von doc gelesen.
du müsstes aber ein bisschen arbeiten:
gehe in die such -> gebe ändern ein -> im unteren drittel hatte ich ein riesen script gesehen, welche diese function hat.

cu

Rob Green:
schau mal da:
http://searchdomino.techtarget.com/tip/1,289483,sid4_gci765142,00.html

und auf dieser Seite kannst Du noch viel mehr Beispiele sehen, tipp dazu in Search einfach mal "lock" ein

adminnaddel:
hier doch sowas?


--- Code: ---Hallo,

ich weiß auch, dass da was nicht stimmt.

Ich habe aber schon mal ein bisschen experimentiert und herausgefunden, dass diese "Vorgabemaske nicht gefunden"-Dokumente erstellt werden, wenn ich ein neues Dokument erstellen will, es nicht speichere wenn ich das Fenster schließe. Danach habe ich diese Dokumente. Dies passiert auch bei anderen Datenbanken, die das gleiche Skript enthalten.

Ich schreib euch mal was für Skripte überhaupt in meinen Masken sind:

Sub Postopen(Source As Notesuidocument)
     Dim sess As New NotesSession
     Dim doc As NotesDocument
     Dim thatUser As String
     Set doc = source.document
     If Source.EditMode Then
           If doc.HasItem("LockEdit") Then
                 Source.EditMode = False
                 thatUser = doc.LockEdit(0)
                 Msgbox thatUser & " bearbeitet derzeit dieses Dokument. Solange dieser Benutzer es bearbeitet, können sie nichts ändern."
           Else
                 Call doc.ReplaceItemValue("LockEdit", sess.CommonUserName)
                 Call doc.ReplaceItemValue("LockEditTime", Now)
                 Call doc.Save(True, True)
           End If
     End If
End Sub

Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
     Dim sess As New NotesSession
     Dim doc As NotesDocument
     Dim thatUser As String
     Set doc = source.document
     If Source.EditMode Then
           Continue = True
     Else
           If doc.HasItem("LockEdit") Then
                 thatUser = doc.LockEdit(0)
                 Msgbox thatUser & " bearbeitet derzeit dieses Dokument. Solange dieser Benutzer es bearbeitet, können sie nichts ändern."
                 Continue = False
           Else
                 Continue = True
                 Call doc.ReplaceItemValue("LockEdit", sess.CommonUserName)
                 Call doc.ReplaceItemValue("LockEditTime", Now)
                 Call doc.Save(True, True)
           End If
     End If
End Sub

Sub Querysave(Source As Notesuidocument, Continue As Variant)
     
     Dim session As New NotesSession
     Dim db As NotesDatabase
     Dim parentUNID As String
     Dim ParentDocument As NotesDocument
     Dim sa As NotesItem
     Dim saValue As String
     Dim responses As NotesDocumentCollection
     Dim doc As NotesDocument  
     Set db = session.CurrentDatabase
     Set doc = Source.Document
     parentUNID = doc.ParentDocumentUNID
     Set ParentDocument = db.GetDocumentByUNID(parentUNID)
     Set responses = ParentDocument.Responses
     Set doc = responses.GetFirstDocument
     Do While Not doc Is Nothing
           Set sa = doc.GetFirstItem("SA")
           saValue = sa.Values(0)      
           If saValue = "ja" Then
                 ParentDocument.FeldName = "Ja"
                 Call ParentDocument.Save(True,True)
                 Exit Sub  
           End If
           Set doc = responses.GetNextDocument(doc)
     Loop
     ParentDocument.FeldName = "Nein"    
     Call ParentDocument.Save(True,True)
     
End Sub

Sub Queryclose(Source As Notesuidocument, Continue As Variant)
     Dim sess As New NotesSession
     Dim doc As NotesDocument
     Set doc = source.document
     If doc.LockEdit(0) = sess.CommonUserName Then
           Call doc.RemoveItem("LockEdit")
           Call doc.RemoveItem("LockEditTime")
           Call doc.Save(True, True)
     End If
End Sub


Mfg Marco
--- Ende Code ---

Don Pasquale:
@Rob,
Cool, da war ich ja auf der richtigen Fährte :-)

@Naddel
Danke, das scheint sogar eine aufgemotzte Version
von Rob´s Beispiel zu sein.


Euch Beiden Herzlichen Dank
Jetzt brauch ich bloss noch einen Kollegen
um das zu testen :-)

Ciao

Don Pasquale

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln