TRomey
I'm new here

Zeitlichgesteuerte Veröffentlichung

Jump to solution

Hallo liebe Community,

ich habe folgende Anforderung, die ich gerne in FirstSpirit 5 umsetzen würde und wäre dankbar für ein paar Tipps und Tricks:

Eine schon vor ein paar Tagen vom Redakteur vorbereitete Seite bzw. vielleicht sogar ein ganzer Teilbaum in der Struktur soll ab einem bestimmten Datum (z.B. im Metadaten-Template pflegbar) automatisch freigegeben werden, damit die Inhalte veröffentlicht werden können. Eine Veröffentlichung der Inhalte darf aber nicht passieren, wenn der Redakteur alles freigegeben hat und das Datum noch nicht erreicht ist. Es reicht, wenn die Datumsüberprüfung nur einmal am Tag passiert (vor dem Volldeployment).

- Die zeitgesteuerte Verknüpfung ist aus Kundensicht keine Option.

- Ähnliche Beiträge zu diesem Thema waren nicht außreichend hilfreich.

Lässt sich das in FS umsetzen? Ideal wäre vielleicht ein Arbeitsablauf. Dazu die Frage, was genau das Termin-Feld im Reiter Allgemein bewirkt/ bezwegt. Offensichtlich werden die Inhalte freigegeben, trotz Terminauswahl in der Zukunft. Die Anforderung wäre umgesetzt, wenn das mit der Terminauswahl klappen würde.

Gruß,

Thiemo

0 Kudos
1 Solution

Accepted Solutions
mbergmann
Crownpeak employee

Hallo Thiemo,

versuch mal vor den Generierungstask aber nach dem Freigabeskript noch ein Skript mit folgendem Code zu legen:

context.setStartTime(new Date());

Ich vermute das beobachtete Verhalten kommt daher, dass für die Generierung der Zeitpunkt maßgeblich ist, zu dem der komplette Auftrag gestartet wird. Da aber erst im Rahmen des Auftrages die relevante Änderung (nämlich die Freigabe) gemacht wird, läuft die Generierung auf einem "veralteten" Stand (in dem das Objekt noch nicht freigegeben war).

Viele Grüße

Michael

View solution in original post

0 Kudos
9 Replies
mbergmann
Crownpeak employee

Hallo Thiemo,

Dazu die Frage, was genau das Termin-Feld im Reiter Allgemein bewirkt/ bezwegt. Offensichtlich werden die Inhalte freigegeben, trotz Terminauswahl in der Zukunft. Die Anforderung wäre umgesetzt, wenn das mit der Terminauswahl klappen würde.

In das Termin-Feld kann man eine Deadline eintragen, bis wann der nächste Schritt erledigt sein soll. Ist dieser Termin überschritten, sendet FirstSpirit eine Erinnerungsmail an die als zuständig eingetragene Gruppe. Das passt also nicht ganz zu Deiner Anforderung.

Eine Veröffentlichung der Inhalte darf aber nicht passieren, wenn der Redakteur alles freigegeben hat und das Datum noch nicht erreicht ist. Es reicht, wenn die Datumsüberprüfung nur einmal am Tag passiert (vor dem Volldeployment).

"Kein Veröffentlichen trotz Freigabe" wäre hier kein guter Weg, immerhin wird die Seite während der Generierung als "vorhanden" betrachtet. Problematisch wird das in Verbindung mit Links, Navigationen usw.

Besser wäre das Abbilden über einen Workflow. Als Hintergrundinfo vorab: In FS5 können Workflows auch ohne GUI-Kontext geschaltet werden, siehe WorkflowAgent#process.

Grobe Idee hierzu:

Die Redakteure starten den Freigabeworkflow, der aber - bevor die eigentliche Freigabe erfolgt - noch eine automatische Skriptaktion hat. Im entsprechenden Skript wird - wenn das Datum schon erreicht ist - einfach "normal" weitergeschaltet, ansonsten in einen anderen Zustand "wartet auf Erreichen des Veröffentlichungsdatums". Um einem Redakteuer auch die Möglichkeit zu geben, die Freigabe erneut zu versuchen, kann man an diesen Status  eine manuelle Aktion mit Skript hängen. Diese macht letztlich dasselbe wie die automatische vorher (man müsste sogar dasselbe Skript benutzen können): Ist das Datum erreicht, wird weitergeschaltet, wenn nicht, gehts wieder zurück in den Wartezustand.

Jetzt könnte man zur Automatisierung vor die Vollgenerierung noch ein Skript hängen, das die entsprechenden Objekte sucht und einfach die Transition zur manuellen Skriptaktion mit dem Test ausführt. Womit man dann - falls das Datum erreicht ist - das Objekt freigegeben hätte.

Weitere Infos zum Schalten von Workflows per API im FirstSpirit Handbuch für Entwickler (Komponenten), Kapitel 3.12.3.6 (Das Interface WorkflowAgent).

Viele Grüße

Michael   

Hi Michael,

vielen Dank für den Tipp und die Aufklärung bezüglich der Termin-Eingabe.

Gruß,

Thiemo

0 Kudos

Hallo Michael,

testweise habe ich versucht den Ansatz oben umzusetzen. Dazu habe ich einen Workflow angelegt (s. unten). Das Skript "check_date" macht nichts anderes als das in den Metadaten hinterlegte Datum mit dem heutigen Datum zu vergleichen. Wenn das Datum gültig ist (d.h. heute oder in der Vergangenheit), dann wird direkt freigegeben, also context.doTransition("freigeben"); Das klappt so auch einwandfrei (Objekt ist danach freigegeben).

