Zum Inhalt

Erstellen von Beziehungen

Beispiel XML

´´´xml <?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<!-- Status für neue Elemente -->
<admission state="new" container-class="\Alvine\Application\Platform\Logic\Workflow\Container\Commerce\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="new" />
    <state name="init" />
    <state name="dataloaded" />
    <state name="relationcreated" />
    <state name="invaliditemdata" />
    <!-- das Proudkt wird nicht an diesen Kanal ausgespielt -->
    <state name="ignored" />
</states>

<automation>
    <rules>
        <!--

            Wenn eine Validierung eines Schrittes fehlschlägt UND den Status "init" hat 
            Wird das Produkt ignoriert

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

        Nach dem Init des Containers, werden die Produkt Daten geladen

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

           Nachdem die Daten geladen wurden, wird vorher geprüft ob die Stammdaten passen,
           wenn nicht muss der Status invaliditemdata gesetzt werden und der Kunde muss darüber informiert werden

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

            Nachdem die Daten geladen wurden, werden die Relationen erstellt

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


<steps> 
    <!--

    Container Eigenschaften setzten

    -->
    <step name="step-container-init">
        <actions>
            <action class="\Alvine\Application\Platform\Logic\Workflow\Action\Container\SetProperties">
                <parameters>
                    <parameter name="company" >1</parameter>
                    <parameter name="locale" >de</parameter>
                </parameters>
            </action>
        </actions>
    </step>
    <!--

    Item Daten in den Container laden 
    Es wird vorher geprüft, ob das Produkt in eine Relation aufgenommen werden soll
    --> 
    <step name="step-load-data" >
        <validations> 
            <!-- das Produkt darf kein Relation Produkt sein -->
            <validation class="\Alvine\Application\Platform\Logic\Workflow\Step\Validation\Channel\IsNotRelationItem" />   
            <!-- Darf das Produkt an den Kanal ausgespielt werden -->      
            <validation class="\Alvine\Application\Platform\Logic\Workflow\Step\Validation\Channel\IsValid" />         
        </validations>  
        <actions>
            <action class="\Alvine\Application\Platform\Logic\Workflow\Action\Builder\Datasource\SetDataset">
                <parameters>
                    <!-- 
                        Die Datasource muss alle Daten bereit stellen die das Relation Item beim anlegen haben muss
                        diese Daten werden kopiert 
                    -->
                    <parameter name="datasource">\Customisation\Builder\DataSource\Commerce\SymbionetItem</parameter>
                    <parameter name="datasetKey">item</parameter>
                </parameters>
            </action>
        </actions>
    </step>
    <!--

      Erstellen der Beziehung

    -->
    <step name="step-create-relation" > 
        <validations> 
            <!-- 
                Prüfung ob alle Daten für eine Relation vorhanden sind  
                hier in diesem Beispiel wird nur geprüft ob das Item geladen wurde
            -->
            <validation class="\Alvine\Application\Platform\Logic\Workflow\Step\Validation\Commerce\Item" />         
        </validations>  
        <actions>
            <action class="\Alvine\Application\Platform\Logic\Workflow\Action\Channel\CreateRelations" >
            </action>
        </actions>
    </step>  
    <!--

        Kunden infomieren, das etwas falsch gelaufen ist

    -->
    <step name="step-inform-customer"> 
        <actions>
            <action class="\Alvine\Application\Platform\Logic\Workflow\Action\Communication\Mail" >
                <parameters>
                    <parameter name="to">[email protected]</parameter>
                    <parameter name="subject">Fehler - Produkt ist unvollständig</parameter>
                    <parameter name="documentContext">\Alvine\Application\Platform\Commerce\Document\Context\Mail\Workflow\Commerce\Item\Incomplete</parameter>
                </parameters>
            </action>
        </actions>
    </step>
</steps>



<transitions>

    <!-- Container initalisieren -->
    <transition name="transition-to-init" from="new" to="init" with="step-container-init"></transition>

    <!-- Produkte die nicht in die Relation aufgenommen werden sollen werden ignoriert --> 
    <transition name="transition-to-ignored" from="init" to="ignored" ></transition>

    <!-- Laden der Stammdaten -->
    <transition name="transition-to-dataloaded" from="init" to="dataloaded" with="step-load-data">
        <exceptions>
            <!-- 
                die InvalidStepValidationException muss ignoriert werden , 
                damit die Automation das weiter verarbeiten kann 
            -->
            <exception match="\Alvine\Application\Workflow\Transition\InvalidStepValidationException" >
                <handler class="\Alvine\Application\Workflow\Transition\Exception\Handler\ThrowAway" />
            </exception>
        </exceptions> 
    </transition>

    <!-- bei Stammdatenfehler den Kunden informieren und dern Status auf invaliditemdata setzten -->
    <transition name="transition-to-invaliditemdata" from="dataloaded" to="invaliditemdata" with="step-inform-customer"></transition>

    <!-- Relationen erstellen -->
    <transition name="transition-to-relationcreated" from="dataloaded" to="relationcreated" with="step-create-relation">
        <exceptions>
            <!-- 
                die InvalidStepValidationException muss ignoriert werden , 
                damit die Automation das weiter verarbeiten kann 
            -->
            <exception match="\Alvine\Application\Workflow\Transition\InvalidStepValidationException" >
                <handler class="\Alvine\Application\Workflow\Transition\Exception\Handler\ThrowAway" />
            </exception>
        </exceptions> 
    </transition>
</transitions>

´´´

UML-Diagramm

uml diagram