Search the FirstSpirit Knowledge Base
Hallo,
das Beispiel für ein DataAccessPlugin ist großartig. Gibt es denn eine Möglichkeit, den Report automatisch neu zu laden, wenn er angezeigt wird? Hintergrund: die Report-Items sind abhängig von der Inhaltsseite, auf der der Redakteur aktuell arbeitet. Momentan sieht er immer die Report-Items, die zuerst geladen wurden (über den Klick auf den Pfeilkreis aktualisiert sich der Report korrekt).
Diese Diskussion zum Aktualisieren der Report-Items habe ich schon gefunden:Report-Items aktualisieren
Allerdings geht die ShowReportOperation ja nur bei einem aktiven Klick, bspw. bei FS_BUTTON, das Report-Icon wird hiervon nicht beeinflusst.
Mit freundlichem Gruß
Thorben Hischke
Hallo Thorben,
Du kanns einen Report auch per WE_API triggern, also per JavaScript in der generierten Seite.
D.h. letztlich per
Du solltest den entspr. Code dann natürlich nur im CC ausführen 😉
Viele Grüße
Michael
Hallo Thorben,
benötigst du noch weitere Hilfe oder konnte Michael dir bereits weiterhelfen? In diesem Fall wäre es super, wenn du seine "richtige Antwort" entsprechend markierst.
Viele Grüße
Michaela
Hallo Michael,
ja, das ist schon eine Option, allerdings öffnet sich der Report auch damit. Ich möchte ungern dem Redakteur bei jedem Seitenaufruf ihm gleich den Report zeigen. Gibt es nicht ein "Report wird geöffnet"-Event, bei dem ich dann eine Aktualisierung durchführen kann?
Viele Grüße
Thorben Hischke
Hallo Thorben,
nein, das gibt es leider nicht - auch keine Möglichkeit zu "testen" ob ein Report aktuell geöffnet ist (oder welcher).
Mit einem (zugegebenermaßen etwas längeren...) Umweg sollte es aber trotzdem funktionieren (nicht getestet!)
Ganz grobe Idee:
Erstellen eines PermanentPlugins das einen eigenen ClientService über den ClientServiceRegistryAgent registriert. Der ClientService fungiert hier als eine Art Controller, d.h. hier wird die ShowReportOperation untergebracht (s.u.). Der ClientService hätte in etwa folgende Methoden:
void pageViewTriggered() //informiert den ClientService, dass eine Seite "aufgerufen" wurde
void setAutoFollow(boolean) //merkt sich den "von außen" gesetzten Wert
Definition eines zusätzlichen Parameters (=Filterable-Wert) für den Report in Form einer Checkbox "Aktueller Seite folgen" oder so ähnlich (Standard: false).
Immer wenn der Report "los läuft", macht er einmal die Dinge die er sonst auch so tut. Zusätzlich wertet er den "autoFollow"-Parameter aus, indem dort der ClientService geholt wird und der Parameterwert von autoFollow im ClientService über dessen setAutoFollow(...) gespeichert wird.
Im Ausgabekanal wird dann über WE_API.Common.execute(...) nicht direkt die ShowReportOperation aufgerufen, sondern ein Executable. Dieses greift ebenfalls auf den ClientService zu und ruft nur dessen pageViewTriggered()-Methode auf.
Der Trick ist nun, dass in dieser Methode pageViewTriggered() der ClientService die ShowReportOperation eben nur dann ausführt, wenn der dort "gemerkte" Wert für autoFollow true ist - und ansonsten gar nichts passiert.
Somit könnte man über den Report selber steuern, ob der aktuellen Seite "gefolgt" werden soll. D.h. der Report öffnet sich so lange automatisch wie die Checkbox angehakt ist. Will man das nicht mehr, nimmt man den Haken einfach raus und hat seine Ruhe. Der Vorteil im CC ist hier, dass der Report ja automatisch aktualisiert wird, wenn man den Wert der Checkbox ändert und dadurch auch sofort den geänderten "Status" an den ClientService weitergeben kann.
Sinnvoll wäre wohl noch, den ClientService aus dem DAP nur aufzurufen (und auch den Checkbox-Parameter nur dann rauszugeben) wenn man wirklich im Report ist. Das findest Du raus, indem du dir in der Methode getAspect(...) merkst, ob der Aspekt Reporting angefragt wurde - wenn nicht, bist Du im Hinzufügen-Dialog des FS_INDEX.
Ist vielleicht nicht ganz 100%ig was Du wolltest, aber käme dem denke ich recht nahe.
Viele Grüße
Michael