XML¶
Die Konfigurationsdatei eines Workflows besteht aus einer XML-Datei. Die Struktur und die einzelnen Tags sind im folgenden genauer beschrieben.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Definition des Workflows -->
<workflow>
<!-- Mit diesem Tag kann der Eintritszustand in den Workflow festgelegt werden.
Besitzt ein Objekt kein Status, so wird dieser Status angenommen.
class, state-class und step-class sind optional.
-->
<admission state="created"
step="create"
class="\Alvine\Application\Workflow\Admission"
state-class="\Alvine\Application\Workflow\State"
step-class="\Alvine\Application\Workflow\Step"
container-class="\MyNamespace\Item" />
<!-- Definition aller vorhandenen Status die ein Objekt annehmen kann -->
<states>
<!-- Ein Status muss einen Namen besitzen, es kann eine von \Alvine\Application\Workflow\State
abgeleitete Klasse angegeben werden. -->
<state name="created" class="\Alvine\Application\Workflow\State" />
<state name="start" />
<state name="end" />
</states>
<!-- Steps definieren die Aktionen, die beim Übergang von einem Status,
zu einem anderem Status gegangen werden. -->
<steps>
<!-- Jeder Step muss einen eindeutigen Namen enthalten, zusätzlich
kann noch eine von \Alvine\Application\Workflow\Step abgeleitetet Klasse
definiert werden. -->
<!-- Dieser Step wird in <admission> referenziert und beim Erstellen eines
Containers getriggert. -->
<step name="create">
<actions>
<!-- Es können Aktionen, die beim Übergang ausgeführt werden, definiert werden. -->
<action class="\MyNamespace\MyCreateAction" />
</actions>
</step>
<step name="step1" class="\Alvine\Application\Workflow\Step">
<actions>
<!-- Es können Aktionen, die beim Übergang ausgeführt werden, definiert werden. -->
<action class="\MyNamespace\MyAction" />
</actions>
<validations>
<!-- Mittels Validatoren kann geprüft werden, ob ein Statusübergang möglich ist. -->
<validation class="\MyNamespace\MyValidation" />
</validations>
</step>
<step name="step2">
<actions>
<action class="\MyNamespace\MyAction" />
</actions>
</step>
</steps>
<!-- Automation des Workflows;
Mit diesen Regeln lassen sich unabhänging von einem
Übergang Änderungen an einem Container vornehmen -->
<automation>
<rules>
<!-- Jede Regel verfügt über Bedingungen (die alles zutreffen müssen)
und Aktionen, die ausgeführt werden. Diese Regel wird
automatisch nach jeder Transition (\Alvine\Application\Workflow\Event\EndTransition)
ausgeführt -->
<rule class="\Alvine\Application\Workflow\Automation\Rule"
name="my-rule"
on="\Alvine\Application\Workflow\Event\EndTransition">
<conditions>
<!-- Beide Bedingungen müssen erfüllt sein; die Methode müssen
true zurück geben -->
<condition class="\MyNamespace\AutomationCondition1" />
<condition class="\MyNamespace\AutomationCondition2" />
</conditions>
<actions>
<!-- Diese Aktionen werden ausgeführt -->
<action class="\MyNamespace\AutomationMyAction1" />
<action class="\MyNamespace\AutomationMyAction2" />
</actions>
</rule>
</rules>
</automation>
<!-- transitions definieren eine Zustandsänderung eines Objektes. -->
<transitions>
<!-- Ein Übergang hat einen eindeutigen Namen und einen Zielstatus.
Wird kein Ausgagsstatus (from) definiert, so ist dieser Übergang
von allen Status aus möglich. -->
<transition name="transfer1" to="start" />
<!-- Zusätzlich kann noch ein Step und ein Ausgangsstatus definiert werden.
Es kann eine von \Alvine\Application\Workflow\Transition abgeleitete Klasse verwendet werden. -->
<transition name="transfer2" class="\Alvine\Application\Workflow\Transition" from="start" to="end" with="step2">
<!-- Überprüfung vor dem Übergang -->
<validations>
<!-- Mittels Validatoren kann geprüft werden, ob ein Statusübergang möglich ist. -->
<validation class="\MyNamespace\MyTransitionValidation" />
</validations>
<!-- Fehler / Exceptions abfangen -->
<exceptions>
<exception match="\Alvine\Core\FrameworkException" >
<!-- Exception ignorieren -->
<handler class="\Alvine\Application\Workflow\Transition\Exception\Handler\ThrowAway" />
</exception>
</exceptions>
</transition>
</transitions>
</workflow>