Wenn das Datum nicht gültig ist, wird das Objekt in eine Art Wartezustand gebracht. Ein Auftragsskript vor dem Volldeployment (s. unten) schiebt das Objekt wieder der "Freigabe prüfen"-Aktivität zu. Wenn das Datum jetzt gültig ist, soll das Objekt freigegeben werden.

Das Auftragsskript läuft einwandfrei durch und steht auf grün. In der Arbeitsabläufe-Übersicht ist ersichtlich, dass der Endzustand ("Ende") erreicht wurde. Das Problem ist, dass das Objekt NICHT freigegeben wurde und immer noch in der Inhalteverwaltung blau statt schwarz ist. Was mache ich hier falsch? FS-Version: 5.0.210.55494

workflow.png

Übersicht.png

Das Auftragsskript (ohne import Statements usw.):

storeAgent = context.requestSpecialist(StoreAgent.TYPE);

workflowAgent = context.requestSpecialist(WorkflowAgent.TYPE);

pageStore = (PageStoreRoot)storeAgent.getStore(Type.PAGESTORE);

List<StoreElement> children = pageStore.getChildren(StoreElement.class, true).toList();

for (StoreElement child : children) {

    

     if (child instanceof Page) {

         

          if (child.hasTask()) {

         

               task = child.getTask();

               taskState = task.getTaskState();

               state = taskState.getModelState();

               transition = state.getTargetTransitions().get(0);

              

               workflowProcessContext = workflowAgent.process(task, transition);   

               nextTransition = workflowProcessContext.getTransitions().get(0);

               workflowProcessContext.doTransition(nextTransition);

          }

     }

}

0 Kudos

Hallo Thiemo,

findest du in der fs-server.log Logdatei für den Zeitraum der Freigabedurchführung ERROR Logs, z.B.

...

Caused by: java.lang.SecurityException: changes not allowed for current connection

...

??

Die Freigabe durch einen Auftrag (Benutzer ist in diesem Fall SYSTEM wie aus deinem Screenshot ersichtlich) ist meines Wissen nur mit eingerichteter Verbindung eines Benutzers mit entsprechenden Freigaberechten möglich. Also in dem Auftragsskript eine eigene Verbindung konfigurieren. Vielleicht liegt es daran..

Gruß,

Hendrik

Hallo Hendrik,

ich habe keine SecurityException bekommen und das Skript wird auch nicht abgebrochen. Ich habe dein Ratschlag trotzdem befolgt und es mal mit eigener Verbindung versucht und habe folgendes dabei beobachtet:

- Das Ergebnis schien anfangs gleich zu sein, d.h. Arbeitsablauf lief durch, aber keine Freigabe.

- Nachdem ich den Client aktualisiert habe, verschwand die blaue Schrift und war wieder normal schwarz, folglich müsste es eigentlich freigegeben sein. Auf dem Staging Server war aber noch der alte Stand.

- Dann habe ich ganz normal nochmal veröffentlicht (nicht über Arbeitsablauf) und der neue Stand war auch auf dem Staging Server. Also muss der Arbeitsablauf das Objekt freigegeben haben.

Das ist aber nicht ganz das Verhalten, das ich erwartet hatte. Ich habe das Skript vor generate, Deployment komplett, rsync, etc. gelegt. Da gehe ich davon aus, dass der Stand eigentlich doch freigegeben und sofort publiziert wird und nicht beim zweiten Mal...

Gibt's da eine Lösung für?

Gruß,

Thiemo

0 Kudos
mbergmann
Crownpeak employee

Hallo Thiemo,

versuch mal vor den Generierungstask aber nach dem Freigabeskript noch ein Skript mit folgendem Code zu legen:

context.setStartTime(new Date());

Ich vermute das beobachtete Verhalten kommt daher, dass für die Generierung der Zeitpunkt maßgeblich ist, zu dem der komplette Auftrag gestartet wird. Da aber erst im Rahmen des Auftrages die relevante Änderung (nämlich die Freigabe) gemacht wird, läuft die Generierung auf einem "veralteten" Stand (in dem das Objekt noch nicht freigegeben war).

Viele Grüße

Michael

0 Kudos

Hallo,

nur eine kurze Ergänzung Smiley Happy

Michael Bergmann schrieb:

[...]

Ich vermute das beobachtete Verhalten kommt daher, dass für die Generierung der Zeitpunkt maßgeblich ist, zu dem der komplette Auftrag gestartet wird. [...]

Diese Vermutung ist richtig. Die Erklärung liefert dieses Blogposting (das sich jedoch noch auf FS4 bezog): KLICK

Viele Grüße

Michaela

Vielen Dank für die sehr nützlichen Hinweise!

Bezüglich der Aktualisierung der Schriftfarben in den Verwaltungen (bleibt nach Ablauf auf blau stehen anstatt wieder schwarz zu werden): Gibt es da auch eine Lösung ohne extra den Client manuell zu aktualisieren? - eine Art repaint()-Methode. Konnte da in der API so nichts finden. Dieser Punkt ist nur Kosmetik, aber wäre schöner für Redakteure.

0 Kudos

Meines Wissens gibt es keine Möglichkeit serverseitig einen Refresh im Java Client auszulösen, das muss manuell durchgeführt werden. Aber immerhin ist es nicht möglich das Objekt zu bearbeiten oder den augenscheinlich noch vorhandenen Workflow weiter zu prozessieren da der Java Client merkt das das Objekt nicht mehr aktuell ist...