# Subscriber bei Stateänderung einer Bestellung

**URL:** https://forum.shopware.com/t/subscriber-bei-stateanderung-einer-bestellung/64134
**Category:** Programmierung
**Created:** [20. Januar 2020 um 18:30 UTC](https://forum.shopware.com/t/subscriber-bei-stateanderung-einer-bestellung/64134 "2020-01-20T18:30:37Z")
**Posts on this page:** 17
**Page:** 1

<div class="post-metadata">

### Author: ![DannyDan](https://avatars.discourse-cdn.com/v4/letter/d/c2a13f/32.png) [@DannyDan](https://forum.shopware.com/u/DannyDan)
#### Post date: [20. Januar 2020 um 18:30 UTC](https://forum.shopware.com/t/subscriber-bei-stateanderung-einer-bestellung/64134/1 "2020-01-20T18:30:37Z")

</div>

Hat jmd. evtl. eine Idee, mit welchem Event ich am besten in einem Subscriber bei Änderung des Bestellstatus oder Zahlstatus auf die Bestelldaten bzw. orderId zugriff habe? Ich habe einige Events ausprobiert, aber so richtig funktioniert das nicht. Entweder werden die nicht getriggert oder ich habe keine Daten um an die orderId zu kommen.

Diese Events habe ich ausprobiert: OrderStateMachineStateChangeEvent, StateMachineTransitionEvent, OrderStateChangeEventListener, OrderEvents::ORDER\_STATE\_WRITTEN\_EVENT

Danny

---

<div class="post-metadata">

### Author: ![Michael\_Telgmann](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/michael_telgmann/32/20289_2.png) [@Michael\_Telgmann](https://forum.shopware.com/u/Michael_Telgmann)
#### Post date: [21. Januar 2020 um 08:13 UTC](https://forum.shopware.com/t/subscriber-bei-stateanderung-einer-bestellung/64134/2 "2020-01-21T08:13:13Z")

</div>

Hallo Danny,

das OrderStateMachineStateChangeEvent hat als Property die komplette Order. Darüber solltest du auch problemlos an die ID kommen.&nbsp;

Viele Grüße aus Schöppingen

![cool](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/1X/86c57fbace799dd4eb1f1b8a2d3bdc1733f0aea1.png "cool")&nbsp;Michael Telgmann

---

<div class="post-metadata">

### Author: ![DannyDan](https://avatars.discourse-cdn.com/v4/letter/d/c2a13f/32.png) [@DannyDan](https://forum.shopware.com/u/DannyDan)
#### Post date: [21. Januar 2020 um 08:26 UTC](https://forum.shopware.com/t/subscriber-bei-stateanderung-einer-bestellung/64134/3 "2020-01-21T08:26:44Z")

</div>

Hi Michael,

wenn ich im Admin aber einen Status ändere, wird das Event nicht gefeuert bzw. ich bekomme meine Debug Ausgabe im Subscriber nicht angezeigt.

---

<div class="post-metadata">

### Author: ![Michael\_Telgmann](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/michael_telgmann/32/20289_2.png) [@Michael\_Telgmann](https://forum.shopware.com/u/Michael_Telgmann)
#### Post date: [21. Januar 2020 um 08:51 UTC](https://forum.shopware.com/t/subscriber-bei-stateanderung-einer-bestellung/64134/4 "2020-01-21T08:51:14Z")

</div>

Hallo Danny,

wie du in dieser Klasse sehen kannst, wird beim feuern des Events ein Name angegeben:&nbsp;[platform/OrderStateChangeEventListener.php at 6.1 · shopware/platform · GitHub](https://github.com/shopware/platform/blob/6.1/src/Core/Checkout/Order/Listener/OrderStateChangeEventListener.php#L60)  
Das bedeutet, du kannst nicht einfach mit&nbsp;OrderStateMachineStateChangeEvent::class auf das Event horchen.&nbsp;  
Der Eventname wird hier zusammen gebaut:&nbsp;[platform/StateMachineStateChangeEvent.php at 6.1 · shopware/platform · GitHub](https://github.com/shopware/platform/blob/6.1/src/Core/System/StateMachine/Event/StateMachineStateChangeEvent.php#L93)  
Du musst dich also auf ein Event subscriben, dass wie folgt aussehen kann: “state\_enter.order.state.in\_progress” Dies wird z.B. gefeuert, wenn du die Bestellung in den State “In Progress” schiebst.

Viele Grüße aus Schöppingen

![cool](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/1X/86c57fbace799dd4eb1f1b8a2d3bdc1733f0aea1.png "cool")&nbsp;Michael Telgmann

---

<div class="post-metadata">

### Author: ![DannyDan](https://avatars.discourse-cdn.com/v4/letter/d/c2a13f/32.png) [@DannyDan](https://forum.shopware.com/u/DannyDan)
#### Post date: [21. Januar 2020 um 09:07 UTC](https://forum.shopware.com/t/subscriber-bei-stateanderung-einer-bestellung/64134/5 "2020-01-21T09:07:35Z")

</div>

Ich danke dir! So klappt es.

Danny

---

<div class="post-metadata">

### Author: ![Andey](https://avatars.discourse-cdn.com/v4/letter/a/9fc348/32.png) [@Andey](https://forum.shopware.com/u/Andey)
#### Post date: [22. Januar 2020 um 14:14 UTC](https://forum.shopware.com/t/subscriber-bei-stateanderung-einer-bestellung/64134/6 "2020-01-22T14:14:33Z")

</div>

Hallo, ich interessiere mich ebenfalls für diesen Anwendungsfall, muss aber doof fragen wie man sich konkret auf dieses Event subscribt. Ich steh irgendwie auf dem Schlauch. Danke vorab.

&nbsp;

```
...
use Shopware\Core\Checkout\Order\OrderEvents;
use Shopware\Core\Checkout\Order\Listener\OrderStateChangeEventListener;
use Shopware\Core\Checkout\Order\OrderDefinition;
use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityWrittenEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Contracts\EventDispatcher\Event;

class OnOrderChanged implements EventSubscriberInterface {
    /**
     * @return array The event names to listen to
     */
    public static function getSubscribedEvents()
    {
        return [
            ???...state_enter.order.state.in_progress => ['doMagic']
        ];
    }

public function doMagic(EntityWrittenEvent $event) {
        
	print_r('Hallo Welt.');
	
    }
}

```

&nbsp;

---

<div class="post-metadata">

### Author: ![DannyDan](https://avatars.discourse-cdn.com/v4/letter/d/c2a13f/32.png) [@DannyDan](https://forum.shopware.com/u/DannyDan)
#### Post date: [22. Januar 2020 um 14:19 UTC](https://forum.shopware.com/t/subscriber-bei-stateanderung-einer-bestellung/64134/7 "2020-01-22T14:19:52Z")

</div>

Hey Andey,

so funktioniert es bei mir:

```
**public static function** getSubscribedEvents(): **array** { **return** [**'state\_enter.order\_transaction.state.paid'** =\> **'onOrderTransactionStateChanged'**]; }

```

Das Event wird getriggert wenn der Zahlstatus auf Bezahlt gesetzt wird.

---

<div class="post-metadata">

### Author: ![Andey](https://avatars.discourse-cdn.com/v4/letter/a/9fc348/32.png) [@Andey](https://forum.shopware.com/u/Andey)
#### Post date: [22. Januar 2020 um 14:31 UTC](https://forum.shopware.com/t/subscriber-bei-stateanderung-einer-bestellung/64134/8 "2020-01-22T14:31:06Z")

</div>

Ich danke dir. Das kann ich mir umbauen für den order-Status…oh man, am Ende doch ganz easy. Wie besorgst du dir in der Folge die Bestellnummer raus? Ich würde wahrscheinlich sogar noch weiter gehen und würde am liebsten noch deutlich mehr Details aus der order ziehen wollen, wie Lieferanschrift, Positionen, Custom-fields etc.

&nbsp;

---

<div class="post-metadata">

### Author: ![DannyDan](https://avatars.discourse-cdn.com/v4/letter/d/c2a13f/32.png) [@DannyDan](https://forum.shopware.com/u/DannyDan)
#### Post date: [22. Januar 2020 um 14:38 UTC](https://forum.shopware.com/t/subscriber-bei-stateanderung-einer-bestellung/64134/9 "2020-01-22T14:38:07Z")

</div>

Hol dir am besten mit

```
 $orderId = $event-\>getOrder()-\>getId();

```

über die id per DAL die Daten die du benötigst.

---

<div class="post-metadata">

### Author: ![Andey](https://avatars.discourse-cdn.com/v4/letter/a/9fc348/32.png) [@Andey](https://forum.shopware.com/u/Andey)
#### Post date: [22. Januar 2020 um 14:57 UTC](https://forum.shopware.com/t/subscriber-bei-stateanderung-einer-bestellung/64134/10 "2020-01-22T14:57:24Z")

</div>

da bekomme ich einen Fehler.

```
use Shopware\Core\Checkout\Order\OrderEvents;
use Shopware\Core\Checkout\Order\Listener\OrderStateChangeEventListener;
use Shopware\Core\Checkout\Order\OrderDefinition;
use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityWrittenEvent;
use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityLoadedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Contracts\EventDispatcher\Event;

class OnOrderChanged implements EventSubscriberInterface {
    /**
     * @return array The event names to listen to
     */
    public static function getSubscribedEvents(): array
{
    return [
        'state_enter.order_transaction.state.paid' => 'doMagic'
    ];
}

public function doMagic(EntityLoadedEvent $event) {
        
	$orderId = $event->getOrder()->getId();

	
	
    }
}

```

ich glaube EntityLoadedEvent ist hier nicht richtig, EntityWrittenEvent aber auch nicht. Man steh ich heute auf dem Schlauch

---

<div class="post-metadata">

### Author: ![DannyDan](https://avatars.discourse-cdn.com/v4/letter/d/c2a13f/32.png) [@DannyDan](https://forum.shopware.com/u/DannyDan)
#### Post date: [22. Januar 2020 um 15:04 UTC](https://forum.shopware.com/t/subscriber-bei-stateanderung-einer-bestellung/64134/11 "2020-01-22T15:04:27Z")

</div>

hier:

```
**public function** onOrderStateChanged(OrderStateMachineStateChangeEvent $event): **void**** { ****}**
```

---

<div class="post-metadata">

### Author: ![Andey](https://avatars.discourse-cdn.com/v4/letter/a/9fc348/32.png) [@Andey](https://forum.shopware.com/u/Andey)
#### Post date: [22. Januar 2020 um 15:11 UTC](https://forum.shopware.com/t/subscriber-bei-stateanderung-einer-bestellung/64134/12 "2020-01-22T15:11:37Z")

</div>

Danke hab ich auch grad gefunden.&nbsp;

---

<div class="post-metadata">

### Author: ![Andey](https://avatars.discourse-cdn.com/v4/letter/a/9fc348/32.png) [@Andey](https://forum.shopware.com/u/Andey)
#### Post date: [22. Januar 2020 um 15:11 UTC](https://forum.shopware.com/t/subscriber-bei-stateanderung-einer-bestellung/64134/13 "2020-01-22T15:11:51Z")

</div>

Läuft!

---

<div class="post-metadata">

### Author: ![Andey](https://avatars.discourse-cdn.com/v4/letter/a/9fc348/32.png) [@Andey](https://forum.shopware.com/u/Andey)
#### Post date: [22. Januar 2020 um 15:13 UTC](https://forum.shopware.com/t/subscriber-bei-stateanderung-einer-bestellung/64134/14 "2020-01-22T15:13:22Z")

</div>

Mal noch ne allgemeine Frage… hab zwar schon paar Kleinigkeiten programmiert, aber eher im Frontend und weniger im Core, lese immer wieder dass phpstorm mit der IDE quasi alternativlos ist, insbesondere wegen dem Autofill der Klassen etc. Empfiehlst du das auch oder kannst du die alle auswendig?

---

<div class="post-metadata">

### Author: ![DannyDan](https://avatars.discourse-cdn.com/v4/letter/d/c2a13f/32.png) [@DannyDan](https://forum.shopware.com/u/DannyDan)
#### Post date: [22. Januar 2020 um 15:14 UTC](https://forum.shopware.com/t/subscriber-bei-stateanderung-einer-bestellung/64134/15 "2020-01-22T15:14:48Z")

</div>

Nene, ich nutze auch PhpStorm. 😉

---

<div class="post-metadata">

### Author: ![Andey](https://avatars.discourse-cdn.com/v4/letter/a/9fc348/32.png) [@Andey](https://forum.shopware.com/u/Andey)
#### Post date: [22. Januar 2020 um 16:08 UTC](https://forum.shopware.com/t/subscriber-bei-stateanderung-einer-bestellung/64134/16 "2020-01-22T16:08:29Z")

</div>

OK installiere ich grad. Ich hoffe ich nerve nicht schon, Ziel ist eine Mail an das Lager, wenn eine Bestellung den Status X hat. Mit php kann ich natürlich die mail funcion nutzen, aber ich würde gern die in shopware hinterlegte Mail Funktion nutzen, da ich hier auch einen SMTP Server hinterlegt habe. Wie stösst man denn sowas an? Außerdem könnte ich dann in meiner Vision direkt ein Template zur Auflistung der Artikel der jeweiligen Bestellung nutzen oder ist das zu visionär?

---

<div class="post-metadata">

### Author: ![abdes](https://avatars.discourse-cdn.com/v4/letter/a/a9a28c/32.png) [@abdes](https://forum.shopware.com/u/abdes)
#### Post date: [10. Januar 2021 um 15:11 UTC](https://forum.shopware.com/t/subscriber-bei-stateanderung-einer-bestellung/64134/17 "2021-01-10T15:11:19Z")

</div>

Werden diese&nbsp;Events&nbsp; ORDER\_STATE\_WRITTEN\_EVENT oder&nbsp;state\_enter.order\_transaction.state.paid ausgeführt, wenn die State der Bestellung in der Administartion geändert ist. Ich hab es so probierrt aber es funktioniert nicht !&nbsp;

&nbsp;

```
    public static function getSubscribedEvents(): array
    {
        
        return [
            'state_enter.order_transaction.state.paid' => 'onUpdateState',
            OrderEvents::ORDER_STATE_LOADED_EVENT => 'onUpdateState'
        ];
    }

    public function onUpdateState(EntityWrittenEvent $event)
    {
        dd('onUpdateState');
    }

```

&nbsp;
