XML Dateien mit dem Workflow erstellen¶
Zusammenhängende Produkte¶
Wenn die zu erstellende XML Datei zusammengefasste Produkte benötigt, müssen Beziehungen angelegt werden.
Schritt 1 - Container erstellen¶
Die Factory \Channel\Relation
erstellt nur Container wenn das Produkt ein Beziehungsprodukt ist.
Bei einer IID die kein Beziehungsprodukt ist, wird das Beziehungsprodukt identifiziert und anstelle dieser IID, wird dann die IID des Beziehungsprodukts erstellt.
Wichtig
Damit Produkte gesperrt werden können muss ein Container verschoben werden wenn schon ein Produkt erstellt wurde.
Hierzu kann zum Besipeil die Methode build
angepasst werden um nach den Container zu suchen.
alvine-platform workflow:factory --workflow item --class \\Alvine\\Application\\Platform\\Logic\\Workflow\\Factory\\Channel\\Relation -a idlist=90268
Schritt 2 - Eigenschaften setzen¶
Definieren des Kanals und die Sprache der zu erstellenden Datei.
Die Werte werden im Container gespeichert
<step name="do-init">
<actions>
<action class="\Alvine\Application\Platform\Logic\Workflow\Action\Container\SetProperties">
<parameters>
<parameter name="company" >273</parameter>
<parameter name="locale" >de</parameter>
</parameters>
</action>
</actions>
</step>
Schritt 3 - Prüfen und laden der Daten¶
Mit der Validierung IsValid
wird geprüft, ob dieses Produkt ausgespielt werden soll.
Mit der Validierung IsRelationItem
wird geprüft, ob dieses Produkt ein Beziehungsprodukts ist.
Wenn beide Validierungen zutreffen, werden die Daten geladen.
Die Datasource muss hier das Beziehungsprodukt und die verknüpften Produkt laden.
Dafür gibt es den Trait \Alvine\Application\Platform\Builder\DataSource\Implementation\Commerce\Item\ParentChildRelationship
.
Dieser erweitert das Item Dataset um parentChildRelationship
. Hier sind dann alle verknüpften Produkte enthalten.
Wichtig
Hier bei ist zu beachten das die Methode getRelationshipDataSource()
die Datasource so einschränkt das auch nur die Produkte geladen werden
die auch an das Portal ausgespielt werden sollen.
<step name="do-load-data">
<validations>
<validation class="\Alvine\Application\Platform\Logic\Workflow\Step\Validation\Channel\IsValid" />
<validation class="\Alvine\Application\Platform\Logic\Workflow\Step\Validation\Channel\IsRelationItem" />
</validations>
<actions>
<action class="\Alvine\Application\Platform\Logic\Workflow\Action\Builder\Datasource\SetDataset">
<parameters>
<parameter name="datasource">\Customisation\Builder\DataSource\Commerce\ItemRelation</parameter>
<parameter name="container-dataset-key" >item</parameter>
</parameters>
</action>
</actions>
</step>
Schritt 4 XML erstellen¶
Die XML wird dann mit einem Builder für XML Dateien erstellt.
Das Parent und die Childs werden in einer Datei als IID Chunk in einem Verzeichnis abgelegt.
An den Produkten sollte eine Eigenschaft gesetzt werden, so kann geprüft werden ob das Produkt schon an den Kanal ausgespielt wurde.
<step name="do-create-items">
<actions>
<action class="\Customisation\Logic\Workflow\Action\Builder\Fragment\Channel\Tradebyte\Item" >
<parameters>
<parameter name="container-dataset-key" >item</parameter>
<parameter name="outputfile">{CUSTOMISATIONPATH}resource/tradebyte/chunks/{iid}_chunk.xml</parameter>
</parameters>
</action>
<action class="\Alvine\Application\Platform\Logic\Workflow\Action\Commerce\Item\SetPropertyFromDataset" >
<parameters>
<parameter name="property-name">channel.tradebyte</parameter>
<parameter name="property-value">on</parameter>
<parameter name="container-dataset-key">item</parameter>
<parameter name="dataset-sub-key">parentChildRelationship</parameter>
</parameters>
</action>
</actions>
</step>
Schritt 5 sperren von Produkten¶
Wenn ein Produkt nicht mehr verkauft werden darf, wird es im Alvine mit den üblichen Vorgehensweisen gesperrt.
Im Workflow wird das Produkt dann ignoriert
<validation class="\Alvine\Application\Platform\Logic\Workflow\Step\Validation\Channel\IsValid" />
Durch den Übergang to-ignored
kann dann mit einer Aktion darauf noch reagiert werden.
<transition name="to-ignored" from="init" to="ignored" with="do-disable-items" ></transition>
Die Aktion holt sich das zuvor erstellt Produkt und passt es so an das es im Kanal gesperrt ist.
Die XML wird wieder im chunks Verzeichnis abgelegt.
<step name="do-disable-items">
<actions>
<action class="\Customisation\Logic\Workflow\Action\Builder\Fragment\Channel\Tradebyte\DisableItem">
<parameters>
<parameter name="outputfile">{CUSTOMISATIONPATH}resource/tradebyte/chunks/{iid}_chunk.xml</parameter>
</parameters>
</action>
</actions>
</step>
Lagerbestände der Produkte¶
Änderungen an Lagerbestände wird auf IID Ebende identifiziert.
alvine-platform workflow:factory --workflow item --class \\Alvine\\Application\\Platform\\Logic\\Workflow\\Factory\\Commerce\\Item\\Stock -a deltauuid=b29edb4e-9387-4197-b256-03d2123800ec
Schitt 1¶
Setzten der Container Eigenschaften
<step name="step-container-init">
<actions>
<action class="\Alvine\Application\Platform\Logic\Workflow\Action\Container\SetProperties">
<parameters>
<parameter name="company" >273</parameter>
<parameter name="locale" >de</parameter>
</parameters>
</action>
</actions>
</step>
Schitt 2¶
Es muss geprüft werden ob der Lagerbestand an den Kanal gemeldet werden soll.
Über eine Produkt Eigenschaft prüfen ob das Produkt schon im Kanal angelegt wurde.
<step name="step-update-stock" >
<validations>
<!-- Darf das Produkt an den Kanal ausgespielt werden -->
<validation class="\Alvine\Application\Platform\Logic\Workflow\Step\Validation\Channel\IsValid" />
<!-- Das Produkt muss schon an das Portal gemeldet worden sein -->
<validation class="\Alvine\Application\Platform\Logic\Workflow\Step\Validation\Commerce\Item\HasProperty" >
<parameters>
<parameter name="property-name">channel.tradebyte</parameter>
<parameter name="property-value">on</parameter>
</parameters>
</validation>
</validations>
<actions>
<action class="\Customisation\Plugin\Channel\Tradebyte\Workflow\Action\CreateStock" />
<action class="\Alvine\Application\Platform\Plugin\Channel\Tradebyte\Workflow\Action\SendStock" >
<parameters>
<!-- zugangsdaten Tradebyte API -->
<parameter name="merchant-number">2564</parameter>
<parameter name="tradebyte-user-name" >apiuser</parameter>
<parameter name="tradebyte-password-key" >meytradebyteapiuser</parameter>
</parameters>
</action>
</actions>
</step>