Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: MadMetzger am 05.12.05 - 13:46:16
-
Hallo,
in einem gerade geöffneten Dokument wird ein Agent gestartet, der ein Dokument verändern soll. Jedoch ist nach schließen das Dokument wieder im Ursprungszustand. Es werden über den Agenten verschiedene Felder im Backend gesetzt und dann auch im Backend gespeichert. Lasse ich mir im Agenten noch die betroffenen Felder nach und vor dem Speichern anzeigen, so ist alles in Ordnung... :-: Ich verstehe das nicht. Den gleichen Effekt habe ich, wenn ich die selben Aktionen per Formelsprache ausführe... ???
-
Könnte es sein, dass das Frontend-Doc das Backend-Doc wieder überschreibt ?
-
Woran kann ich das erkennen, hört sich zumindest plausibel an. Wie könnte ich das Ganze verhindern?
-
Mit solchen Problemen hatte ich auch oft zu kämpfen.
So bin ich mit der Zeit zu einem fanatischen Anhänger der Trennung von Daten und Präsentation geworden.
Die einfachsten Möglichkeiten sind:
- Felder im UIDoc setzen (problematisch, wenn diese Felder bei der Berechnung andere Felder anziehen).
Falls nach der Aktion Dokument eh geschlossen wird:
- Flag setzen und die Agentenoperationen im QuerySave in Anghängigkeit des flags abfackeln. Flag als globale Variable der Maske.
-
Danke Axel, werde deinen Vorschlag mal beherzigen... mal schauen ob das was hilft. Die Anwendung in der das Prob auftaucht ist eh mal fällig für eine grundsätzliche Überprüfung. Aber leider dieses Jahr keine Zeit mehr dafür. Könnte was für meine Vordiplomsarbeit werden...
-
Ich befürchte, dass Du das Backend-Dokument änderst, während das FrontEnd-Dokument noch offen ist und damit geneigt, auch noch Änderungen aus dem FrontEnd entgegen zu nehmen. Da das FrontEnd-Dok nach wie vor "in-memory" ist, überschreibt es beim Speichern natürlich die gerade im Backend gemachte Änderung (so, wie es ja auch sein soll).
Workarounds (eine kleine Auswahl):
- Wenn die Änderung im Backend die entscheidende ist: Vorher Frontend-Doc schliessen ohne speichern oder erst Frontend speichern / schliessen und dann Backend-Änderung machen.
- Wenn im Frontend nach Backend-Änderung noch gedreht werden darf / soll: Nach Backend-Änderung zwingend Frontend reloaden / refreshen.
Ansonsten: Mehr Input, mehr Output ;)
Bernhard
PS: Eine Lösung wird sich generell finden. Frage: Besonders "aggressiv" reagieren RT-Items - sind die bei Dir auch involviert ?
-
Also in der ursprünglichen Fassung war es so, dass im BackEnd geändert und gespeichert wurde, nachdem ich die gesamten Aktionen von Formel auf Skript umgestellt habe. Das Verhalten war vorher nahezu gleich... Zum Glück sind keine RT-Items involviert. Momentan habe ich einen Weg gefunden, dass es (zumindest hier bei mir) funktioniert. Meine Kollegen werden das morgen im Büro austesten, da ich eigentlich zu Hause sitze und Überstunden abfeiere...
Aber der Vorschlag, das FrontEndDokument sofort zu schließen, und dann erst die Änderungen durchzuführen, scheint mir etwas einfacher als die Variante von Axel.
-
Aber der Vorschlag, das FrontEndDokument sofort zu schließen, und dann erst die Änderungen durchzuführen, scheint mir etwas einfacher als die Variante von Axel.
Schliessen (aber das kann ja "gnadenlos" sein ;D) oder eben eben ein Reload / Refresh nach der Backend-Änderung, Markus. Eigentlich geht das problemlos (vor allem, da keine RTIs involviert sind, da müsste man anders ggf. herangehen).
Viel Erfolg,
Bernhard
-
Ich schaue es mir morgen nochmal an, jetzt bin ich doch ein wenig zu müde, mich da noch einmal darauf zu konzentrieren, bzw. wird es mir dann zu spät heute... schreibe morgen hier mal mein Ergebnis rein... Als dann gute Nacht allen noch anwesenden...
-
Sag' an, wenn es noch klemmen sollte. Hier kann Dir wirklich geholfen werden. Ist so ein Standard-Problem. Ggf. bräuchten wir aber mehr Code / Infos ...
Auch eine gute Nacht wünscht
Bernhard
-
Großes Danke an alle Beteiligten... ;D der Tipp von Bernhard hat letztendlich den Ausschlag gegeben. Es war tatsächlich so, dass das Backend-Dok durch diverse Aktionen im QueryClose wieder überschrieben wurde und somit die Änderungen wieder weg waren. Der Einfall hierzu kam mir noch gestern abend und jetzt sitze ich im Büro und habe meine Lösung implementiert!
Zu meiner Lösung:
=> Über das aktuelle UiDoc hole ich mir aus dem Backenddok due Unid
=> Danach schließe ich das UiDoc und verliere damit auch das Backenddok aus dem Zugriff
=> Über Session.CurrentDatabas.GetDocumentByUnid hole ich mir das Dokument zurück
=> Alle Aktionen können danach ohne Probleme mit Backend-Frontend-Geschichten im Backend ausgeführt werden