Autor Thema: Dokument nachlesen - Datensatzsperre  (Gelesen 1551 mal)

Offline FrankLU

  • Aktives Mitglied
  • ***
  • Beiträge: 116
  • Geschlecht: Männlich
Dokument nachlesen - Datensatzsperre
« am: 23.12.05 - 15:24:04 »
Einen weihnachtlichen Gruß an alle!

Da ich mit einem Notes5-Server arbeiten muss, muss ich versuchen, eine Datensatzsperre hinzubekommen.

Bisherige Lösung: Beim Schalten in den Edit-Modus durch Benutzer 1 wird vor dem Umschalten in den Edit-Modus ein Kennzeichen gesetzt (im iuDoc und im Doc) und das Doc erst mal gesichert. So kann ich ein Bearbeiten durch Benutzer 2 verhindern, in dem ich das Kennzeichen abfrage, wenn Benutzer 2 sein Doc lädt und bearbeiten will, nachdem Benutzer 1 in den Edit-Modus  gegangen ist. Auch für die Abbruch-Situation (ohne Speichern) habe ich eine Lösung.

Problem ist aber: Wenn Benutzer 1 und Benutzer 2 das gleiche Doc in der Anzeige haben (Lese-Modus) und Benutzer 1 dann in den Edit-Modus geht (und somit das Kennzeichen setzt), kann trotzdem auch Benutzer 2 das Doc in den Edit-Modus schalten.

Ein Nachlesen des Dokuments beim Wechsel in den Edit-Modus über GetDocumentByUNID liest mir den Datensatz aus dem Cache ein, nicht das Doc von der Datenbank mit dem gesetzten Kennzeichen. Eine Entsprechnung von @DBLookup mit der Option "NoCache" habe ich für LotusScript nicht gefunden. Ein Arbeiten mit Evaluate ist bei @DBLookup nicht möglich.

Bekomme ich das System dazu, dass Benutzer 2 das Doc von der Datenbank in ein zweites NotesDocument neu einliest, obwohl es schon angezeigt wird.

Frohe Weihnachten!
Frank
Frank Lohöfer
MD Medicus Holding GmbH
Client (User): 12.0.1
Client (Admin): 12.0.1
Server: 9.0 auf Linux

Offline Mark³

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
  • Nordisch by Nature
    • Das Leben aus der Sicht eines Menschen
Re: Dokument nachlesen - Datensatzsperre
« Antwort #1 am: 23.12.05 - 15:38:20 »
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:

Code
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
« Letzte Änderung: 23.12.05 - 15:42:07 von mt69clp »
sagt Mark.



slowfood.de

Offline FrankLU

  • Aktives Mitglied
  • ***
  • Beiträge: 116
  • Geschlecht: Männlich
Re: Dokument nachlesen - Datensatzsperre
« Antwort #2 am: 23.12.05 - 15:50:12 »
Hallo Mark,

danke für die schnelle Antwort. Auf die einfachsten Dinge kommt man immer selten. Das löst schon mal mein akutes Problem.  :)

Dabei werde ich die Sperrdokumente aber in einer anderen Datenbank ablegen, wo die Leute auch Löschrechte haben, die Sie in der eigentlichen Datenbank natürlich nicht haben sollen.

Trotzdem würde mich interessieren, ob es per Script möglich ist, ein Doc neu von der Datenbank einzulesen, obwohl es schon angezeigt wird.

Frohe Weihnachten
Frank
« Letzte Änderung: 23.12.05 - 16:53:07 von md-medicus »
Frank Lohöfer
MD Medicus Holding GmbH
Client (User): 12.0.1
Client (Admin): 12.0.1
Server: 9.0 auf Linux

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz