markus_reinsch
I'm new here

Release für Entity Objekt mit allen Abhängigkeiten

Hallo,

gibt es eine Methode um eine Entity mit allen Abhängigkeiten (insbesondere Medien) in einem Workflowskript zu releasen?

Entity.release() und

Content2.release(Enttiy)

führen nur ein Release auf der Entity selber durch.

AccessUtil funktioniert hier nicht ...

Die Standardworkflowfunktionalität (Endstatus mit freigeben) hilft auch nicht und kommt nicht in Frage,

da im gleichen Workflow auch noch eine Generierung gestartet werden soll.

Viele Grüße

4 Replies
hoebbel
Crownpeak employee

Hallo Herr Reinsch,

ich hatte das auch mal benötigt und damals das über ein entsprechendes Skript gelöst, welches über die ausgehenden Referenzen iteriert und alle referenzierten Medien freigibt.

Hier mal das Skript ohne geprüft zu haben, ob es in der aktuellen Version noch ohne Warnung läuft...

import de.espirit.firstspirit.access.store.Store;

e = context.getStoreElement();

ds = context.getWorkflowable().getEntity();

schema = e.getSchema();

session = ds.getSession();

refs = schema.getOutgoingReferences(ds);

context.logInfo("" + refs.getClass());

for (int i = 0; i < refs.length; i++) {

try {

    if(refs[i].getReferencedObject().getStore().getType() == Store.Type.MEDIASTORE) {

        medium = refs[i].getReferencedObject();

        context.logInfo("releasing medium " + medium.getUid() + " [id=" + medium.getId() + "]");

        medium.setLock(true,false);

        medium.release(false);

        medium.setLock(false,false);

    }

} catch (Exception e) {

    context.logError("Exception", e);

}

}

session = ds.getSession();

session.release(ds);

session.commit();

context.doTransition("end");

Viele Grüsse aus Dortmund,

  Holger Höbbel

Hallo,

vielen Dank schon einmal!

Noch zwei Fragen dazu:

  1. Wenn ich sicherstellen möchte, dass alle Ordner freigegeben sind (im Client ist das die Option: Erreichbarkeit sicherstellen Vaterkette), muss ich diese Ordner dann wohl auch einzeln durchiterieren und freigeben?
  2. Bislang habe ich Entity Objekte immer über das Content2 Objekt released anstelle die Session zu verwenden.
    Besteht hier ein technischer Unterschied oder ist dies nur "Geschmackssache"?
    Also:
    content2 = context.getTask().getWorkflowable().getContent();
    entity = context.getStoreElement()
    content2.release(entity)
0 Kudos

Hallo Herr Reinsch,

Markus Reinsch schrieb:

Wenn ich sicherstellen möchte, dass alle Ordner freigegeben sind (im Client ist das die Option: Erreichbarkeit sicherstellen Vaterkette), muss ich diese Ordner dann wohl auch einzeln durchiterieren und freigeben?

Oder einfach über die Serverfunktionalität freigegeben und dort releaseParentPath auf true setzen:

AccessUtil.release(storeElement, checkOnly, releaseParentPath, recursive, dependentType)

Markus Reinsch schrieb:

Bislang habe ich Entity Objekte immer über das Content2 Objekt released anstelle die Session zu verwenden.
Besteht hier ein technischer Unterschied oder ist dies nur "Geschmackssache"?
Also:

content2 = context.getTask().getWorkflowable().getContent();
entity = context.getStoreElement()
content2.release(entity)



Ich verwende gewöhnlich die Freigabe über die Session, da ich dann nicht darauf angewiesen bin, dass das entsprechende Content2 Objekt verfügbar ist [Bei der Freigabe über einen Workflow sollte dies aber keine Rolle spielen Smiley Wink]. Welche Methode sinnvoller oder performanter ist, kann ich nicht beantworten.

Viele Grüsse aus Dortmund,

  Holger Höbbel

Hallo,

Oder einfach über die Serverfunktionalität freigegeben und dort releaseParentPath auf true setzen:

AccessUtil.release(storeElement, checkOnly, releaseParentPath, recursive, dependentType)

Leider funktioniert AccessUtil.release() nicht im Workflow:

siehe https://community.e-spirit.com/thread/2602

Haben Sie noch eine andere Idee für releaseParentPath über das Api?

Viele Grüße