arnbae
I'm new here

Freigabe von Datenquellen per Script im Workflow

Hallo,

folgende Frage: In einem Workflow lasse ich ein Script laufen, welches einen Datensatz der Datenbank freigeben soll. Im Kern tut es folgendes:

     // Content2 holen, auf dem der Workflow gestartet wurde

     cc = context.getTask().getWorkflowable().getContent();

     cc.refresh();

     // Entity / Zeile holen, auf der der Workflow gestartet wurde

     ce = context.getTask().getWorkflowable().getEntity();

     ce.refresh();

     // Wenn noch nicht freigegeben, dann freigeben

     if (!ce.isReleased()){

          print(ce.getState());

          se.release(ce,"Workflow");

     }

Ab und zu mal klappt das, aber ab und zu kommt auch folgender Fehler. Hat jemand eine Idee, woran das liegen kann? Und warum kann man die ganzen famosen Freigabe-Optionen der Admins nicht auch den Usern freischalten (oder hab ich da was übersehen?) Smiley Wink

Danke & Grüße,

Arndt

ERROR 15.03.2011 16:47:55.395 (de.espirit.firstspirit.client.action.WorkflowAction): Error creating task - de.espirit.or.ORException: Release error: No entity with the id (de.espirit.or.impl.IdentifierImpl$TemporalIdentifierUC@988bc4fc{users,FS_ID=192,FS_VALID_FROM=1300204196250,FS_VALID_TO=9223372036854775807,FS_RELEASE_TO=0}) 9223372036854775807

FSVersion=4.2.219.38784#1870;JDK=1.5.0_14 32bit Sun Microsystems Inc.;OS=Windows XP 5.1 x86;Date=15.03.2011 16:47:55

de.espirit.or.ORException: Release error: No entity with the id (de.espirit.or.impl.IdentifierImpl$TemporalIdentifierUC@988bc4fc{users,FS_ID=192,FS_VALID_FROM=1300204196250,FS_VALID_TO=9223372036854775807,FS_RELEASE_TO=0}) 9223372036854775807

          at de.espirit.or.impl.TemporalCommandHandler.handle(TemporalCommandHandler.java:269)

          at de.espirit.or.impl.ReleaseCommand.accept(ReleaseCommand.java:42)

          at de.espirit.or.impl.AbstractSessionHandler.commit(AbstractSessionHandler.java:599)

          at de.espirit.or.impl.AbstractSessionHandler.commit(AbstractSessionHandler.java:74)

6 Replies
gockel
Crownpeak employee

Wenn ich das richtig verstehe starten sie den Workflow auf einem Datensatz im Bereich Datenquellen und es soll genau der Datensatz freigegeben werden, auf dem der Workflow auch gestartet wurde.

Warum verwenden Sie dafür nicht die FS-Funktionalitäten des Workflows, wie in dem Beispielworkflow im Mithras Energy Demoprojekt?

release_cs.png

Diesen Workflow können sie dann auch individuell den verschiedenen Benutzergruppen zur Verfügung stellen (Arbeitsablaufrechte)

Hallo,

weil ich einen einzigen Workflow für "Rekursiv" und "Einzeln freigeben" gebaut habe. Dabei bin ich zu dem Schluß gekommen, dass beides in einem einzigen Workflow nur mit einem Script hinzubekommen ist. Das mit den Datenbanken ist dann später dazu gekommen. Die Aufgabenstellung entspringt also mitunter historischen Gründen Smiley Wink

Der Hinweis auf die normalen Mechanismen ist sehr hilfreich, das werde ich auf jeden Fall als Workaround verwenden. Trotzdem würde es mich natürlich interessieren, ob Sie da eine These haben, warum die beschriebene Vorgehensweise nicht passt - meine Redakteure haben sich schon so an den bisherigen Workflow gewöhnt.

Herzliche Grüße,

Arndt Bär

0 Kudos
gockel
Crownpeak employee

