Autor Thema: Aktualisieren einer Ansicht im Backend  (Gelesen 4611 mal)

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Aktualisieren einer Ansicht im Backend
« am: 20.10.05 - 18:10:53 »
Hallo,

ich brüte gerade über einer Problematik in meiner Datenbank für Geldbestellungen, zu der ich hier schonmal ein paar Fragen hatte. Die sind ja auch alle zu meiner Zufriedenheit gelöst worden, nur stehe ich vor einem neuen Problem:

Die Überprüfung, ob jetzt alle bestellt haben, lasse ich zur Zeit im QueryClose des Doks per Serveragent ausführen (Filialen sehen nur eigene Bestellungen) durchführen. Dabei ist es so, dass bei der letzten Bestellung beim ersten Schließen des Dokuments die Vollständigkeit noch nicht erkannt wird. Sollte aber auch kein Wunder sein, da das Dokument direkt danach auch noch nicht in der betroffenen Ansicht erscheint (von hier aus erstellt man die Bestellung). Nach einem Ansichtswechsel hin und wieder zurück und erneutem Öffnen wird alles richtig verarbeitet. Dies habe ich versucht zu umgehen, indem ich nach dem Speichern im PostSave des Doks ein Notesview.Refresh auf die Ansicht gebe, was aber leider keinen Erfolg bringt.

Wie kann ich das Problem lösen, bzw. was für Alternativen gibt es zu meiner Vorgehensweise?
« Letzte Änderung: 25.10.05 - 11:32:21 von MadMetzger »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Aktualisieren einer Ansicht im Backend
« Antwort #1 am: 20.10.05 - 18:41:10 »
So, wie ich das sehe (kenne Deinen Code ja nicht), müsste das NotesView.Refresh zu Beginn des Agent-Codes stehen und nicht im Code, der noch vom Client ausgeführt wird.

Bernhard

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Aktualisieren einer Ansicht im Backend
« Antwort #2 am: 20.10.05 - 19:39:43 »
Also, wenn ich dich jetzt richtig verstanden habe, muss die View im Code des Agenten refreshed werden, richtig? Also ist das aktualisieren im Dokument vollkommen überflüssig?

Kann es nur jetzt gerade nicht testen, werde ich aber gleich morgen machen.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Aktualisieren einer Ansicht im Backend
« Antwort #3 am: 20.10.05 - 19:50:20 »
Jo, die Sachen laufen ja asynchron, entscheidend ist aber der Agent, in dem er auf eine "wiedererfrischte" Ansicht angewiesen ist.
Auf jeden Fall sollten wir uns auf den Agent konzentrieren.

Ich hoffe, dass das morgen gleich bei Dir funktioniert.

Bernhard

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Aktualisieren einer Ansicht im Backend
« Antwort #4 am: 20.10.05 - 20:01:46 »
Ist ja eigentlich auch logisch, das Aktualisieren muss ja noch nicht abgeschlossen sein, wenn der Agent anfängt zu laufen... hoffe auch mal, dass es auf Anhieb klappt! Aber schonmal Danke für den Tipp!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Aktualisieren einer Ansicht im Backend
« Antwort #5 am: 20.10.05 - 20:11:14 »
Gern geschehen, Markus (alter Pyromane  ;D).

Auf jeden Fall ist die Erledigung des ViewRefreshs die saubere Lösung. Ich bin schon gespannt, was Du morgen zu vermelden hast (sonst müssen wir an ganz anderer Stelle suchen - aber weiterhin im Agent).

Bernhard

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Aktualisieren einer Ansicht im Backend
« Antwort #6 am: 20.10.05 - 20:41:24 »
Jo, die Sachen laufen ja asynchron,
Sorry for nitpicking, aber das läuft imho von der Sicht des Entwicklers gerade nicht asynchron sondern synchron ab.
Sobald Notes auf view.refresh trifft, wartet die Runtime erstmal bis die gesamte View refreshed ist bevor die nächste Zeile verarbeitet wird.
Asynchron wäre, wenn er nicht warten würde.
Asynchron = 2 unabhängige Prozesse/Treads, die möglicherweise miteinander kommunizieren können.
Synchron = Eins nach dem anderen.

Asynchron bietet eine Menge von Möglichkeiten, aber auch bonus-Komplexiät für den Entwickler.

Axel
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Aktualisieren einer Ansicht im Backend
« Antwort #7 am: 20.10.05 - 20:45:37 »
Axel, es sind zwei Maschinen, die da werkeln. Und jede cached (logischerweise).

Warten wir mal morgen ab - ich könnte mir vorstellen, dass da noch ganz andere Effekte eine Rolle spielen.

Bernhard

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Aktualisieren einer Ansicht im Backend
« Antwort #8 am: 21.10.05 - 08:20:04 »
Leider hat das nichts geholfen... mir kam gestern abend noch eine Idee, woran es liegen könnte: Ich habe die Überprüfung in eine Klasse ausgelagert, die auch alles andere im Zusammenhang mit den offenen Bestellungen steuert, und greife dort auf eine eigene Instanz der gleichen Ansicht zu. Könnte es vielleicht helfen, wenn ich der Klasse beibringe, ihre Instanz der Ansicht zu aktualisieren? Oder habt ihr noch weitere Ideen, bzw. was für Infos bräuchtet ihr noch!

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Aktualisieren einer Ansicht im Backend
« Antwort #9 am: 21.10.05 - 12:21:33 »
Auch das Aktualisieren der Ansicht aus der Instanz der Kontrollklasse heraus hat noch nicht den erwünschten Effekt gebracht...  ???

