© svetabelaya/Shutterstock.com
Teil 2: Bestellungen mit System exportieren

Geschickt exportiert


In dieser Artikelserie zu Shopware 6 werfen wir einen Blick auf die Plug-in-Entwicklung und binden exemplarisch ein externes System, in diesem Fall FastBill, an Shopware an. Im ersten Teil haben wir die Produkte in Shopware übernommen, Plug-in-Konfigurationen erstellt und automatisierte Aufgaben definiert. In diesem zweiten und letzten Teil wird gezeigt, wie wir getätigte Bestellungen wieder exportieren können.

Aufbauend auf dem Plug-in aus dem ersten Teil [1] werden wir dieses nun erweitern und die offenen Bestellungen von Shopware auslesen, um sie dann Richtung FastBill zu exportieren. Wie auch im ersten Teil werden wir wieder einen Command für den manuellen Export und einen ScheduledTask für die Automation erstellen. Wer aus den vorherigen Artikeln noch eine funktionierende Demoumgebung hat, kann den folgenden Abschnitt getrost überspringen.

Demoumgebung aufsetzen

Wir verwenden die Docker-Umgebung, die auf einem Linux-Client ausgeführt wird. Zuerst klonen wir das Entwicklungstemplate von GitHub mit git clone git@github.com:shopware/development.git. Nun haben wir die Entwicklungsvorlage für Shopware 6 im Verzeichnis development. Anschließend gehen wir mit cd development in das Verzeichnis und klonen das eigentliche Shopware-Plattform-Repository mit git clone git@github.com:shopware/platform.git in das Standardverzeichnis. Achtung: Bitte kein anderes Verzeichnis beim Klonen angeben, da das wichtig für das Autoloading ist.

Damit haben wir sämtlichen Quellcode, den wir zum Starten auf unserem Rechner benötigen. Um nun die notwendigen Docker-Container zu bauen und zu starten, geben wir ./psh.phar docker:start ein. Mit diesem Befehl werden alle Docker-Container gebaut und gestartet. Anschließend verbinden wir uns via ./psh.phar docker:ssh mit dem Application-Container und starten die Installation mit ./psh.phar install. Das kann beim ersten Mal einige Zeit in Anspruch nehmen, da bei der initialen Ausführung einige Caches erstellt werden müssen. Um zu prüfen, ob die Installation erfolgreich war, könnt ihr einfach euren Lieblingsbrowser öffnen und auf http://localhost:8000 zugreifen.

Wenn ihr z. B. Mac-Anwender seid, könnt ihr das Ganze auch lokal aufsetzen. Eine beispielhafte Virtual-Host-Konfiguration findet ihr auf [2] unter „Setting up your webserver“. Anschließend müsst ihr nur bin/setup ausführen und werdet durch einen interaktiven Installationsprozess geführt. Wenn etwas während der Installation nicht funktioniert hat, prüft, ob es die .psh.yaml.override gibt. Wenn nicht, startet das Set-up-Skript mit ./psh.phar install erneut.

Plug-in-Extension

Beginnen wir nun mit der Erweiterung unseres Beispiel-Plug-ins. Die Grundstruktur (Listing 1) ist identisch geblieben. Nur das Verzeichnis Exporter ist neu hinzugekommen. Da wir die über FastBill erstellten Rechnungen mit den Bestellungen verknüpfen möchten, ergänzen wir nun die FastBillConnector-Klasse um die update()-Methode (Listing 2).

Auch hier verwenden wir wie in der install()-Methode das CustomFieldSet Repository, um unser neues Custom Field zu erstellen. Zusätzlich erhöhen wir in der composer.json die Versionsnummer, um den Plug-in-Updateprozess anstoßen zu können. Das können wir entweder über die Administration machen, dort beim Plug-in auf aktualisieren drücken, oder ganz einfach über die Konsole: ./bin/console plugin:update FastBillConnector. Nachdem das Update erfolgreich durchgeführt wurde, sollten wir mit ./bin/console cache:clear zur Sicherheit den Cache leeren. Nun finden wir in der Administration unter Bestellungen unser neu erstelltes Custom Field. Wer mehr zu den Möglichkeiten von Custom Fields lesen möchte, findet unter [3] detaillierte und weiterführende Informationen.

Listing 1: Plug-in-Struktur

ShopwareBlogFastBillConnector > src --> Api --> Command --> Importer --> Exporter --> Resources ----> config --> ScheduledTask --> FastBillConnector.php > composer.json

Listing 2: Plug-in-Basisklassenerweiterung

class FastBillConnector extends Plugin { public function update(UpdateContext $updateContext): void { /** @var EntityRepositoryInterface $customFieldSetRepository */ $customFieldSetRepository = $this->container->get('custom_field_set.repository'); $customFieldSetRepository->upsert( [ [ 'name' => 'swb_fastbill_order', 'customFields' => [ [ 'name' => 'swb_fastbill_invoice_id', 'type' => CustomFieldTypes::INT, ], ], 'relations' => [ ['entityName' => 'order'], ], ], ], Context::createDefaultContext() ); } } require_once __DIR__ . '/../vendor/autoload.php';

FastBill...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang