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>
´´´