Admin-Komponente kann nicht durch mehrere Plugins zeitgleich überschrieben werden

Hallo zusammen,

wir stehen gemeinsam mit einem Evolve-Kunden vor einem riesen großen Problem und leider hilft der Shopware-Support hier nicht weiter und verweist lediglich auf das Forum. Ich hoffe, dass jemand eventuell schon etwas ähnliches beobachtet hat und uns weiterhelfen kann.

Wir haben vier Plugins im Einsatz, die alle die Bestellübersichts-Liste im Adminbereich erweitern. Folgende Plugins sind im Einsatz (Shopware 6.5.6.0, aktuelle Pluginversionen):

- Versandart, Zahlungsart, E-Mail und Lieferland in Bestellübersicht

- Status für Bestellung, Bezahlung und Lieferung konfigurieren

- Pickware ERP

  • Sowie ein eigenes Plugin (erweitert das orderCriteria um die Lineitems, um die bestellten Artikel direkt in der Liste aufzulisten)

Pickware und das jlau-Plugin erweitern ebenfalls das orderCriteria, gbmed lediglich das Template.

Leider ist es jetzt so, dass sobald eine (mehr oder weniger beliebige) Kombination dieser Plugins aktiviert ist, das orderCriteria bei einem Folgerequest nicht mehr ordentlich erweitert wird (wenn man bpsw. auf Seite 2 der Liste blättert oder einen Filter anwendet). Es fehlen dann die Associations im /api/search/order Request.

Es scheint immer dann aufzutreten, wenn Pickware oder das Gbmed-Plugin aktiviert sind.

Das orderCriteria wird „ganz regulär“ erweitert:

computed: {
        orderCriteria() {
            let criteria = this.$super('orderCriteria');

            criteria.addAssociation('lineItems');

            return criteria;
        }
    },

Jetzt wird es aber richtig kurios: Ich habe das Gbmed-Plugin einmal komplett „gestripped“, also alle Dateien entfernt bis auf die, die die sw-order-list Komponente erweitern. Es ist jetzt nur noch eine leere Override-Methode enthalten: const { Component } = Shopware; Component.override(‚sw-order-list‘, {});
Und totzdem geht es dann kaputt, sobald das Plugin aktiv ist.

Ich habe mal unser eigenes Plugin analog reduziert, so sehen die beiden minifizierten JavaScript-Dateien aus, die dann letztlich vom Adminbereich geladen werden. Die unterscheiden sich lediglich in den letzten Zeichen und da scheint es einfach nur etwas anders minifiziert worden zu sein, dürfte aufs Selbe hinauslaufen:

!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=(window.__sw__.assetPath + '/bundles/eworderlisttest2/'),r(r.s="alaE")}({RiF4:function(e,t){Shopware.Component.override("sw-order-list",{})},alaE:function(e,t,r){"use strict";r.r(t);r("RiF4")}});

!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=(window.__sw__.assetPath + '/bundles/gbmedconfigstates/'),r(r.s="f1Eo")}({f1Eo:function(e,t,r){"use strict";r.r(t);r("kG6t")},kG6t:function(e,t){Shopware.Component.override("sw-order-list",{})}});

Wenn das erste aktiviert ist: Alles gut. Wenn das zweite aktiviert ist: Kaputt.

Folgendes wurde schon erfolglos probiert:

  • Unterschiedliche Reihnefolgen in der override angegeben
  • Drittanbieter-Plugins, die eigentlich per Composer installiert waren, auf dem „alten“ Weg per Zip-Upload installiert, um auszuschließen, dass es an unterschiedlichen Ordnerstrukturen liegt
  • Mit allen Pluginherstellern sowie Shopware kommuniziert - ohne Ergebnis

Kann hier irgendjemand weiterhelfen?

Viele Grüße,
Malte :slight_smile:

Das Problem hatte ich auch schon öfters. Leider habe ich keine zufriedenstellende Lösung gefunden, als die Core Methode eins zu eins zu kopieren und anschließend den individuellen Code hinzuzufügen. Leider ist dies nicht Updatesicher und müsste mit jedem Shop Update überprüft werden, ob der Code noch mit dem Core übereinstimmt.

Aktuell kann meiner Meinung nach eine Admin Komponente nicht von zwei oder mehr Erweiterungen extenden werden.