Neu connector plugin

Lars Lorenz

Neues Mitglied
29. Oktober 2019
6
0
Hi,

ich wollte mein erstes connector plugin schreiben. Es geht hier um den Shopware connector v 2.2.3.1.
Ich wollte nun ganz einfach erstmal einen Einstiegspunkt definieren und zwar wollte ich das mein Plugin arbeitet wenn die WAWI die Bestellungen abholt.
Ich dachte nun also ich lege mir ein Ordner an unter jtlconnector/plugins meinPlugin
dann in die Bootstrap:
PHP:
namespace jtl\meinPlugin;

use jtl\Connector\Plugin\IPlugin;
use jtl\Connector\Event\CustomerOrder\CustomerOrderBeforePullEvent;
use Symfony\Component\EventDispatcher\EventDispatcher;

class Bootstrap implements IPlugin
{
    public function registerListener(EventDispatcher $dispatcher)
    {
        $dispatcher->addListener(CustomerOrderBeforePullEvent::EVENT_NAME, [
            new OrderListener(),
            'onCustomerOrderBeforePullAction'
        ]);
    }
}

dann im gleichen Ordner eben die Datei OrderListener.php angelegt.

PHP:
<?php

namespace jtl\meinPlugin;

use jtl\Connector\Event\CustomerOrder\CustomerOrderBeforePullEvent;
use jtl\Connector\Shopware\Utilities\Shop as ShopUtil;
use jtl\Connector\Core\Logger\Logger;
use jtl\Connector\Formatter\ExceptionFormatter;
use jtl\Connector\Core\Model\QueryFilter;

class OrderListener
{
    public function onCustomerOrderBeforePullAction(CustomerOrderBeforePullEvent $event)
    {

Logger::write('test ob mein plugin läuft', Logger::WARNING, 'cleverplugin');
        try {
            Logger::write($event->getCustomerOrder(), Logger::WARNING, 'cleverplugin');
        } catch (\Throwable $e) {
            Logger::write(ExceptionFormatter::format($e), Logger::WARNING, 'cleverplugin');
        }
    }
}

Ich dachte also das ich mir erstmal einfach etwas in die Logs schreibe. Im json habe ich den developer modus auf true gestellt. Seitdem sehe ich auch neue Logs im logs Ordner aber meine eingaben werden nirgends gespeichert.
Was mache ich hier falsch? Ziel ist es bei bestimmten Artikeln nach bestimmten Vorgaben ein Infoarray aufzubauen welches ich dann zB in die notes der bestellung speichern möchte.

Aber es geht mir hier auch vielmerh um das allgemeine Verständniss an der Stelle.


Vielen Dank für jede Hilfe
Viele Grüße
 

Immanuel

Gesperrter Benutzer
24. August 2016
1.542
329
Hallo Lars,

dadurch, dass der gewählte Namespace jtl\meinPlugin ist, müsste das Plugin innerhalb des plugin Ordners auch in jtl/meinPlugin liegen. Wenn ich dich richtig verstehe, liegt es aber nur in meinPlugin. Wenn du im Namespace der beiden Dateien jtl\ entfernst, dann sollte das Plugin funktionieren.
 

Lars Lorenz

Neues Mitglied
29. Oktober 2019
6
0
Hi,

erstmal vielen lieben Dank für die schnelle Antwort. Manchmal sieht man ja die simpelsten sachen nicht. Ich habe den namespace nun mal angepasst und auch weiter in die Richtung getestet, leider ohne Erfolg.
Ich hab auch einfach das Gefühl das das Plugin nicht wie gewünscht eingebunden wird, den selbst wenn ich hier zB ein "die();" reinsetze oder irgendwas es passiert einfach nichts.
Im RPC Log sehe ich das mein gewünschter event auch gestartet wird: "[#] rpc.DEBUG: RequestPacket: {"method":"customer_order.pull","params":"{\"limit\":50,\"filters\":[]}","jtlrpc":"2.0","id":"#"} [] []".
Meine Hoffnung war nun das irgendwo in diesen Logs auch meine
PHP:
Logger::write('test ob mein plugin läuft', Logger::WARNING, 'cleverplugin');
auftauchen, das tun sie aber leider nicht.
irgendwas mache ich hier immernoch falsch. Ich habe mich auch schon fürs webinar nächste Woche eingetragen, nur würde ich ungern so lange warten um hier weiter zu kommen.
Für Shopware habe ich in den letzten 5 Jahren erfolgreich einige Plugins entwickelt, insofern ist mir der Pluginstack auch nicht komplett neu.
Wie ist das mit diesem autoloader? Muss ich hier noch irgendwo mein plugin registrieren o.ä.?
Hier nochmal der komplkette Pfad:
engine/Shopware/Plugins/Community/Frontend/jtlconnector/plugins/meinPlugin