Wenn jemand noch Vorschläge oder Alternativen hat, nur raus damit...  :-:

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Aktualisieren einer Ansicht im Backend
« Antwort #10 am: 21.10.05 - 13:53:25 »
Kann es sein, dass in Maskenevents das update der View erst nach dme Queryclose stattfindet?
Wenn du von aussen (etwa in einem Agenten) auf Ansichten und docs zugrefst ist view.refresh sehr zuverlässig und v.a. synchron. D.h. das Skript ist solange blockiert, bis der Anischtenindex neu aufgebaut ist.
 
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Aktualisieren einer Ansicht im Backend
« Antwort #11 am: 21.10.05 - 14:00:42 »
Das Aktualisieren der Ansichten wird im QueryClose von einem Agenten gestartet, der per Agent.runOnServer angeschubst wird.  :-:

Oder sollte ich den Agenten vielleicht mal von einem View Event aus losrennen lassen?  ???

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Aktualisieren einer Ansicht im Backend
« Antwort #12 am: 24.10.05 - 19:49:46 »
Auch das Starten des Agenten aus dem ViewEvent heraus hat es nicht gebracht. ???

Wo kann ich noch schauen, bzw. wo liegen Fehlerquellen? Oder braucht ihr mehr Details?  :-:

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Aktualisieren einer Ansicht im Backend
« Antwort #13 am: 24.10.05 - 19:59:37 »
Ich kann das leider nicht nachvollziehen: Wenn ich eine saubere Ansicht (im BackEnd) brauche, tut NotesView.Refresh genau das, was es soll.

Vielleicht kannst Du einen Workaround für Deine spezifische Umgebung (wer weiss, welcher Nebeneffekt da hineinspielt ...) bauen und in ein spezielles Dokument die bisherigen Bestellungen schreiben ? Du kannst ja dafür in dem Dokument (Replizierkonflikte mischen !) jeweils eigene Items verwenden, die nur von den jeweiligen Filialen beschrieben werden.

Aber - irgendwo muss der Hase ja im Pfeffer liegen. Fragen kann ich leider keine stellen wegen mehr Details: Mir fehlt der komplette Zusammenhang.

Bernhard

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Aktualisieren einer Ansicht im Backend
« Antwort #14 am: 24.10.05 - 20:13:25 »
Kann es irgendwie mit Leserfeldern zusammenhängen? Muss der Agent irgendwie besonders signiert sein? Das muss doch irgendwie klappen...

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Aktualisieren einer Ansicht im Backend
« Antwort #15 am: 24.10.05 - 20:17:04 »
Mit Leserfeldern kann es selbstverständlich zusammenhängen. Der Agent, der die Collection prüfen will und vorher die View refreshed, muss natürlich so signiert sein, dass er alle Rechte hat, um von Leserfeldern unbeeindruckt zu sein (d.h., er muss in allen Dokumenten auch in den Leserfeldern stehen).

Bernhard

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Aktualisieren einer Ansicht im Backend
« Antwort #16 am: 24.10.05 - 20:19:55 »
Also ich habe den Agenten mit der Server-ID signiert, der Server ist mit einer Rolle Admin in den Dokumenten als Leser eingetragen. Bin ich mit der Rolle in der DB unterwegs und triggere den Agent, dann funkt es auch... Werde morgen aber nochmal die Leserfelder und ACL-Einstellungen checken. Irgendwo muss es ja haken...

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Aktualisieren einer Ansicht im Backend
« Antwort #17 am: 24.10.05 - 20:33:09 »
Kannst Du nicht auch auf dem Server einen Agent laufen lassen, der bei neuen / modifizierten Dokumenten anspringt ? Dann wärest Du doch den ganzen Trödel mit RunOnServer los. Der ausführende User muss doch nicht wissen, ob er nun der letzte ist, oder ?

Bernhard

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Aktualisieren einer Ansicht im Backend
« Antwort #18 am: 24.10.05 - 21:58:42 »
*Ping* Da hast du natürlich vollkommen recht... es kommt da nicht drauf an, ob es der letzte User auslöst, nur dass es danach dann relativ zeitnah ausgelöst wird, damit der Hauptkassierer, der die Bestellungen bearbeitet, dieses dann schon frühzeitig kann... das probiere ich dann morgen nochmal! Danke für den guten Tipp, Bernhard...

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Aktualisieren einer Ansicht im Backend
« Antwort #19 am: 24.10.05 - 22:55:05 »
Sehr gern geschehen. "Relativ" zeitnah passiert das auf jeden Fall (sowie es auf dem ausführenden Server ankommt, aber das ist ja auch sowieso das Problem, wenn man x Servers hat) - sowie die Server-Task Prozessorzeit für den Amgr abzweigt, rammelt der Agent los. Insofern: Wie bei RunOnServer.

Ich bin gespannt, wie das nun bei Dir ausgeht. Sag' an, wenn Du Hilfe brauchst.

Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz