Autor Thema: Per "uidoc" in ein "doc" schreiben und dieses refreshen (schließen/öffnen?)  (Gelesen 2863 mal)

Offline Frank_B

  • Senior Mitglied
  • ****
  • Beiträge: 275
  • Geschlecht: Männlich
Ich beschreibe den Inhalt eines Dokuments "doc" aus einem in Bearbeitung befindlichen "uidoc".

Das klappt auch alles und auch die view, in welchem das Dokument "doc" angezeigt zeigt die Änderungen.

Problem:
Wenn der Anwender diese "doc" auch geöffnet hat (lesend) dann hat quasi im backend die Aktualisierung stattgefunden. Nur der Anwender sieht die noch noch. Er muss das "doc" zunächst schließen und wieder "öffnen".

Kann ich per "uidoc" ein bereits zum lesen imselben Client geöffneten "doc" zum schließen und wieder öffnen bringen, quasi refresh erzwingen?
Gruß Frank

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
ja, aber es ist SEHR tricky aufgrund eines Bugs mit neuen Dokumenten...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Frank_B

  • Senior Mitglied
  • ****
  • Beiträge: 275
  • Geschlecht: Männlich
könnte ich das "doc" auch in einen zweiten parallelen notesuiworkspace bringen und dann schließen mit "close"?

Quasi: uidoc2 = doc.document

Und wenn ich mein uidoc speichere, er mir das doc zwar im backend aktualisiert ich aber durch uidoc2.close das schließen provoziere ? oder gehtdas nicht wenn ich das doc (uidoc2) nicht im Fokus im Client zu Gesicht bekomme, es also im Hintergrund im Client geöffnet ist ?
Gruß Frank

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
ALSO: Wenn Du per ws.EditDocument ein Dokument in den "Focus" holst, und das Dokument vorher schon offen war, dann "rutscht" es quasi ins Frontend.

Also: doc1 is im Client geöffnet als uidoc1. Wenn Du jetzt aus doc2 heraus den folgenden Code ausführst:

Set uidoc1a = ws.EditDocument( True, doc1 ), dann holst Du das doc1 in den Vordergrund und hast eine Referenz darauf. Jetzt kannst Du z.B. ein "DoNotOpen = True" irgendwo hinterlegen, was im QueryOpen von doc1 abgefragt wird, und verhindert, dass das Dokument überhaupt geöffnet wird, wenn es nicht bereits geöffnet ist. Wenn dann Dein uidoc1a nach dem Aufruf nothing ist, weißt Du, dass das Dokument nicht offen war, und alles ist gut.

Und jetzt kommt der Bug: Wurde doc1 seit dem Erstellen nicht mindestens einmal geschlossen und wieder geöffnet, dann wird die Zeile Set uidoc1a = ws.EditDocument( True, doc1 ) IMMER eine neue Instanz des selben Dokuments öffnen, egal ob es bereits offen ist, oder nicht -> Du bekommst dann fälschlicherweise die Info, dass es NICHT geöffnet ist...

Ich habe das aktuell in mehreren Datenbanken drin, und alle Eventualitäten abzufangen, und eine Fehlermeldung zu zeigen, wenn dieser "Dokument ist geöffnet, wurde aber noch nie gespeichert"- Fall eintritt, sind mehrere hundert Zeilen Code... Deshalb meinte ich "SEHR tricky"...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline rambrand

  • Senior Mitglied
  • ****
  • Beiträge: 469
  • Geschlecht: Männlich
Hallo Frank,

vielleicht hilft Dir das weiter.


http://atnotes.de/index.php?action=printpage;topic=42910.0


Mich würde nur interessieren, wie soll der Anwender, der das Dokument vor der Änderung geöffnet hatte überhaupt mitbekommen, dass es geändert wurde?
Drückt der dann einfach immer wieder den "Aktualisieren"-Button in dem Du dann das Refresh-Script rein packst?

Bye
Markus
Domino/Notes ab 4.6 aktuell 10.1FP3
Traveler 10.0.1FP1
PHP-Entwickler
Domino/Notes-Entwickler (Hobby)
Consultant (Informationssicherheit & Datenschutz)

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
ws.EditDocument besitzt mehr als zwei Parameter.

Für euch ist der letzte von Interesse, "newInstance" - diesen mit false aufrufen liefert immer das aktuelle UiDoc zurück.
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
@Erik: Nein, eben nicht... Das liefert nur dann das aktuelle UIdoc zurück, wenn dieses nach dem Erstellen mindestens einmal geschlossen wurde und wieder geöffnet, ansonsten öffnet EditDocument das Dokument ein zweites Mal... das ist ja der Bug, von dem ich spreche...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Stimmt, den Effekt hatte ich so noch nicht als Problem. Bei Frank spielt das eventuell keine Rolle, da er von im Lesemodus geöffnet schreibt ... oder?

Spontan würde ich beim Query/PostSave ein re-open einbauen (nur wenn es neu ist), denn einmal gespeichert werden muss es ja, um über Backend verfügbar zu sein.
Das schon mal als "Problemlöser" versucht?
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline Frank_B

  • Senior Mitglied
  • ****
  • Beiträge: 275
  • Geschlecht: Männlich
Guten Morgen,

schön hier, dass man Ideen und Lösungsansätze bekommt.

Na dann will ich mal heut früh das Thema wieder angehen :)

Einen "Aktualisieren" Knopf habe ich in meinem "doc".
Es wäre halt schön wenn das automatisch gehen würde, Problem ist halt wenn der user beide Dokumente schon geöffnet hat.

Gibts denn einen event, wenn ich im Client von einem bereits geöffneten dokument in ein zweites bereits geöffnetes Dokument springe? (Beim Sprung in dieses geöffnete Dokument, à la "QueryOpen")
Gruß Frank

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Nein so ein Ereignis gibt es nicht.
Aber ein NotrsTimer, welcher regelmäßig ins Backend schaut und prüft ob das Dokument geändert wurde, um dann ein refresh auszuführen - würde das Problem auch lösen.

Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline Frank_B

  • Senior Mitglied
  • ****
  • Beiträge: 275
  • Geschlecht: Männlich
Um auch Konfliktdokumenten vorzubeugen mache ich es nun vorerst anders:

Das "doc" hat nun eine Routine im "Queryclose", welches mir den Ist-Zustand (in diesem Kontext wäre es das "uidoc" aus meiner eingebetten View des "doc") mit dem Soll-Zustand (Inhalt im "doc") vergleicht.

Somit kann ich bei Änderungen den Anwender per Dialogbox zumindest bitten, er solle das noch nicht aktualisierte "doc" mal per Schaltfläche refreshen und speichern um Konsistenz zu wahren.
Gruß Frank

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz