Per Lotus Script prüfen, ob Dokument von anderem Benutzer bearbeitet wird

  • Hallo Forum,


    bitte entschuldigt meine Frage. Aber da ich absoluter Newbie in Sachen Notes bin und auch sonst nichts via Google, Forum etc. gefunden habe, hier meine Frage.
    Wenn ein Benutzer ein Dokument im Bearbeitungsmodus geöffnet hat, kann ein zweiter dieses nicht auch noch bearbeiten.


    Mein Problem ist nun folgendes:
    ----------------------------------------------
    Benutzer A öffnet ein Dokument und bearbeitet dieses.
    Benutzer B editiert und speichert das NotesDocument, welches aber bereits von Benutzer A bearbeitet wird. Dies geschieht durch einer Aktion in einer Ansicht.
    Wenn nun Benutzer A das Dokument speichern möchte, erhält er einen Speicherkonflikt.


    Wie kann nun per LotusScript geprüft werden, ob ein ander Benutzer ein Dokument zeitgleich im Zugriff hat?
    Theoretisch sollte es doch funktionieren, da der Notes Client dies doch auch kann, wenn 2 Benutzer versuchen ein Dokument zu bearbeiten. Dann erhält der der zuletzt kommt die Meldung 'Dokument wurde von <xyz> gesperrt'...
    Das Sperren von Dokumenten in der Datenbank ist disabled. Dennoch können 2 User nicht gleichzeitig das gleiche Dok bearbeiten.
    Für jeden Denkanstoß wäre ich dankbar.


    Gruß jcfreak666

    • Offizieller Beitrag

    Du kannst einstellen, dass Dokumente gesperrt werden, wenn diese bearbeitet werden.


    In Deinem Script-Agenten kannst du dann mit notesDocument.Lock und notesDocument.UnLock das Dokument sperren bzw. entsperren.
    Mit notesDatabase.IsDocumentLockingEnabled kannst du abfragen, ob das Dokument-Locking für die Datenbank aktiviert wurde.
    Ob ein Dokument gerade bearbeitet wird bekommst du mit notesDocument.LockHolders heraus.


    Per Funktion kannst du dis alles mit @DocLock erledigen.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

    • Offizieller Beitrag

    aber nicht, wenn du per Backend-Script das Dokument veränderst - zumindest hat dies in 8.5.1 noch nicht funktioniert.


    Gruß
    Dirk

  • Diali,


    Macht er dass denn?


    Hier wird doch der folgende Sachverhalt geschildert

    Zitat

    Benutzer A öffnet ein Dokument und bearbeitet dieses.
    Benutzer B editiert und speichert das NotesDocument, welches aber bereits von Benutzer A bearbeitet wird. Dies geschieht durch einer Aktion in einer Ansicht.
    Wenn nun Benutzer A das Dokument speichern möchte, erhält er einen Speicherkonflikt.


    (natuerlich kann die Schreibweise auch etwas anders gedeutet werden - Aktion in der Ansicht furt Dialog auf, hier werden Werte eingetragen, Dialog wird geschlossen, Werte aus dem Dialog werden in das Dokument zurueckgeschrieben)


    Die Aenderungen erfolgen doch also im Frontend.


    Und spaetestens, wenn der Benutzer B das Dokument editieren moechte, muesste das Softlocking doch greifen?



    Andreas

    • Offizieller Beitrag

    bin jetzt etwas verwirrt, weil:

    Zitat

    Benutzer B editiert und speichert das NotesDocument


    -> Änderung erfolgt im Frontend


    Zitat

    Dies geschieht durch einer Aktion in einer Ansicht


    -> Änderung erfolgt im Backend


    Ich lese dies im Zusammenhang aber so, dass das Dokument nicht im Frontend geöffnet wird, sondern der Benutzer benutzt eine Aktion, die das Dokument ändert. In der Regel wird hier nichts im Frontend gemacht.


    jcfreak666
    schreibe mal wie es genau funktioniert.


    Gruß
    Dirk

  • @All erstmal Danke für eure Antworten.


    Erstmal ein paar allgemeine Infos:
    Bei den Domino Servern läuft aktuell die Version 8.5.1 FP3 und bei den Clients handelt es sich um die 8.5.1 FP5.
    In der Datenbank ist das Sperren von Dokumenten disabled. Auch in der Anwendung selbst wird nicht mit Dokumentensperren gearbeitet.
    Wenn nun versuchen 2 Benutzer gleichzeitig versuchen ein Dokument über den Client (Maske) zu bearbeiten, erhält der zweite die Meldung, dass das Dokument von <user> gesperrt wurde. Soweit ja ok.
    Es arbeiten beide Anwender auf dem gleichen Server.


    Nun versuch ich nochmals etwas genauer zu sein.
    Benutzer A bearbeitet ein Dokument mittels Client und gibt seine Werte ein. Zwischendurch wird das Dokument gespeichert, befindet sich aber weiterhin in Bearbeitung im Frontend durch ihn.
    Beim Speichern des Doks, wird ein Wert in das Backend geschrieben, was dazu führt, dass das Dokument in einer anderen Ansicht auftaucht.
    Unter Umständen kann es nun sein, dass Benutzer B seinen Job derart schnell erledigen möchte (da es nun für ihn sichtbar ist) und über eine Aktion in der genannten Ansicht das sich noch in Bearbeitung durch A befindliche Dok per Aktion verändert und speichert (geschieht per Script im Backend).
    Nun möchte User A das Dok seinerseits speichern, womit es dann zum Speicherkonflikt kommt, da User B das Dok durche seine Aktion verändert hat.


    Mich würde nun interessieren, ob es ne Möglichkeit das zu unterbinden, wenn nicht mit den von Diali vorgeschlagenen DocLocks gearbeitet werden soll/kann, da es ja nich möglich ist ein Dokument gleichzeitig zu bearbeiten.
    Andernfalls müssten die User ihre Arbeitsweise umstellen. Hoffe nur, dass ich den Fall etwas genauer beschreiben konnte. Die Methode IsUIDocOpen greift ja nur innerhalb der gleichen Session.


    Gruß jcfreak666

    • Offizieller Beitrag

    Warum willst du nicht mit dem DocLocking arbeiten? Das System nimmt dir, vor allem auch über mehrere Dominos eine Menge Arbeit ab.


    Aber mal ein anderer Weg (nur als Idee):
    - User A erstellt ein 2. Dokument, welches von User B sichtbar ist
    - User B tut irgend etwas und setzt das Dukument aus "erledigt"
    - Agent pflegt, wenn das originale Dokument nicht mehr bearbeitet wird, die Infos aus dem 2. Dokument in das originale Dokument ein.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Hi,


    Ich moechte dann auch noch etwas fragen.


    Warum wird das Dokument zwischenzeitlich von A ueberhauto so gespeichert, dass es von B gesehen werden kan und er seinerseits die Aktion
    durchfuehren kann?



    Andreas

  • Hallo,


    Diali:
    --------
    Das Arbeiten mit Lock/Unlock wird deshalb nicht gewünscht, da wir nicht wissen, welche Auswirkungen dies auf die anderen Bereiche der Applikation hat. Ansonsten würde ich es schon so machen wie von dir vorgeschlagen. Aber da ich die App leider nicht entwickelt habe (ist historisch gewachsen), kann ich dies leider noch nicht beurteilen.


    ascabg:
    ------------
    Eigentlich war ich der Auffassung, dass das Dokument von Benutzer A mit dem Wert gespeichert wird, welcher dafür verantwortlich ist, dass das Dok in der Ansicht von Benutzer B erscheint und anschließend von A weiterbearbeitet wird, aber ...
    Nachdem ich heite nochmals mit Benutzer A telefoniert habe, stelle sich heraus, dass dieser Wert anscheinend bei Bearbeitungsende eingegeben und dann das Dokument gespeichert und geschlossen wird. In der SELECT Formel der Ansicht von User B wird dieser Wert explizit abgeprüft.
    Daher haben wir uns geeinigt, dass wir diese Thematik beim nächsten Fall nochmals nachstellen werden, da ich herausfinden möchte, wann das Dok in der Ansicht von User B auftaucht, obwohl User A den entscheidenden Wert noch nicht gespeichert hat.



    Falls alle Stricke reißen, wird noch eine Aktion mit aufgenommen, welche ein Flag für das Bearbeitungsende des Dokumentes setzt und in der Ansicht für Benutzer B dieses Flag in der SELECT Formel mit auswertet. Zwar nicht unbedingt Best Practice, aber es wär halt ne zusätzlich Absicherung.
    Halte euch daher auf dem Laufenden. Und nochmals danke für das Feedback von euch allen.


    Gruß Karsten

  • Tach zusammen,


    nachdem ich nun etwas mehr weiss, hier nun der Hergang des Problems.


    Benutzer A bearbeitet ein Dokument und holt als letzten Schritt eine vom System generierte Nummer. Bei dieser Aktion wird das Dokument im Backend gespeichert, womit wiederum das Dokument für Benutzer B in einer anderen Ansicht sichtbar wird. Dies ist ja mittlerweile bekannt.
    Benutzer A speichert und schließt zuletzt das von ihm bearbeitete Dok. Zwischen dem Holen der generierten Nummer und dem abschließenden Speichern und Schließen des Doks (z.B. Telefonate, etc.) kann unter Umständen etwas Zeit vergehen. In dieser Zeitspanne bearbeitet und speichert dann Benutzer B, womit es zum Speicher- oder Replizierkonflikt kommt. Die Idee ist nun, beim Holen der Nummer die Bearbeitung des Dokuments gleich komplett abzuschließen, d.h. Holen der Nummer, speichern und schließen des Doks.


    Es wäre dennoch interessant zu wissen, wie IBM den Softlock realisiert. Hat irgendwer ne Ahnung wie dies implementiert wurde?


    Gruß Karsten