Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Ch33 am 14.10.10 - 11:30:44
-
Hallo zusammen,
Ich möchte mit LS beim öffnen eines Dokuments prüfen, ob dieses bereits von einem anderen Benutzer bearbeitet wird. Hierbei bin ich im Forum auf das Item "$Writers" gestoßen.
Wenn ich dieses Feld über Script abfragen will bekomme ich immer einen Leerstring zurück.
Die Abfrage habe ich wie folgt versucht:
doc.Getitemvalue("$Writers")(0)
oder
doc.~$Writers(0)
auch die Abfrage über
doc.LockHolders bzw.
doc.LockHolders(0)
führt zu keinem ergebnis.
Beim Versuch das Dokument zu öffnen wird Notesseitig die Meldung
"Das Dokument wird aktuell bearbeitet von ....." ausgegeben.
Der Rückgabewert der oben genannten Codes ist immer Leer
Ist es denn erforderlich das Sperren von Dokumenten in den Datenbankeigenschaften zu aktivieren?
Die Datenbank liegt nur auf einem Server und es gibt keine weiteren repliken.
Warum gibt es in diesem Dokument dieses Item ($Writers) nicht?
-
Ist es denn erforderlich das Sperren von Dokumenten in den Datenbankeigenschaften zu aktivieren
Radio Erwian meint: "Nein, natürlich nicht. Der Server erkennt aufgrund des seit Notes 5 vorhandenen nKristallkugel.dll Dienstes automatisch beim Einrichten der Datenbank, dass er für diese Datenbank das DocumentLocking aktivieren muss. Probleme kann es nur geben, wenn der besagte Dienst während der Installation nicht gelaufen ist. Das lässt sich aber mit einem "Tell Kristallkugel recheck" auf der Serverkonsole beheben."
Alternativ könntest Du Dir auch das Kapitel "Locking documents and design elements" in der Designer-Hilfe ansehen, wenn Du Dich auf den oben angeführten Dienst nicht verlassen willst. Da werden nämlich alle notwendigen Voraussetzungen für das DocumentLocking angeführt.
Weiters wäre es eine gute IDee, nicht direkt auf die Felder zu gehen, sondern die von IBM dafür vorgesehenen Lotusscriptfunktionen (getLockHolders, lock, unLock, ... - siehe Designer-Hilfe) zu verwenden.
-
$Writers" wird nur angelegt, wenn das Hard Locking aktiv ist, welches man über die Datenbankeigenschaften setzt.
Das Soft Locking ist automatisch auf dem Server aktiv, gilt aber nur für diesen Server.
Für Deinen Fall musst Du also die DB Eigenschaft "Sperren von Dokumenten zulassen" setzen.
-
1) Unter Unix/Linux heißt der Dienst natürlich "kristallkugel.so".
2) Der Dienst ist selbstverständlich sprachabhängig, aber MUI-fähig und für alle gängigen Sprachen verfügbar (Updates für Level1 Sprachen stehen immer 2 Jahre nach der englischen Version zum Download von einem via 56k Modem angebundenen Server in Islamabad zur Verfügung).
Parallel zur kristallkugel.dll kann daher auch die "cristalball.dll" für englischsprachige Benutzer geladen werden. Der Aufruf auf der Konsole mit dem enstprechenden Namen ("tell CristalBall recheck", ...) zu tätigen.
3) Als Webservice ist der Dienst übrigens nicht ansprechbar. Es gibt aber eine Assembler-API von Bob Balaban dafür.
-
Hallo,
vielen Dank schon mal für Euere Antworten.
Ich habe nun das Hard-Locking in der DB aktiviert.
Eine Abfrage ob dies wirklich der Fall ist mit folgendem Code gibt TRUE zurück.
db.IsDocumentLockingEnabled
Das Item $Writers ist im Dokument weiterhin nicht vohanden auch wenn es sicher von einem weiteren User in Bearbeitung gesetz wurde.
Auch die Notesseitige Meldung (Dokument wird aktuell bearbeitet von ....) wird jetz nicht mehr angezeigt.
Im Debugger wird unter dem Doc unter Items weiterhin kein $Writers angeboten
auch unter doc LockHolders ist weiterhin ein leerstring zu finden.
Bei Abschalten des Hard Locking wird zumindest die Notesseitige Meldung wieder ausgegeben.
Aus meiner Sicht Verhält sich das eigentlich genau umgekehrt wie es sein sollte oder?
Gruß
Christian
-
Hat die DB einen Administrationsserver in der ACL?
@Martin: Was hast Du denn geraucht ? O0
Andreas
-
@Martin: Was hast Du denn geraucht ? O0
Andreas
/offtopic
ich tippe ja auf nen RTFM-Joint :P
-
Ja, ein Administrationsserver ist eingetragen.
-
Setzt Du auch den Lock explizit?
-
Ich bin jetz nicht sicher was du mit den Lock explizit setzten meinst.
Aber die Felder $Writer bzw $WriterDate sollten doch automatisch von Notes gesetzt werden oder?
Gruß
Christian