Beispiel: Arbeitsablauf „RecursiveLock“
Dieser Arbeitsablauf zur rekursiven Sperrung von Teilbäumen besteht aus dem Arbeitsablauf und dem zugehörigen Skript „lockrecursive“.
Innerhalb des Skripts wird ein rekursiver Schreibschutz auf dem Element ausgeführt, auf dem der Arbeitsablauf gestartet wurde. Damit dies gelingt, muss zuvor der automatisch gesetzte Schreibschutz des Arbeitsablaufs aufgehoben werden. Dazu wird im Status „WriteLockOff“ zunächst der Schreibschutz entfernt.
Die Checkbox „Schreibschutz“ ist deaktiviert, der Schreibschutz des Arbeitsablaufs wird beim Schalten der Transition „Recursive Lock Test“ nun aufgehoben. Die nachfolgende Aktion „DoRecursiveLock“ wird automatisch ausgeführt und ist mit dem Skript „lockrecursive“ verknüpft.
Über das Skript kann nun ein rekursiver Schreibschutz auf dem Element gesetzt werden:
// set recursive lock
se = context.getElement();
se.setLock(true);
text = "Teilbaum gesperrt!";
requestOperation = context.requireSpecialist(OperationAgent.TYPE).getOperation(RequestOperation.TYPE);
requestOperation.setKind(RequestOperation.Kind.INFO);
requestOperation.addOk();
requestOperation.perform(text);
Die Elemente werden rekursiv gesperrt, dem Bearbeiter wird ein Dialog mit der Meldung „Teilbaum gesperrt“ angezeigt.
Beim Bestätigen der Meldung wird das Skript weiter ausgeführt, der rekursive Schreibschutz auf dem Teilbaum wird wieder aufgehoben.
// reset recursive lock
se.setLock(false);
Im nächsten Schritt muss der einfache Schreibschutz auf dem Element wiederhergestellt werden:
// non recursive lock, normal state during workflow
se.setLock(true, false);
context.doTransition("->WriteLockOn");
Das ist notwendig, um die nachfolgende Transition innerhalb des Arbeitsablaufs schalten zu können.
Abschließend muss der Standard-Schreibschutz des Arbeitsablaufs wiederhergestellt werden. Dazu wird im Status „WriteLockOn“ die Checkbox „Schreibschutz“ wieder aktiviert:
Skript „lockrecursive“:
//!Beanshell
import de.espirit.firstspirit.common.gui.*;
import de.espirit.firstspirit.ui.operations.RequestOperation;
import de.espirit.firstspirit.agency.OperationAgent;
// set recursive lock
se = context.getElement();
se.setLock(true);
text = "Teilbaum gesperrt!";
requestOperation = context.requireSpecialist(OperationAgent.TYPE).getOperation(RequestOperation.TYPE);
requestOperation.setKind(RequestOperation.Kind.INFO);
requestOperation.addOk();
requestOperation.perform(text);
// reset recursive lock
se.setLock(false);
// non recursive lock, normal state during workflow
se.setLock(true, false);
context.doTransition("->WriteLockOn");