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 WooCommerce Connector Problem mit nachträglich abgebrochenen Bestellungen Onlineshop-Anbindung 0
Neu Connector Verhalten mit Tracking Nummern und Versandbestätigungen Shopify-Connector 0
Neu Drittshop Anbindung über JTL Connector Onlineshop-Anbindung 1
Neu Woran erkennen, dass der Connector funktioniert? Technische Fragen zu den JTL-Connectoren 0
Neu Prestashop 8.1.7 neuster Connector Fehler beim einlesen von Bestellungen PrestaShop-Connector 1
Die Lizenzdaten sind ungültig... kein Connector Abgleich Shopware-Connector 17
Neu Eigener Datenaustausch anstelle JTL-Connector? WooCommerce-Connector 3
Neu Wird der Woocommerce Connector eigentlich noch gepflegt? WooCommerce-Connector 0
Neu JTL-Connector Shopware aktuell nicht erreichbar Shopware-Connector 15
Neu SW 5.7.18: welcher Connector mit welcher Wawi? Shopware-Connector 1
Neu JTL ERP‑Connector Shopify-Connector 0
Neu WooCommerce JTL Connector nach Back-Up ist deaktiviert WooCommerce-Connector 1
Neu JTL-Connector funktioniert nicht mehr WooCommerce-Connector 3
Neu Gibt es keinen Gambio Connector mehr mehr mit PHP8 und höher? Gambio-Connector 4
Neu JTL Connector - Shopify Abgleich. Bestellbestätigungsemails werden die ganze Zeit dem Kunden gemailt. Shopware-Connector 2
Neu Fehler bei Connector Shopify-Connector 4
Neu GPSR Produktverordnung JTL Connector Shopify User helfen Usern - Fragen zu JTL-Wawi 0
Neu Shopify Connector funktioniert nicht mehr, Fehlerlog anbei Shopify-Connector 10
Gelöst TSE Connector Vertrag kündigen Allgemeine Fragen zu JTL-POS 2
Neu Shopify Connector, Änderung der URL Onlineshop-Anbindung 0
Neu JTL-Connector / 2 Shops / Unterschiedliche Lagerbestände zuweisen Shopify-Connector 0
Neu JTL-ERP-Connector funktioniert ab 20.09.2024 nicht mehr mit Shopify!? Shopify-Connector 2
Neu Dringende Hilfe benötigt: JTL-Connector Fehler beim Shopware-Abgleich Shopware-Connector 15
Neu Für den Shop-Connector konnte kein Steuersatz zugeordnet werden. WooCommerce-Connector 2
Neu Prestashop Connector 2.0.0 ignoriert deaktivierte Überverkaufseinstellung bei Artikelupload PrestaShop-Connector 0
Neu Plugins für den Shopify Connector Shopify-Connector 1
Neu Dringende Hilfe benötigt: JTL-Connector Fehler beim Shopify-Abgleich trotz "200 OK" - Hat jemand eine Lösung? Shopify-Connector 1
Neu DRINGEND Hilfe - Google Analytics Plugin JTL-Shop - Fehler und Bugs 4
Neu PlugIn: JTL GPSR Plugins für JTL-Shop 12
Neu Plugin Suche: Mailchimp Plugins für JTL-Shop 0
Neu Plugin mit transparentem Hintergrund (Auswahlassistent) Plugins für JTL-Shop 1
Neu Probleme mit PayPal-Plugin: Bestellungen "pending" & doppelte Zahlungen nach Direktzahlung Plugins für JTL-Shop 0
Neu Template Dateien Rendern im Plugin Plugins für JTL-Shop 6
Neu 🎉 Neues Plugin: "Versandkosten und Lieferzeit automatisch beziehen - ShipMonk Extension" 🎉 Plugins für JTL-Shop 1
Neu 🎉 Neues Plugin: "Versandkosten und Lieferzeit automatisch beziehen - DHL-Express Extension" 🎉 Plugins für JTL-Shop 3
Neu S: Plugin Dropdown-Menü für meine Kategorien Plugins für JTL-Shop 10
Neu "Warenkorb teilen als Link" Plugin by Visitmedia Plugins für JTL-Shop 2
Neu Das JTL Shop gratis Plugin GPSR Verordnung - sieht mies aus, belastet die Datenbank, Excel Bearbeitung unmöglich Betrieb / Pflege von JTL-Shop 30
Neu PAYONE Plugin keine Bestellabschluss Seite Plugins für JTL-Shop 0
Neu 📢 Neues Plugin: "GPSR Herstellerinformationen" 📢 Plugins für JTL-Shop 31
Neu Anbindung an Idealo mit Plugin gesucht Schnittstellen Import / Export 1
Neu Mollie Plugin und stornierte "Klarna Pay Later" Zahlungsaufforderungen. Plugins für JTL-Shop 0
Neu Plugin: WooCommerce Wallet oder Gutscheine mit JTL nutzen - Fehler in der MwSt User helfen Usern - Fragen zu JTL-Wawi 0
Neu JTL Plugin fuer Wordpress Plugin wirft Error/success Fehler WooCommerce-Connector 2
Neu JTL Google Shopping Plugin - Bilder Updaten Plugins für JTL-Shop 3
Neu Wie andere Länder und Sprachen vom Google Shopping Plugin mit dem Merchant Center verbinden Plugins für JTL-Shop 6
Neu Frage zu Plugin Entwicklung : IO Request im Admin Technische Fragen zu Plugins und Templates 2
Neu Google Shopping Plugin - Artikel filtern Plugins für JTL-Shop 3
Neu Rollenbasiertes Kunden-Plugin (B2B) Plugins für JTL-Shop 1
Neu Frage zur Plugin Entwicklung Plugins für JTL-Shop 3

Ähnliche Themen