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>