Inhaltsverzeichnis
- Einführung
- Verständnis des Bestellstatus-Workflows in Magento
- Nutzung des Ereignissystems von Magento
- Sicherstellen des Erfolgs: Testen des Beobachters
- Erweiterte Überlegungen
- Fazit
- FAQ
Einführung
Haben Sie jemals die Situation erlebt, in der Magento automatisch den Bestellstatus in Abgeschlossen ändert, nachdem eine Sendung eingereicht wurde, obwohl Sie es bevorzugen würden, dass er als Bearbeitung bleibt? Diese Eigenheit in Magento kann für Geschäftsinhaber frustrierend sein, die spezifische Workflow-Anforderungen haben. Keine Sorge, es gibt einen Weg, dies mit dem Ereignissystem von Magento zu umgehen. Dieser Blogbeitrag wird Sie durch die erforderlichen Schritte führen, um den Bestellstatus als Bearbeitung zu behalten, nachdem eine Sendung erstellt wurde, um sicherzustellen, dass Ihre Geschäftsabläufe nahtlos weitergeführt werden können.
Am Ende dieses Artikels werden Sie verstehen, wie Magento Bestellstatus behandelt, welche Rolle das Ereignissystem bei der Änderung dieser Status spielt und wie Sie es nutzen können, um Bestellungen im Bearbeitung-Status nach dem Versand aufrechtzuerhalten. Dieser Einblick ist besonders wertvoll, wenn Sie einen Shop mit erweiterten Post-Versand-Prozessen oder zusätzlichen Verpackungsschritten betreiben, die den Bestellzyklus nicht sofort abschließen.
Verständnis des Bestellstatus-Workflows in Magento
Bestellstatus in Magento
Magento nutzt ein komplexes System zur Verwaltung von Bestellstatus. Wenn ein Kunde eine Bestellung aufgibt, durchläuft sie typischerweise mehrere vordefinierte Status wie Ausstehend, Bearbeitung und Abgeschlossen. Diese Übergänge werden in der Regel durch spezifische Aktionen ausgelöst, wie z. B. Zahlungsautorisierung oder Erstellung einer Sendung.
Warum Bestellungen nach dem Versand in Abgeschlossen geändert werden
In Magento ändert sich der Status einer Bestellung automatisch in Abgeschlossen, wenn eine Sendung erstellt wird. Dieses Standardverhalten geht davon aus, dass, sobald ein Artikel versandt wird, die Transaktion im Grunde abgeschlossen ist. Viele Unternehmen haben jedoch möglicherweise weitere Schritte, die nach dem Versand abgeschlossen werden müssen, was dazu führt, dass die Bestellung im Bearbeitung-Status verbleibt.
Nutzung des Ereignissystems von Magento
Einführung in Ereignisse und Beobachter
Magento folgt dem Beobachter-Entwurfsmuster, um Ereignisse zu verarbeiten. Wenn ein bestimmtes Ereignis auftritt, löst es alle Beobachter aus, die auf dieses Ereignis warten. Ein Beobachter ist ein benutzerdefinierter Code, der darauf ausgelegt ist, als Reaktion auf das Ereignis ausgeführt zu werden.
Um den Bestellstatus nach dem Versand auf Bearbeitung zu ändern, werden wir das Ereignis sales_order_shipment_save_after nutzen.
Erstellen eines Ereignisbeobachters
In diesem Beispiel wird der Ereignisbeobachter sicherstellen, dass der Bestellstatus Bearbeitung bleibt, wenn eine Sendung eingereicht wird. Hier ist eine schrittweise Anleitung:
Erstellen eines Moduls: Wenn Sie noch kein benutzerdefiniertes Modul haben, müssen Sie eines erstellen. Es erfordert das Einrichten der Ordnerstruktur und Registrierungsdateien des Moduls.
Definieren des Ereignisbeobachters: Sie müssen das Ereignis festlegen, auf das gehört werden soll (
sales_order_shipment_save_after), und die Beobachterklasse angeben, die das Ereignis verarbeiten wird.Implementieren der Beobachterklasse: Diese Klasse enthält die Logik, um den Bestellstatus als Bearbeitung zu halten.
// app/code/YourNamespace/YourModule/etc/events.xml
<event xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="sales_order_shipment_save_after">
<observer name="set_order_status_processing" instance="YourNamespace\YourModule\Observer\SetOrderStatusProcessing" />
</event>
</event>
// app/code/YourNamespace/YourModule/Observer/SetOrderStatusProcessing.php
namespace YourNamespace\YourModule\Observer;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Sales\Model\Order;
class SetOrderStatusProcessing implements ObserverInterface
{
public function execute(Observer $observer)
{
$shipment = $observer->getEvent()->getShipment();
$order = $shipment->getOrder();
// Den Status nur ändern, wenn die Bestellung in bestimmten Bedingungen ist
if ($order->getStatus() == Order::STATE_COMPLETE) {
$order->setState(Order::STATE_PROCESSING)->setStatus(Order::STATE_PROCESSING);
$order->save();
}
}
}
Sicherstellen des Erfolgs: Testen des Beobachters
Nachdem Sie Ihr Modul und den Beobachter eingerichtet haben, ist es entscheidend, den Code zu testen und sicherzustellen, dass er wie erwartet funktioniert. Dieser Test umfasst das Erstellen von Bestellungen, das Einreichen von Sendungen und das Bestätigen, dass der Status als Bearbeitung bleibt und nicht zu Abgeschlossen wechselt.
- Bestellung aufgeben: Führen Sie eine Bestellung mit einer Zahlungsmethode durch, die sie als Bearbeitung markiert.
- Sendung einreichen: Erstellen Sie über das Magento-Admin-Panel eine Sendung für die Bestellung.
- Bestellstatus überprüfen: Überprüfen Sie nach Einreichung der Sendung den Bestellstatus, um zu bestätigen, dass er als Bearbeitung bleibt.
Erweiterte Überlegungen
Bedingte Statusaktualisierungen
Abhängig von Ihrem Workflow möchten Sie möglicherweise weitere bedingte Logik anwenden. Sie könnten beispielsweise den Bestellstatus basierend auf verschiedenen Zahlungsmethoden, Artikeln oder anderen Kriterien anpassen. Hier ist ein beispielhafter Code, der eine benutzerdefinierte Bedingung einführt:
if ($shipment->getOrder()->getPayment()->getMethod() == 'Ihre_benutzerdefinierte_Zahlungsmethode') {
// Benutzerdefinierte Logik für spezifische Zahlungsmethoden
}
Protokollierung und Debugging
Durch das Hinzufügen von Protokollierung zu Ihrem Beobachter können Sie bei der Fehlersuche unterstützt werden und für Transparenz sorgen:
use Psr\Log\LoggerInterface;
class SetOrderStatusProcessing implements ObserverInterface
{
protected $logger;
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
public function execute(Observer $observer)
{
$shipment = $observer->getEvent()->getShipment();
$order = $shipment->getOrder();
if ($order->getStatus() == Order::STATE_COMPLETE) {
$order->setState(Order::STATE_PROCESSING)->setStatus(Order::STATE_PROCESSING);
$order->save();
$this->logger->info('Bestellstatus auf Bearbeitung für Bestell-ID gesetzt: ' . $order->getId());
}
}
}
Fazit
Die Anpassung von Magento, um Bestellstatus nach der Einreichung von Sendungen als Bearbeitung beizubehalten, kann einen erheblichen Einfluss auf die Effizienz und Genauigkeit Ihrer Arbeitsabläufe haben. Durch die Nutzung des robusten Ereignis- und Beobachtersystems von Magento können Sie die E-Commerce-Erfahrung an Ihre spezifischen betrieblichen Anforderungen anpassen. Diese Anpassung stellt sicher, dass Ihre Bestellabwicklungspipeline konsistent bleibt und die Realitäten Ihrer Geschäftsprozesse widerspiegelt.
FAQ
F: Warum ändert Magento automatisch den Bestellstatus nach dem Versand in Abgeschlossen?
A: Das Standardverhalten von Magento geht davon aus, dass eine Bestellung abgeschlossen ist, sobald der Versand erstellt wurde. Dies passt jedoch möglicherweise nicht in alle Geschäftsabläufe und erfordert einen benutzerdefinierten Eingriff.
F: Kann ich diese Logik bedingt anwenden, basierend auf Zahlungsmethoden oder anderen Kriterien?
A: Absolut. Sie können die Beobachter-Logik verfeinern, um Bedingungen basierend auf Zahlungsmethoden, bestimmten Artikeln oder anderen Bestellattributen anzuwenden.
F: Wie kann ich sicherstellen, dass mein Beobachter korrekt funktioniert?
A: Testen Sie gründlich, indem Sie mehrere Bestellungen aufgeben, Sendungen einreichen und überprüfen, ob die Bestellungen den Bearbeitung-Status beibehalten. Verwenden Sie Protokollierung, um die Aktionen des Beobachters nachzuverfolgen und bei Bedarf zu debuggen.
F: Ist es sicher, den Bestellstatus direkt vom Beobachter aus zu ändern?
A: Ja, es ist sicher, wenn es korrekt durchgeführt wird. Stellen Sie sicher, dass die Beobachter-Logik konsistent ist und die Bedingungen klar definiert sind, um unbeabsichtigtes Verhalten zu vermeiden.