Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: Lancelot am 14.09.16 - 11:25:54

Titel: Abfragen der Meldung "Doc wird von User XY gesperrt."
Beitrag von: Lancelot am 14.09.16 - 11:25:54
Hallo Leute,

um Speicherkonflikte zu vermeiden, soll ich abfragen, ob die o.g. Meldung bestätigt wurde.
Wenn ja dann soll das uidoc geschlossen werden.

Ich soll keinen Reload machen, sondern das uidoc wirklich nur schließen.

Habe ich überhaupt einen Change die Meldung abzufragen?

Danke schon mal für Eure Ideen.  ;)
Titel: Re: Abfragen der Meldung "Doc wird von User XY gesperrt."
Beitrag von: Flachmann am 14.09.16 - 12:21:03
Ich habs noch nicht selbst gemacht, aber Du könntest das Property NotesDocument.LockHolders überprüfen. Wenn da etwas enthalten ist, dann der Name des Users XY. Dann kannst Du ja NotesUIDocument.Close() aufrufen.  :)
Titel: Re: Abfragen der Meldung "Doc wird von User XY gesperrt."
Beitrag von: ascabg am 14.09.16 - 12:27:01
@Flachmann,

Das funktioniert aber nur dann, wenn das Document Locking auf der Datenbank aktiviert ist.


Andreas
Titel: Re: Abfragen der Meldung "Doc wird von User XY gesperrt."
Beitrag von: Flachmann am 14.09.16 - 12:32:11
Das kann sein.   :D  Aber man sollte es auch einschalten, wenn man Locks prüfen will. Und die Voraussetzungen sollten dann auch bestehen: ein Admin-Server in der ACL.

Titel: Re: Abfragen der Meldung "Doc wird von User XY gesperrt."
Beitrag von: Lancelot am 14.09.16 - 12:49:08
Das Looking ist aktiviert und der Server ist als Adminserver eingetragen.

Ich versuche es jetzt mal mit dem prüfen auf lock.holders.

Danke!
Titel: Re: Abfragen der Meldung "Doc wird von User XY gesperrt."
Beitrag von: Lancelot am 14.09.16 - 13:11:17
Es funktioniert nicht, habe es im Event Quermodechang und Postmodechange versucht.
Es wird zwar immer noch die Meldung angezeigt, aber dann passiert nicht weiter.

Wo muss ich das Script einfügen?


Dim ws As New NotesUIWorkspace
Dim doc As NotesDocument
   
Set uidoc = ws.CurrentDocument
Set doc = uidoc.document
   
holders = doc.LockHolders
If holders(0) = "" Then
   Call uidoc.Close()
End If
Titel: Re: Abfragen der Meldung "Doc wird von User XY gesperrt."
Beitrag von: ascabg am 14.09.16 - 13:12:53
Mal anders herum gefragt.

Das DocumentLocking ist doch primär gerade dafür geschaffen worden, um Speicher- und Replizierkonflikte zu verhindern.

Wenn ein Dokument "gelockt" ist, dann kann ein anderer Anwender doch nur noch "lesend" auf das Dokument zugreifen und
zwar so lange, bis der "LockHolder" dieses Dokument wieder verläßt und das "Unlock" sauber gelaufen ist.

Da braucht man doch eigentlich nichts prüfen?

Oder stehe ich hier etwas auf dem Schlauch?


Andreas
Titel: Re: Abfragen der Meldung "Doc wird von User XY gesperrt."
Beitrag von: ascabg am 14.09.16 - 13:14:34
Und die Meldung abfagen würde meines Erachtens nur mittels API (keine Notes-API) funktionieren.

Und ob diese sich dann "unterdrücken" ließe wage ich zu bezweifeln.


Andreas
Titel: Re: Abfragen der Meldung "Doc wird von User XY gesperrt."
Beitrag von: Lancelot am 14.09.16 - 13:24:05
Nein so stimmt das nicht ganz, denn trotz dem Locking kann Du sehr leicht Speicherkonflikte erstellen.
Wenn User a ein Doc editiert und zur gleichen Zeit User B das Doc auch editieren möchte, bekommt User B die Meldung.
Lässt der User B das Doc offen im Lesemodus stehen, bis der andere fertig ist
und klickt dann doppelt in das Doc, kann er es zwar editieren, aber die neusten Einträge werden im Doc nicht angezeigt.

Schwups, schon hast Du einen Speicherkonflikt, dass wollte ich durch das schließen verhindern.
Titel: Re: Abfragen der Meldung "Doc wird von User XY gesperrt."
Beitrag von: ascabg am 14.09.16 - 13:52:24
@Lancelot

Dann musst du deine Anwender "erziehen".
Wenn sie die Meldung erhalten, das Dokument einfach wieder schließen und zu einem späteren Zeitpunkt
nochmal versuchen.   ;)

Aber mal kurz zu deinem Code.

Wenn LockHolders = "", dann ist das Dokument doch auch nicht gelockt.
Warum willst du es dann gleich wieder schließen?
siehe hier (https://www.ibm.com/support/knowledgecenter/SSVRGU_9.0.1/com.ibm.designer.domino.main.doc/H_LOCKHOLDERS_PROPERTY_DOC.html)


Andreas
Titel: Re: Abfragen der Meldung "Doc wird von User XY gesperrt."
Beitrag von: Lancelot am 14.09.16 - 14:00:21
Auch gut die Anwender erziehen. ;-)
Ich war vor fast 16 Jahren als ich in die Firma kam auch noch so zuversichtlich, dass wir unsere User einfach erziehen können.
Den Weg habe ich dann ganz schnell wieder verlassen.

Egal was hier programmiert wird, es muss sich für die User immer so anfühlen, als wenn man ihnen mit vorgewärmter Watte den Hintern abwischt.
Ein User muss hier nicht denken, sondern einfach nur schreien und schon bekommt er sein Fläschchen:  ;-)

Stimmt der Code sollte auf ungleich abfrage, aber auch das klappt nicht so wirklich.
Ich probiere es einfach weiter.
Titel: Re: Abfragen der Meldung "Doc wird von User XY gesperrt."
Beitrag von: Tode am 14.09.16 - 14:08:16
Du musst das anders umsetzen: Es interessiert Dich ja nicht der Locking- Status im Moment des QueryModeChange, sondern der Status zum Zeitpunkt des Dokument öffnens.

Du musst Dir also im QueryOpen eine globale Variable merken "docWasLockedWhenOpening" und diese Variable dann im QueryModeChange abfragen. Wenn das Dokument beim öffnen gelockt war -> Reopen.

Natürlich kannst Du das auch noch eleganter machen: Du kannst Dir das Modified des Dokuments beim QueryOpen merken, und im QueryModeChange das Dokument über die Unid aus der Datenbank holen, und dessen Modified mit dem gemerkten Modified vergleichen. Wenn unterschiedlich -> Meldung und reopen.

ABER ACHTUNG: Wenn Du IRGENDEINE globale Variable hast, die das aktuelle Dokument repräsentiert, dann kannst Du mit getDocumentbyUnid so lange versuchen, das Dokument "neu" auszulesen wie Du willst: Du wirst IMMER das in- Memory- pendant kriegen (mit altem Modified- Datum)...