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
ERP Connector Shopify JTL-Wawi 1.10 3
Neu Verbindung zu Shopify Connector (App) -> "Lizensdaten ungültig" Shopify-Connector 1
Neu JTL Shopify Connector selektiver Import in JTL Shopify-Connector 2
Neu Fehler Connector Shopify Collection not found Shopify-Connector 8
Neu Update: JTL-Gambio-Connector Gambio-Connector 0
Neu Download Connector Modul .zip PrestaShop-Connector 0
Neu Biete Connector-Tools für vollautomatische Lieferantenbestellungen an uvm. Dienstleistung, Jobs und Ähnliches 2
Neu Woocommerce + JTL Connector + Litespeed Cache WooCommerce-Connector 0
Neu JTL Connector - Shopware 5 / 6: keine Erstübertragung der Daten Shopware-Connector 2
Einzelartikel als Kindartikel zu einem neuen Vaterartikel zusammenführen (JTL-Wawi + Shopware Connector) JTL-Wawi 1.8 0
Neu Probleme bei WooCommerce JTL-Connector, keine Aktivierung möglich, Bestands-Shop lahmgelegt Onlineshop-Anbindung 0
Neu Wawi zu Shopify connector Funktionseinstellungen ändern Allgemeines zu den JTL-Connectoren 0
Neu Connector extrem langsam Shopify-Connector 17
Neu JTL Connector Shopware-Connector 10
Neu Probleme beim Abgleich mit dem WooCommerce-Connector WooCommerce-Connector 0
Neu Abgleich WooCommerce / JTL mit dem Connector – Fehlermeldung WooCommerce-Connector 0
Neu Connector - benötigte Berechtigungen Shopware-Connector 4
Neu JTL-Shop 5.2.3 – Google-Shoppin-Plugin 2.3.0: Mehrere Rückgaberichtlinien (DE + Ausland) bei einem Feed / return_policy_label Plugins für JTL-Shop 0
Neu VeroPay Plugin? Kampfansage gegen PayPal? User helfen Usern 54
Neu Coupon-Steuer Plugin: Korrekte Steuerberechnung für JTL-Shop Coupons Plugins für JTL-Shop 1
Neu How to properly update order status through JTL Shop plugin? Allgemeine Fragen zu JTL-Shop 4
Neu Update auf 5.6.1. – Trusted Shops Plugin erzeugt Fehlercode 500 Installation / Updates von JTL-Shop 6
Neu 🌟Neues Plugin: 35up Automatisiertes Cross-Selling Plugins für JTL-Shop 0
Neu 🚀 Pilotkunden gesucht: HS Dynamic Pricing Plugin für JTL-Shop Plugins für JTL-Shop 0
Neu Plugin: DITH Mengenrabatt – Warenkorbrabatte nach Stückzahl (mix + match), ohne Preisänderung am Artikel Plugins für JTL-Shop 0
Neu 🚀 JTL Shop Performance Check (Free): Kostenloses Plugin Plugins für JTL-Shop 0
Neu HTTP ERROR 500 - plugin installieren JTL-Shop - Fehler und Bugs 0
Neu Neues Plugin: DITH ShipNow – Versand-Countdown ⏱️ Plugins für JTL-Shop 0
Neu Paypal Plugin JTL-Shop - Fehler und Bugs 1
Neu Fragen zum KBA Finder Plugin (CiN) Plugins für JTL-Shop 1
Neu JTL Shop Brevo Plugin meldet keine Abmeldungen an JTL Shop + Kontakte landen nicht in der Willkommenssequenz Plugins für JTL-Shop 0
Neu Neues PLugin: DITH Lieferantenbestand – realistische Lieferzeiten mit Lieferanten- + Eigenbestand Plugins für JTL-Shop 0
Neu PayPal-Plugin blockiert bei PayPal-Störung Checkout JTL-Shop - Fehler und Bugs 4
Neu Teststand auf localhost - Plugin-Lizenzen abgelaufen Plugins für JTL-Shop 2
Neu Neues Plugin: JTL Closed Shop – Zugangsbeschränkung, Pre-Sale & Wartungsmodus für deinen JTL-Shop Plugins für JTL-Shop 2
Neu KI-WaWi-Workflows: Eigene KI-Endpunkte direkt aus JTL-Workflows ansprechen – ohne Plugin, flexibel und schnell Dienstleistung, Jobs und Ähnliches 3
Neu Mindestbestellwerte nach verschiedenen Lieferarten mit dem Plugin Lieferslot Allgemeine Fragen zu JTL-Shop 1
Neu PayPal Checkout Plugin (iPhone), Probleme mit PayPal-App Plugins für JTL-Shop 0
Neu Plugin: Mengenrabatt im Warenkorb nach Artikelanzahl Plugins für JTL-Shop 0
Neu 📢 Neues Plugin "JTL Translate Pro" by Nirico.de Plugins für JTL-Shop 0
Neu JTL PayPal Plugin - keine Einstellmöglichkeiten, keine Anzeige im Frontend Plugins für JTL-Shop 2
Neu Plugin-Idee: Überkäufe Lieferantenbestände & Lieferzeiten (API/CSV/XML) in Shop & Wawi Plugins für JTL-Shop 2
Neu Plugin Manager Fehlermeldung JTL-Shop - Fehler und Bugs 4
Neu Nach Update auf PayPal 2.1.0 doppelte Zahlungsarten und Ratepay Plugin erforderlich Plugins für JTL-Shop 0

Ähnliche Themen