Autor Thema: Backend Änderungen ohne DocReopen im Frontend sichtbar machen  (Gelesen 3108 mal)

Offline Alexander 28

  • Aktives Mitglied
  • ***
  • Beiträge: 190
  • Geschlecht: Männlich
  • Meistens gibt es eine Lösung!
Ich habe eine etwas verzwickte Situation. Ich habe nun schon einige Zeit im Forum verbracht und verschiedene Threads gelesen, konnte aber die für mich passende Lösung noch nicht finden

Ich habe ein Dokument im Frontend geöffnet. Nachdem das Dokument im Frontend erfolgreich gespeichert wurde (PostSave), was sowohl über das SmartIcon, als auch über die Tastenkombination Strg + S als auch über das einfache Verlassen des Dokumentes mit der Escape-Taste erfolgen kann, startet ein Agent mit den Rechten des Servers (agent.runonserver(noteid)) um Werte aus einer anderen Datenbank auszulesen und diese in das Dokument einzutragen. Das funktioniert ja meines Wissens nur im BackEnd!? Wenn der User die Maske im Rahmen der Speicherung auch geschlossen hat (Ecs), funktioniert das wunderbar und nach der nächsten Öffnung des Dokumentes sind die abgezogenen Werte aus der anderen Datenbank auch im Dokument zu sehen. Wenn er allerdings nur Strg + S drückt, erhalte ich einen Speicherkonflikt, weil der Serveragent das Bäckendokument natürlich inhaltlich verändert und auch gespeichert hat.

Meine Frage ist nun ob ich irgendwie im Frontend Dokument die vom Serveragenten im Backend durchgeführten Änderungen sichtbar machen kann, ohne das Dokument zu ReOpen, da dies ja dann problematisch wäre, wenn der User die Maske mit Escape verlässt und die Rückfrage nach der Speicherung mit ja beantwortet. Ich möchte in diesem Fall natürlich nicht, dass das Dokument wieder geöffnet wird!?

Ideal wäre es also, wenn die Änderungen im Backendokument direkt in das Frontend durchschlagen und dort auch angezeigt werden würden. Ein darauf folgendes erneutes Speichern durch den User via save soll dann nicht zu einem Konflikt führen.

Ich habe schon mit autoreload, reload, refresh etc. rumprobiert, aber es will mir nicht gelingen  ???

QueryClose scheidet übrigens aus, weil die Routine dann jedes Mal beim Schließen des Dokumentes ausgeführt werden würde, auch dann, wenn ein Benutzer, und das kommt sehr häufig vor, das Dokument einfach nur öffnet um sich Informationen zu beschaffen ohne irgendwelche Änderungen in das Dokument einzugeben und diese zu speichern. Insofern ist das für mich auch keine Lösung.
« Letzte Änderung: 09.09.15 - 11:46:13 von Alexander 28 »

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Was gefällt dir an Repoen nicht? Wenn du nach dem Starten des Agents (vermutlich mit agent.runOnServer()) das Feld SaveOptions="0" setzt und das Dokument schließt, sollte keine Abfrage mehr kommen.

Ablauf müsste im PostSave etwa wie folgt sein:
agent.runOnServer
doc.SaveOptions = "0"
unid = doc.universalid
uidoc.close
delete doc ' Referenz löschen
doc = db.getDocumentByUNID(unid)
ws.editDocument(doc)

Alternativ kannst du die Ergebnisse des Agenten in ein Temp-dokument schreiben und danach am Client Feld für Feld ins Originaldokment zurück kopieren (und nochmal speichern).
Diese Änderungen werden dann auch im UI reflektiert, sofern es sich nicht um Richtext handelt

Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
...
QueryClose scheidet übrigens aus, weil die Routine dann jedes Mal beim Schließen des Dokumentes ausgeführt werden würde, auch dann, wenn ein Benutzer, und das kommt sehr häufig vor, das Dokument einfach nur öffnet um sich Informationen zu beschaffen ohne irgendwelche Änderungen in das Dokument einzugeben und diese zu speichern. Insofern ist das für mich auch keine Lösung.
Warum scheidet das aus?

Wenn Du die Daten nicht sofort nach dem Speichern im Dokument benötigst, es also genügt, wenn das Dokument durch den Agenten nach dem Schließen aktualisiert wird, starte den Agenten im QueryClose, aber nur dann, wenn das Dokument vorher gespeichert wurde.

Dazu definierst Du Dir in den Globals eine Variable, die Du im PostSave auf True setzt. Im QueryClose startest Du den Agenten, wenn die Variable True ist (also das Dokument gespeichert wurde)

Offline Alexander 28

  • Aktives Mitglied
  • ***
  • Beiträge: 190
  • Geschlecht: Männlich
  • Meistens gibt es eine Lösung!
Hallo Roland, hallo Peter!

Zunächst herzlichen Dank für eure Hinweise.

@Roland
Ja, das erneute Öffnen des Dokumentes an sich ist vom Grundsatz her kein Problem. Ich habe nur bislang nicht ausprobiert, wie sich der Mechanismus verhält, wenn der User das Dokument über die Escape-Taste schließt und die Rückfrage nach der Speicherung  mit ja beantwortet. Genau diese Rückfrage ist aber auch explizit gewünscht, da keineswegs von ihm erwartet werden kann, dass er auf die "Speichern"-Schaltfläche in der Aktionsleiste klickt. Wenn dann das Dokument geschlossen und wieder geöffnet wird ist das natürlich so nicht gewünscht. Ich werde das aber auf jeden Fall mal ausprobieren.

Die Alternative über die Anlage eines temporären Dokumentes habe ich auch schon ins Auge gefasst. Das Problem was ich aber sehe ist, dass vom Server tatsächlich ein Dokument  angelegt und auch gespeichert werden muss, denn meines Erachtens komme ich an die übernommenen Daten ja nicht heran, wenn das Dokument nur temporär existiert!? Ich muss es also zu einem späteren Zeitpunkt wieder löschen und zwar ebenfalls durch den Server, da ich nicht davon ausgehen kann, dass der Benutzer Löschberechtigung hat. Vielleicht habe ich Dich aber auch falsch verstanden.

Auf den Fall erst mal danke für deine hilfreichen Hinweise!

@Peter
Das hört sich nach einer guten Lösung an, da es tatsächlich vollkommen ausreichend ist, wenn die Routine erst nach der Schließung des Dokumentes abläuft. Keine Ahnung warum ich darauf nicht selbst gekommen bin  :P.  Das werde ich auf jeden Fall nachher gleich einmal testen. Wenn das wirklich sauber funktioniert, wäre das meine Lösung. Herzlichen Dank hierfür!

Alles Gute euch beiden und einen nicht allzu langen Arbeitstag  ;D

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz