Beispiel: Arbeitsablauf „ContentDeleteDemo“
Neben dem Löschen von einzelnen Elementen und Teilbäumen (siehe Beispiel: Delete), ist auch das Löschen von strukturierten Daten über einen Arbeitsablauf möglich.
Dazu muss innerhalb des Arbeitsablaufs (im Skript) zwischen normalen Elementen („StoreElement“, z. B. Seiten, Medien, Seitenreferenzen) und „Entitäten“ unterschieden werden.
Im Skript wird diese Information über den Kontext des Arbeitsablaufs (WorkflowScriptContext) geholt:
workflowable = context.getWorkflowable()
Die Methode getWorkflowable() liefert zurück, ob es sich beim Element auf dem der Arbeitsablauf gestartet wurde, um ein „StoreElement“, beispielsweise ein Medium, oder um eine „Entität“, in Form eines Datensatzes handelt. Dementsprechend kann beispielsweise die Ausgabe des Skripts angepasst werden:
if (workflowable instanceof ContentWorkflowable) {
...
} else {
...
}
Im Beispiel wird die Ausgabe, abhängig vom Kontext gesteuert auf dem der Arbeitsablauf gestartet wurde. Wird die Lösch-Funktionalität auf einem Datensatz gestartet, liefert das Skript die Ausgabe:
Das Löschen erfolgt in diesem Beispiel ebenfalls direkt über den WorkflowScriptContext:
workflowable.delete();
Die Methode delete wird hier auf dem Objekt Workflowable und nicht, wie im Beispiel: Nachrichten auf dem StoreElement aufgerufen. Über diese Delete-Methode kann sowohl ein StoreElement als auch ein Datensatz (Entity) gelöscht werden.
Der Arbeitsablauf zum Löschen von Entitäten besteht aus dem Arbeitsablauf und dem zugehörigen Skript „deletecontentdemo“ (zum Löschen einzelner Entitäten)
Nach erfolgreichem Löschen wird der Arbeitsablauf automatisch in den nachfolgenden Status „Ende“ weitergeschaltet.
Skript „deletecontentdemo“
//!Beanshell
import de.espirit.firstspirit.access.*;
import de.espirit.firstspirit.access.store.contentstore.*;
import de.espirit.firstspirit.ui.operations.RequestOperation;
import de.espirit.firstspirit.agency.OperationAgent;
workflowable = context.getWorkflowable();
if (workflowable instanceof ContentWorkflowable) {
message = "Entity Löschen:\n content=" + workflowable.getContent().getName() + "\n entity="
+ workflowable.getEntity().getKeyValue();
requestOperation = context.requireSpecialist(OperationAgent.TYPE).getOperation(RequestOperation.TYPE);
requestOperation.setKind(RequestOperation.Kind.INFO);
requestOperation.addOk();
requestOperation.perform(message);}
else {
message = "StoreElement Löschen:\n store=" + workflowable.getStore().getName() + "\n id=" + workflowable.getId();
requestOperation = context.requireSpecialist(OperationAgent.TYPE).getOperation(RequestOperation.TYPE);
requestOperation.setKind(RequestOperation.Kind.INFO);
requestOperation.addOk();
requestOperation.perform(message);
}
workflowable.delete();
context.doTransition("->Ende");