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 Plugin Aktivierunf [Fehlermeldung] WooCommerce-Connector 2
Abkündigung Shopware 5 Connector Shopware-Connector 1
Wichtig Beta Connector für Presta 8 mit PHP 8+ PrestaShop-Connector 33
Neu PrestaShop Connector für Prestashop 8 mit PHP 8.2 wird nicht unterstützt PrestaShop-Connector 3
Neu Passenden WooCommerce Connector zu meinem WordPress WooCommerce-Connector 8
Neu JTL Shopify Connector und Billbee frage Shopify-Connector 0
Neu JTL Connector zu SW6 auch als Testumgebung möglich ? Onlineshop-Anbindung 3
Neu Shopify Erhöhung der Varianten von 100 auf 2000 - Connector App Problem Shopify-Connector 4
Neu Greyhound JTL-Connector funktioniert nach Update auf 1.8.12 nicht mehr richtig Technische Fragen zu den JTL-Connectoren 5
Neu Connector anlegen in Verkaufskanälen nicht möglich, Verbindungstest schlägt fehl Shopware-Connector 2
Neu JTL Connector Woocomerce für PHP Version 7.4 WooCommerce-Connector 2
Fehler beim Datenbank - JTL WAWI Connector WooCommerce-Connector 1
Neu Woocommerce mit JTL Connector "Die Shop-URL verweist nicht auf einen gültigen Shop" WooCommerce-Connector 4
JTL WAWI 1.8.11.1 / JTL CONNECTOR / Shopware 6 JTL-Wawi 1.8 4
Neu Connector für php 8.3 / Prestashop 8.1.3 PrestaShop-Connector 6
Neu Migration von eCommerce-Integrator auf JTL Connector - Software 5 Shop Onlineshop-Anbindung 2
Neu JTL Connector WooCommerce überträgt keine Bestellungen mehr WooCommerce-Connector 3
Neu JTL Connector Woocommerce nicht möglich WooCommerce-Connector 9
Neu Woran kann es liegen, dass ein neu erstellter Connector-Verkaufskanal nicht in der Statusliste des Workers vorkommt? Shopify-Connector 2
Neu Connector überträgt keine Bilder Shopify-Connector 1
Neu Shopify Connector Abgleich endet nicht Shopify-Connector 6
Neu Shopware 6 Connector = Mangelhaftes Produkt! Shopware-Connector 0
Neu WooCommerce Connector - Keine Produkte in link_product Tabelle WooCommerce-Connector 0
Connector übernimmt nicht alle Bestellungen WooCommerce-Connector 0
Wichtig 👉 Wichtiger Hinweis: Abkündigungsfristen JTL-Wawi 1.5 / MSQL-Server 2014 / JTL-POS für Android 7 / JTL-Connector für Shopware 5 News, Events und Umfragen 2
Neu Keine Übertragung der Preise mehr seit Connector Update von 1.41.2 auf 1.42.0 WooCommerce-Connector 9
Neu JTL WooCommerce-Connector leert bei Artikelupdate Inhalte der Felder WooCommerce-Connector 3
Neu JTL-Connector übernimmt den Bestellstatus in Woocommerce nicht WooCommerce-Connector 2
Neu Plugin für Boomerang Versandverpackungen Plugins für JTL-Shop 1
Neu Netto für Händler gleich, Brutto für Endkunden - Plugin oder andere Alternative? Allgemeine Fragen zu JTL-Shop 0
Neu 💙 Neues Plugin: Wunschzettel Plus (Wunschzettelauswahl direkt am Artikel) Plugins für JTL-Shop 0
Neu Paypal Plugin Version 1.2.0 läuft und 1.4.0. läuft nicht auf derselben Umgebung Plugins für JTL-Shop 0
Neu Fehlermeldung nach Bestellabschluss durch Plugin Gelöste Themen in diesem Bereich 7
Neu Neues Plugin: Google Translate / Übersetzer (DSGVO-konform und weitere Features) Plugins für JTL-Shop 2
Neu Händlerbund Plugin lässt sich nicht installieren Shop ver. 5.3.0 Plugins für JTL-Shop 1
Neu Eigene Seiten mit Plugin erstellen Technische Fragen zu Plugins und Templates 1
Neu Neues Plugin: Instagram-Feed Portlet (Als Galerie- oder Slideransicht und weitere Features) + 3x kostenlose Lizenzen Plugins für JTL-Shop 4
Neu 🌟Neues Plugin: Bounce Landingpage Plugins für JTL-Shop 5
Neu 504 Gateway Time-Out nginx bei Plugin-Updates Gelöste Themen in diesem Bereich 10
Neu Unterstützung bei JTL5-Shop-Überarbeitung gesucht - Template/Plugin uvm. Dienstleistung, Jobs und Ähnliches 1
Neu Erledigt - Plugin PayPal Checkout, Update auf 1.4.0, Komplettabsturz Plugins für JTL-Shop 1
Neu Paypal Plugin erzeugt "Quirks Mode" Betrieb / Pflege von JTL-Shop 0
Neu Mail-Versand & Plugin Doku Technische Fragen zu Plugins und Templates 2
Neu Variationen im Shop Auswahl zurücksetzen (Plugin?) Betrieb / Pflege von JTL-Shop 3
Neu NEU ✔️ PDF-Angebots-Plugin für den JTL-Shop 5 - PDF Angebote von der Produktseite oder aus dem Warenkorb heraus generieren B2C / B2B Plugins für JTL-Shop 5
Neu Neues Plugin: Hersteller Slider Portlet (Zentrierungs- oder Schwarz/Weiß-Modus, Responsive Anpassung..) inkl. 5 kostenlosen Lizenzen Plugins für JTL-Shop 4
Neu Plugin KBA Finder Implementierung/Darstellungsänderung Plugins für JTL-Shop 0
Neu Custom Template für Custom Artikel mit Plugin? Plugins für JTL-Shop 0
Neu Erfahrung mit LS-Cache Plugin Technische Fragen zu Plugins und Templates 10
Neu 🌟Neues Plugin: FRASPY Altersprüfung & IdentitätsCheck Plugins für JTL-Shop 3

Ähnliche Themen