Anlegen eines Produkts über die API in einem Shopware Plugin

Developer Source Code

Manchmal ist es notwendig ein Produkt automatisiert über ein Shopware Plugin anzulegen. Zum Beispiel wenn Du eine Schnittstelle zu Deinem ERP System integrieren möchtest, die in regelmäßigen Intervallen Produktdaten aus einer CSV Datei importiert.

Shopware 5 bietet eine umfangreiche REST API über die die Anlage von verschiedensten Entitäten sehr bequem und sicher möglich ist. Allerdings ist diese API dafür gedacht von externen Systemen direkt aufgerufen zu werden.

Was also tun, wenn man diese Funktionalität in einem Plugin nutzen möchte? Natürlich könnte man über das ORM (Doctrine) und die Models die Entitäten manuell anlegen. Das hat allerdings den Nachteil, dass es nicht sehr abstrakt ist und bei Updates des Cores möglicherweise zu Problemen führt. Weiters ist es recht aufwendig die einzelnen Entitäten zu erstellen und miteinander zu verbinden (z.B. Article – Attributes – Price – Supplier – Tax).

Entitäten über Resourcen anlegen und aktualisieren

Shopware bietet auch für diese Aufgabenstellung eine sehr schöne Lösung an. Über Resourcen können Entitäten ident zur REST API sehr einfach in einem Plugin angelegt oder aktualisiert werden. Diese Resourcen werden intern auch von der REST API genutzt.

Beispiel: Einen neuen Artikel anlegen oder einen Artikel aktualisieren

$articleId=false;
$articleResource = \Shopware\Components\Api\Manager::getResource('article');

$articleData = array(
    'name' => 'Produktbezeichnung',
    'taxId' => 1,
    'mainDetail' => array(
        'number' => 'Art4711',
        'supplierNumber' => 'Sup0815',
        'active' => true,
        'inStock' => 50,
        'prices' => array(
            array(
                'customerGroupKey' => 'EK',
                'from' => '1',
                'to' => '',
                'price' => 29.90,
                'pseudoPrice' => 0,
                'basePrice' => 0,
                'percent' => 0
            )
        ),
    ),
    'categories' => array(
        array(
            'id' => 3
        )
    ),
    'supplier' => 'Name of Supplier',
    'priceGroupId' => 1,
    'description' => 'Description of article',
    'descriptionLong' => 'Long description of article',
    'active' => true
);

try {
    $article = $articleResource->updateByNumber($articleId, $articleData);
} catch (\Shopware\Components\Api\Exception\NotFoundException $e) {
    $article = $articleResource->create($articleData);
}

Das Schöne dabei ist, dass diese Vorgehensweise sehr abstrakt ist. Sollte sich am Datenmodell bzw. den Models im Hintergrund etwas ändern, führt dies weniger zu Inkompatibilitäten, da eine API für gewöhnlich selten modifiziert wird.

Zusammenfassung
Anlegen eines Produkts über die API in einem Shopware Plugin
Titel
Anlegen eines Produkts über die API in einem Shopware Plugin
Beschreibung
Manchmal ist es notwendig ein Produkt automatisiert über ein Shopware Plugin anzulegen. Zum Beispiel wenn Du eine Schnittstelle zu Deinem ERP System integrieren möchtest, die in regelmäßigen Intervallen Produktdaten aus einer CSV Datei importiert.
Autor
Publisher
synonymous.rocks
Logo

Kommentar verfassen

Folge mir auf Twitter

Hol Dir kostenlos Tipps und Tricks zu Shopware, E-Commerce und andere Open-Source Produkte.

Folge @synonymousrocks