Vorherigen Schritt prüfen

Es soll ein Übergang von a nach b gemacht werden. Dabei wird die Action doSomething aufgerufen.
Ein guter Weg ist in doSomething keine Exception zu werfen.
Besser es wird in einem weiteren Übergang geprüft, ob doSomething das gemacht hat was es soll.

<transition name="to-b" from="a" to="b" with="doSomething">
    <exceptions>
        <exception match="\Alvine\Core\FrameworkException">
            <handler class="\Alvine\Application\Workflow\Transition\Exception\Handler\ThrowAway" />
        </exception>
    </exceptions>
</transition>

Der Status b wird somit fehlerfrei erreicht. Eine Automation leitet den Container an den Übergang to-b-validated.

<rule on="\Alvine\Application\Workflow\Event\EndTransition">
    <conditions>
        <condition class="\Alvine\Application\Workflow\Automation\Condition\IsState">
            <parameters>
                <parameter name="state">b</parameter>
            </parameters>
        </condition>
    </conditions>
    <actions>
        <action class="\Alvine\Application\Workflow\Automation\Action\DoTransition">
            <parameters>
                <parameter name="transition">to-b-validated</parameter>
            </parameters>
        </action>
    </actions>
</rule>

In diesem Übergang wird keine Aktion ausgeführt , es wird nur validiert. In der Validierungsklasse wird die Arbeit von doSomething bewertet. Diese liefert nur true oder false

<transition name="to-b-validated" from="b" to="b-validated" >
    <validations>
        <validation class="\Customisation\Logic\Workflow\Transition\Validation\DoSomething"></validation>
    </validations>
</transition>

Wenn die Validierung false zurück liefert , kann das über das InvalidTransitionValidation Event sicher verarbeitet werden,
da der Status b dann eindeutig ist.

Der neue Status b-error kann dann weiter verarbeitet werden.

<rule on="\Alvine\Application\Workflow\Event\InvalidTransitionValidation">
    <conditions>
        <condition class="\Alvine\Application\Workflow\Automation\Condition\IsState">
            <parameters>
                <parameter name="state">b</parameter>
            </parameters>
        </condition>
    </conditions>
    <actions>
        <action class="\Alvine\Application\Workflow\Automation\Action\DoTransition">
            <parameters>
                <parameter name="transition">to-b-error</parameter>
            </parameters>
        </action>
    </actions>
</rule>

<transition name="to-b-error" from="b" to="b-error" ></transition>