PHP:
namespace meinPlugin;

use jtl\Connector\Plugin\IPlugin;
use jtl\Connector\Event\CustomerOrder\CustomerOrderBeforePullEvent;
use Symfony\Component\EventDispatcher\EventDispatcher;

PHP:
namespace meinPlugin;

use jtl\Connector\Event\CustomerOrder\CustomerOrderBeforePullEvent;
use jtl\Connector\Shopware\Utilities\IdConcatenator;
use jtl\Connector\Shopware\Utilities\Shop as ShopUtil;
use jtl\Connector\Core\Logger\Logger;
use jtl\Connector\Formatter\ExceptionFormatter;
use jtl\Connector\Core\Model\QueryFilter;

class OrderListener
{
    public function onCustomerOrderBeforePullAction(CustomerOrderBeforePullEvent $event)
    {

Nun hatte ich noch die Idee das ich den listener irgendwie genauer registrieren müsste also zB das ich Ihn nochmal in nen Unterordner spielen muss oder auch beim registrieren der Klasse etwas anders aufbauen muss.
Bin weiterhin über jeden Hinweis dankbar.

Viele Grüße
 

Lars Lorenz

Neues Mitglied
29. Oktober 2019
6
0
Hi,

suuuper das war es vielen Dank. Nun kann ich zumindest klar verifizieren das mein Plugin läuft und damit hab ich schonmal die halbe Miete.

Aber ich konnte per:
PHP:
Logger::write('test ob mein plugin läuft', Logger::WARNING, 'cleverplugin');
keien Infos in ein logfile schreiben, oder ich habe das falsche Logfile. Gibt es eine Doku zu der Logger funktion?
Grundsätzlich denke ich kann ich mir hier nun auch anders helfen aber interessant finde ich das eben schon.


PS Der Logger macht nun auch wie gewünscht seine Arbeit.

Mal ganz abgesehen davon: Toller support hier vorbildlich!!!

Viele Grüße
 
Zuletzt bearbeitet:

Lars Lorenz

Neues Mitglied
29. Oktober 2019
6
0
Nochmal ein Nachtrag:

ausserdem würde mich ein Beispiel für den queryfilter interessieren. Wenn ich das ganze richtig verstehe kann ich im before.pull ja ein filter definieren.
Ich würde jetzt erwarten das ich dieses filter array dafür nutzen könnte bestimmte Bestellungen vom export zur jtl wawi auszuschließen. Das wäre jetzt eine Erweiterung die mich einfach interessieren würde. Klar ich könnte sicherlich auch ein workflow im jtl einrichten welcher dann Bestellungen zB anhand eines Eintrags im note feld markiert/entfernt o.ä. aber ich denke die Funktion ist ja hier schon gegeben.
wie genau kann ich diesen Queryfilter nutzen / erweitern (standard mäßig gibt es hier immer ein limit Wert, und eine leeres filter array).


Viele Grüße und
vielen Dank
 

Lars Lorenz

Neues Mitglied
29. Oktober 2019
6
0
Hi,

ich habe nun heute mit Hilfe der neuen Informationen aus dem webinar ein wenig weiter Licht ins dunkle gebracht. Leider konnte mir meine Frage bzgl. der Syntax/eines Beispiels zur nutzung des Queryfilters hier auch nicht beantwortet werden. Hier nochmal mein Ziel:
Ich möchte bestimmte Bestellungen für den connector blocken. Diese sollen beim CustomerOrder pull nicht in die WaWi übernommen werden.
Meine Idee war nun das ich zB in das note feld der Bestellung noch auf Shopwareseite während des Bestellprozesses etwas eintrage, und diese Bestellung dann blocke. Im customerOrderBeforePull Event habe ich ja keine wirklichen Orderdaten sondern eben nur ein Object mit einen Limit Wert und einem leeren Array was filters heßt:
Code:
jtl\Connector\Core\Model\QueryFilter Object

(

    [limit:protected] => 50

    [filters:protected] => Array

        (

        )


)
Nun dachte ich das ich mithilfe der möglichen methoden aus der QueryFilter class wie zB addFilter; setFilters o.ä. einen filter definieren kann der eben die Orders schon vorher auf den individuellen Wert filtert.
Ich hatte sachen versucht wir zb:

PHP:
use jtl\Connector\Core\Model\QueryFilter as Filter;

....

Filter::setFilters('fields.city', 'berlin');
$event = $event->addFilter('fields.city', 'berlin');

oder auch

Filter::setFilters('customerId', '2');
$event = $event->addFilter('customerId', '2');

leider hat nichts zum erfolg geführt (verwendet habe ich hier erstmal möglist eindeutige Werte, welche ich auch zB im rpcviewer sehen kann).

Wenn ich nun den customerOrdersAfterPullEvent nehme dann kann ich zwar die orders durchsteppen, sehe hier aber 2 Probleme:
1. Ich weiß ja nicht genau wie der connector abarbeitet aber wenn die orders im Query ein limit von 100 haben und nach und nach die 100 bestellungen welche er dann ziehen sollte alle als geblockt nicht in die WaWi wandern würde ja am ende garnichtsmehr in der WaWi ankommen oder?
2. Ich habe es nochnicht probiert aber ich könnte mir gut vorstellen das es der WaWi/dem connector auch nicht besonders gut gefällt wenn ich jetzt einfach sachen aus dem Array rauschmeiße oder ist das kein Problem?

Vielleicht erwarte ich auch einfach zu viel von den Anpassungsmöglichkeiten, irgendwie habe ich das gefühl das mein vorhaben (was am ende hauptsächlich den Komfort im täglichen Umgang verbessern soll und dementsprechend als "kleiner Eingriff" gewertet wird) am ende recht kompliziert und aufwändig wird.

Ich weiß leider nichtmehr weiter und hoffe hier kann mir nochmal wer weiterhelfen.


Viele Grüße &
vielen Dank
 

Immanuel

Gesperrter Benutzer
24. August 2016
1.542
329
Hallo @Lars Lorenz,

das wird so leider nicht funktionieren. Der Query Filter existiert zwar, wird aber gar nicht verwendet. Wir überlegen ob wir zwei weitere Events dem Connector Core hinzufügen:

BeforeHandle [ControllerName, Action, Data] => Data würde bei Push und Delete aus den von der Wawi gesendeten Daten bestehen. Bei Statistic und Pull wäre Data der QueryFilter
AfterHandle [ControllerName, Action, Result] => Result wäre bei Push und Delete alle von der Wawi gesendeten Elemente. Bei Pull wären in Result alle Elemente, die in der Pull Methode geholt wurden. Und bei Statistic wäre Result die Anzahl der noch zu importiereneden Elemente.

In deinem Falle wäre dann das AfterHandle Event interessant, wo entsprechend bei dem Controller "CustomerOrder" und der Action "pull" das "Result" gefiltert werden könnte.

Könntest du damit arbeiten?
 

Lars Lorenz

Neues Mitglied
29. Oktober 2019
6
0
Hallo @Immanuel ,

vielen Dank für die Rückmeldung. Grundsätzlich hört sich das sehr gut an, die Frage die ich mir direkt stelle ist wofür dann das Event customerOrderBeforePull zur Zeit überhaupt genutzt werden kann?
Wenn ich das richtig verstehe würde das bedeuten das im customerOrderHandleAfterPull Event im Result nur noch genau die elemente sind welche geholt werden sollen. Also wenn es nur 3 neue noch nicht in der Wawi vorhandene Orders gibt wären hier eben nur diese 3 drinnen? Welche ich dann entsprechend filtern könnte.
Woran erkennt den der connector das er aktuelle Order bereits gezogen hat? Gibt es da intern eine art matching Table oder läuft das irgendwie über eine art Timestamp o.ä.?
Ich habe halt ein wenig Bauchschmerzen das er ansonsten versucht die geblocken Orders immer wieder zu ziehen was dann irgendwann das Limit sprengen könnte...

Sorry das ich soviele Fragen vermixe, aber ich bin noch sehr neu beim jtl-connector und versuche mir hier mein Überblick zu verschaffen.

Zuletzt natürlich die übliche Frage: kann man abschätzen wann ein solches feature eingebaut wird?


Viele Grüße und vielen Dank für die gute Unterstützung.
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu JTL Connector Allgemeines zu den JTL-Connectoren 1
Shopify-Connector Down? Shopware-Connector 0
Neu Shopware6 Connector + Funktionsattribute Shopware-Connector 0
JTL Connector Steuersatz Mapping JTL-Wawi 1.6 0
Neu Shopify-Connector: Fehler "delivery_note table doesn't exist" beim Lieferschein-Abgleich Shopify-Connector 4
Neu Änderungen Shopify-Connector 29.07.2025 Shopify-Connector 27
Neu Dringendes Problem: Bildabgleich nach Connector-Fix – "Parameter resourceUrl is empty" Fehler Shopify-Connector 4
Neu Exception bei core.connector.auth: Invalid shop url. https://XYZ.de does not point to a shopware 6 instance. Please check the Shop URL. Shopware-Connector 1
Neu Massive Probleme mit JTL-Connector zu Shopify – lohnt sich der Einsatz überhaupt? Shopify-Connector 10
Neu JTL Connector Shopify Abgleich Problem Shopify-Connector 1
JTL Connector <-> JTL WAWI Keine neune Importe von Aufträgen JTL-Wawi 1.9 0
Neu WICHTIG: Änderungen Shopify-Connector 30.06.2025 Shopify-Connector 77
Shopware 5 Connector und WaWi 1.9.7.1 / 1.9.8.0 JTL-Wawi 1.9 12
Neu JTL-Connector (Drittanbieter) Auftragsnummer und Ext. Belegnummer setzen Onlineshop-Anbindung 0
Neu Connector funktioniert seit Fehler E-Mail nicht mehr Shopify-Connector 3
Shopify-Connector deaktiviert (no primary tax rate found) Shopify-Connector 3
Neu Connector-Anbindung nicht möglich Shopware-Connector 1
Neu JTL-Connector: Wie kann man Bestände nur von einem Lager (WMS) übertragen? WooCommerce-Connector 3
Neu Shopify-Connector bei Bildübertragung: The filename provided already exists Shopify-Connector 9
Online-Shop abgleich via Shopify Connector geht nicht mehr JTL-Wawi 1.9 4
Neu Connector funktioniert nicht (und täglich grüßt das Murmeltier) Shopify-Connector 2
Neu Shopify Connector Fehler bezüglich "unique key" bei den Kategorien Shopify-Connector 5
Neu Artikel werden nach JTL-Abgleich aus Google & YouTube Vertriebskanal entfernt – seit letztem Connector-Update Shopify-Connector 3
Neu Der Connector funktioniert plötzlich nicht mehr Shopify-Connector 1
Neu Keine Verbindung zu Shopware Connector möglich Shopware-Connector 1
Neu Shopify Connector - Verbindungsfehler zum Shop & Kein Abgleich mehr möglich Shopify-Connector 14
Neu WICHTIG: Änderungen Shopify-Connector 21.05.2025 Shopify-Connector 0
Neu WICHTIG: Änderungen Shopify-Connector 21.05.2025 Shopify-Connector 114
Neu Problem Verkaufskanalverwaltung / Connector-Anbindungen WooCommerce-Connector 5
Neu Umstellung JTL-Connector auf Shopify APP – Wer hat Erfahrung? Shopify-Connector 3
Neu Fehlende Mollie-Zahlungsart im JTL-Connector. WooCommerce-Connector 0
Neu alte Bestellungen und Rechnungen per Connector importieren WooCommerce-Connector 2
Neu Google Shopping (Plugin) Export immer leer Allgemeine Fragen zu JTL-Shop 4
Neu Sendcloud Plugin immer im Tab fehlerhaft - Lizenz abgelaufen Plugins für JTL-Shop 0
Neu Texteditor Hinweis Plugin von Webstollen Plugins für JTL-Shop 0
Neu Welches PlugIn für ein besseres Google Ranking? Plugins für JTL-Shop 2
Neu Händlerbund Plugin: "Zahlung und Versand" wird nicht automatisch übernommen Plugins für JTL-Shop 2
Neu Die Zahlungsart SOFORT ist eine Plugin-Zahlungsart für Mollie. Das zugehörige Plugin ist jedoch nicht installiert! Allgemeine Fragen zu JTL-Shop 0
Neu Plugin PayPal - capture failed for method PayPal Checkout Plugins für JTL-Shop 0
Neu Plugin-Update 2.4.1: JTL Exportformat Google Shopping Plugins für JTL-Shop 6
Neu Paypal Plugin läßt sich nicht installieren - SQL Fehler Plugins für JTL-Shop 2
Neu Paypal Plugin 2.0.1 Merachant JTL-Shop - Fehler und Bugs 10
Neu Plugin Fehler JTL-Shop - Fehler und Bugs 7
Neu PayPal Plugin 2.0 - Vaulting - Ist IMMER ein neues Onboarding nötig? Wie prüfen, ob OK? Plugins für JTL-Shop 6
Neu Plugin - Kindartikel in der Artikelübersicht anzeigen - SHOP-475 Plugins für JTL-Shop 7
Neu 🌟Neues Plugin: Produkt FAQ Plugins für JTL-Shop 0
Neu Suche Plugin: Zusatzartikel mit einfacher Variationsauswahl Plugins für JTL-Shop 8
Neu Neues Plugin - Der ultimative Super-Slider Plugins für JTL-Shop 0
Neu Plugin "Verwalte deinen JTL Shop mit Excel Dateien" geht wohl nicht mit JTL-Shop 5.4.1 Plugins für JTL-Shop 1
Neu Update 5..50 + Plugin: JTL Exportformat Google Shopping Export Stopp JTL-Shop - Fehler und Bugs 6

Ähnliche Themen