Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: Lancelot am 01.02.16 - 15:17:14

Titel: Doc aktualisieren beim Umschalten vom LeseModus in Editmodus.
Beitrag von: Lancelot am 01.02.16 - 15:17:14
Hi Leute,

ich bräuchte mal einen kleinen Gedankenschubs, denn ich habe ein kleineres Problem und bin anscheinend geistig etwas festgefahren. ;)

Das Problem tritt auf wenn zwei User (nennen wir sie mal "User 1" und "User 2") in unserer Projekt-DB das gleiche Doc öffnen.
Einer öffnet es im Edit-Mode, der andere nur im Lese-Mode.
Möchte der User 1 vom Lese-Mode in den Edit-Mode wechseln, bekommt er die Meldung, dass der User 2 das Dokument gesperrt hat.
Also bleibt User 1 solange im Lese-Mode bis User 2 seine Änderungen gemacht und gespeichert hat.

Das Problem ist, dass User 1 danach wenn er  endlich im Edit-Mode ist nicht die aktuelle Version des Dokument sieht, denn die Änderungen von User 2 werden so nicht angezeigt.

Hat jemand eine Idee, wie ich ein Dokument beim Moduswechsel, von Lesemodus in den Editmodus aktualisieren kann?
Reload der Uidoc-Klasse hat nicht funktioniert.
Schließen und wieder öffnen über die Doc-ID habe ich nicht hinbekommen, ohne das der User lange warten muss.

Bin für jede Idee dankbar, denn im Moment trete nur auf der Stelle.. ;-)

Gruß Gerry
Titel: Re: Doc aktualisieren beim Umschalten vom LeseModus in Editmodus.
Beitrag von: Flachmann am 08.02.16 - 10:06:09
Hast Du denn eine Lösung gefunden?

.Reload() wäre auch mein erster Gedanke. - Aber wenn das nicht funktioniert, wirst Du das Dokument schließen und wieder öffnen müssen, damit der neue Inhalt von der Platte geholt wird. Wahrscheinlich ist das irgendwie im Cache gespeichert...  :-:

Titel: Re: Doc aktualisieren beim Umschalten vom LeseModus in Editmodus.
Beitrag von: pram am 08.02.16 - 10:58:28
Um einen Reopen kommst du nicht herum, du kannst aber mit Evaluate + Formelsprache auf den Inhalt des Dokuments auf der Platte zugreifen.

Folgender Code im QueryModeChange kann das prüfen.
Code
' Neues TempDoc erzeugen (es darf nicht das aktuelle übergeben werden, da sonst @GetDocField den falschen Wert liefert)
Dim tmpDoc As New NotesDocument(doc.getParentDatabase())
Call tmpDoc.Replaceitemvalue("UNID", doc.Universalid)
Dim v
v = Evaluate(|@GetDocField(UNID;"Letzte_Aenderung")|,tmpDoc)
if doc.Letzte_Aenderung(0) <> v(0) then
  msgbox "Dokument wurde modifiziert. Bitte neu öffnen"
  continue = false
end if
Du brauchst noch ein Feld "Letzte_Aenderung", welches beim Speichern auf Now gesetzt wird (ggf. funktioniert auch $Revisions)

Gruß
Roland