Trotzdem würde es mich natürlich interessieren, ob Sie da eine These haben, warum die beschriebene Vorgehensweise nicht passt

Der typische Fall, bei dem diese Exception auftritt, ist der Zustand, dass der freizugebene Datensatz auf dem Server bereits geslöscht wurde. Dies ist im Multiuserbetrieb ein valider Betriebszustand und sollte im Skript entsprechend behandelt werden.

0 Kudos

Das ist leider definitiv nicht der Fall - es gibt momentan in der Testdatenbank nur 4 Datensätze, und die sind alle da.

Ich meine aber etwas anderes rausgefunden zu haben: Die Exception scheint gar nicht meiner Release-Aktion zu entspringen, sondern dem FS-eigenen Release-Mechanismus. Beim Workflow war nämlich "Freigeben" im letzten Schritt angehakt (um den FS-Workflow-eigenen Mechanismus zu verwenden, siehe Ihren Hinweis). Kann es sein (meine These), dass FS beim finalen Freigeben des einzelnen Datensatzes die Exception wirft, wenn ich den vorher schon per Script freigegeben hatte?

Ich habe mein Script jetzt folgendermaßen modifiziert:

  • "Freigabe" durch FS ist angehakt
  • Wenn ich Einzelelemente freigebe (Seiten/Medien/Datensätze), verlasse ich mich voll auf FS
  • Wenn ich Datensätze komplett freigebe (wie Admin: "Alle Zeilen freigeben"), lasse ich den selektierten Datensatz aus
  • Wenn ich Medien/Seiten rekursiv per Script freigebe, muss ich auf den selektierten Knoten nachher wieder ein Lock setzen, weil FS das so erwartet

Alternativ hätte ich auch einfach die "Freigabe"-Option im Workflow ausschalten können, aber dann hätte ich im Page/Site/Mediastore über die Kinder rekursieren müssen - jetzt benutze ich das Rekursiv-Flag der .release-Methode 🙂

Macht das als These Sinn? Die Erprobung in der Praxis wird es weisen.

Grüße,

Arndt Bär

0 Kudos
hoebbel
Crownpeak employee

Hallo Herr Bär,

arnbae schrieb:

...

Ich habe mein Script jetzt folgendermaßen modifiziert:

  • "Freigabe" durch FS ist angehakt
  • Wenn ich Einzelelemente freigebe (Seiten/Medien/Datensätze), verlasse ich mich voll auf FS
  • Wenn ich Datensätze komplett freigebe (wie Admin: "Alle Zeilen freigeben"), lasse ich den selektierten Datensatz aus
  • Wenn ich Medien/Seiten rekursiv per Script freigebe, muss ich auf den selektierten Knoten nachher wieder ein Lock setzen, weil FS das so erwartet

Alternativ hätte ich auch einfach die "Freigabe"-Option im Workflow ausschalten können, aber dann hätte ich im Page/Site/Mediastore über die Kinder rekursieren müssen - jetzt benutze ich das Rekursiv-Flag der .release-Methode 🙂

Macht das als These Sinn? Die Erprobung in der Praxis wird es weisen.

Das klingt für mich erst einmal einleuchtend.

Nur warum verzweigen Sie im Skript nicht einfach auf zwei verschiedene Endpunkte? Wenn Sie per Skript freigegeben, dann schalten Sie eine Transition zu einem Endpunkt ohne Freigabe.

Wenn Sie die FirstSpirit Mechanismen nutzen wollen und somit nicht per Skript freigegeben, dann schalten Sie zu einem Endpunkt mit Freigabe.

Viele Grüsse aus Dortmund,

  Holger Höbbel

Wenn meine These stimmt, dann wäre das sicherlich der Königsweg.

Um ihre Warum-Frage zu beantworten: Weil sich das mit der Zeit so entwickelt hat :smileysilly: => "Historisch gewachsene Lösung ..."