Search the FirstSpirit Knowledge Base
Hallo zusammen! Wir versuchen über einen Workflow derzeit einen freigegebenen Datensatz zu publizieren. Nach dem Workflow wird jedoch der zuvor freigegebene Datensatz wieder auf nicht freigegeben gesetzt. Die Methode entity.isReleased() gibt entsprechend bei freigegebenen Datensätzen immer ein false zurück.
Über welchen Weg kann man denn nun den echten Freigabestand herausfinden?
Hier der relevante Teil des Scripts:
Entity entity = workflowable.getEntity();
context.logInfo(entity.isReleased); //gibt auch bei freigegebenen Datensätzen ein false
(Verwendet wird die Version 5.0.210.55630)
So, folgende Zeilen sollten dafür sorgen den ReleaseStatus zu bekommen, der vor dem Start das Workflows aktiv war.
historyEntities = entity.getSession().getHistory(entity.getKeyValue());
for(Entity historyEntity : historyEntities)
{
if(!historyEntity.equals(entity)
{
isReleased = historyEntity.isReleased();
break;
}
}
Bereits das Starten des Workflows ändert den Status des Datensatzes auf "nicht freigegeben". Der Status im Skript ist also "der echte" Freigabestand.
Und wie gelangt man an den Status vor dem Starten? Das letzte Elemement von der History? Oder wurde die History mit starten des Worklfows auch geändert?
Und welche Möglichkeit gibt es dennoch herauszufinden, ob der Datensatz vor dem Aufruf des Workflows bereits freigegeben war?
Man kann die Historie des Elements befragen - oder man wählt einen ganz anderen Ansatz. Entweder man integriert das Publizieren in den Freigabeprozess (oder die Freigabe in den Publizierungsprozess). Das ist das übliche Vorgehen. Oder man macht einen Publizierungs-Workflow, der nicht auf dem Datensatz gestartet wird (also einen Workflow, der nur in den Nutzdaten einen Verweis auf das freizugebende Element hat).
Danke! Über den Workflow soll ja gar nichts freigegeben werden. Sondern anhand des aktuellen Status (freigeben/nicht freigegeben) werden Nachrichten an die UX Bridge versendet. Somit fällt das übliche Vorgehen aus, da der Status des aktuellen Datensatzes eben nicht verändert werden soll. Mal schauen was die Historie so hergibt.
So, folgende Zeilen sollten dafür sorgen den ReleaseStatus zu bekommen, der vor dem Start das Workflows aktiv war.
historyEntities = entity.getSession().getHistory(entity.getKeyValue());
for(Entity historyEntity : historyEntities)
{
if(!historyEntity.equals(entity)
{
isReleased = historyEntity.isReleased();
break;
}
}