Search the FirstSpirit Knowledge Base
Hi,
ich habe einige Executables die man mal "zwischendurch" im Arbeitsprozess verwenden kann um Daten mit einem externen System zu synchronisieren. Je nach Anzahl und Art der Daten kann das schon mal etwas länger dauern und bisher sieht das immer so aus, dass man den prozess im CC oder SA anstößt, dann ist eine Weile nichts zu sehen und dann kommt irgendwann ein Fenster mit einer Erfolgs-/Fehlermeldung das ich aus meienr Executable am Ende aufrufe.
Gibt es irgend eine Möglichkeit im CC und im SA zu visualisieren, dass etwas im Hintergrund geschieht und wie weit der Fortschritt gediehen ist? Bisher habe ich nichts dergleichen gefunden.
MfG Marcus
Hallo Markus,
ich halte das für eine total gute Idee. Ich glaube, da gibt es out of the box einfach nicht, daher denke ich, du solltest dafür einfach einen Feature Request erstellen.
Viele Grüße
Martin
Hallo Marcus,
wie Marting schrieb, gibt es keine Out-Of-Box-Lösung.
Allerdings kann man, wenn man das möchte, sich folgenden Workaround in der Executable schaffen (context ist der BaseContext aus der Args-Map):
if (context.is(BaseContext.Env.WEBEDIT)) { // ContentCreator
// Hier muss man sich überlegen
} else if (context.is(BaseContext.Env.PREVIEW)) { // SiteArchitect
// Hier kann man etwas mit Swing bzw. ProgressMonitor machen, da der SiteArchitect auf Swing basiert
}
ProgressMonitor:
https://blogs.oracle.com/CoreJavaTechTips/entry/making_progress_with_swing_s
Für den ContentCreator ist das leider etwas komplizierter, hier müsste man sich etwas ausdenken, wie man den Fortschritt der Aufgabe in in die Vorschau bekommt. Auch hier kann man im FS-Templatecode den Fall Content-Creator isolieren:
$CMS_IF(#global.is("WEBEDIT"))$
$-- Status der Aufgabe auslesen und z.B. in einem Inline-Popup mit JQuery anzeigen -->
$CMS_END_IF$
Wie kann man nun Daten in eine Seite bekommen? Wenn man an den GenerierungsContext kommt, ist das einfach:
if (context instanceof GenerationContext) {
GenerationContext generationContext = (GenerationContext) context;
generationContext.getPageContext().setVariableValue("taskStatus", status);
}
Das Ganze oben ist nur eine grobe Idee die ich so noch nie ausprobiert habe und die Umsetzung hängt auch vom Kontext ab in dem die Executable aufgerufen wird. Vielleicht kommt man auch anders an den PageContext ran? Grob gesagt ist das für den ContentCreator nicht so ganz einfach, weshalb hier ein Feature-Request von Dir nicht schlecht wäre. Man kann aber auch den ContentCreator-Fall so lassen wie er ist und nur im SiteArchitect eine "schöne" Lösung mit Prozessdialog schaffen.
Tipp: Eigentlich sollten zeitintensive Aufgaben in FS nicht per Executable in den Clients, sondern per Auftrag auf dem Server erledigt werden (die dann über ServerManager oder ServerMonitoring beobachtet werden können). Innerhalb eines Auftrages kann man aber wieder mit Executables arbeiten, so dass hier Dein Java-Code wiederverwendet werden kann (ggf. mit Anpassungen).
Grüße Marian
Hi,
ich habe hier mal die "Idee" vorgebracht aber bei 6 Upvotes wird das auf absehbare Zeit vermutlich eher nichts werden
https://community.e-spirit.com/ideas/1661
Ich schaue mir diene Vorschläge bei Gelegenheit mal genauer an, danke.
MfG Marcus