Hallöchen,
folgender Fall: Artikel A ist rabattiert, aber im Rulebuilder nur für Endkunden (also die Standardkundengruppe). Logge ich mich mit diesem Artikel und der Rabattierung als „Artikel“ im Warenkorb nun bspw. mit einer Händlerkundengruppe an, für die die Promotion nicht gilt, dann erscheint nur „Leider ist etwas schiefgelaufen“.
Schaue ich in den Log, dann finde ich folgendes:
Uncaught PHP Exception Shopware\Core\Framework\DataAbstractionLayer\InvalidCriteriaIdsException: „Invalid ids provided in criteria. Ids should not be empty. Ids: Array ( ) .“ at DataAbstractionLayerException.php line 222 {„exception“:„[object] (Shopware\Core\Framework\DataAbstractionLayer\InvalidCriteriaIdsException(code: 0): Invalid ids provided in criteria. Ids should not be empty. Ids: Array\n(\n)\n. at /var/www/vhosts/server.de/httpdocs/sw6.server.de/vendor/shopware/core/Framework/DataAbstractionLayer/DataAbstractionLayerException.php:222)“}
Es klappt auch nicht, wenn ich den Rulebuilder ändere und den Händler ausschließe. Verschiedene PHP-Versionen durchprobiert, wir sind aktuell bei 8.4, der Bug besteht seit 6.7.0 für uns, aktuell sind wir mit dem Shop bei 6.7.10.2. Auch mit allen Plugins deaktiviert besteht der Fehler immernoch. Ich konnte nichts ergooglen und hier auch nichts relevantes finden, weiß jemand etwas von diesem Fehler und wie man ihn ggf. behebt?
Erweiterte Preise oder Promotion?
Bitte Schritt für Schritt beschreiben, wie man das nachstellen kann.
Habe leider keine Benachrichtigung über diese Antwort erhalten- es ist eine ganz normale Promotion, die unter Rabatte & Aktionen erstellt wurde. Funktioniert auch alles prima. Bis auf den oben beschriebenen Fall.
Hier eine beispielhafte Promotion und der zugehörige Rule Builder:
Nachdem Ids should not be empty angezeigt wird, würde ich tippen, dass eine der Bedingungen ein leeres Array liefert.
Ja, der Fehler dürfte nicht passieren, so könntet ihr das aber am schnellsten testen und auch beheben.
Wie meinen? Wie sollen wir das beheben?
Nachtrag: Gerade nochmal überprüft und folgende Beobachtung: Selbst wenn ich jede Bedingung entferne kommt die Fehlermeldung. Selbst wenn ich nur eine Bedingung drin lasse, die Bedingung für Rabatt auf Artikel aus Kategorie X, kommt der Fehler. Der Fehler kommt IMMER, wenn:
- Ein Artikel mit einer Promotion wird in den Warenkorb gelegt
- An der Kasse (oder vorher) wird eingeloggt
→ Fehler
Ich habe auch testweise die Kundengruppe des eingeloggten Benutzers mal auf die Standardkundengruppe abgeändert, selbst da kommt der Fehler. Wie kann das sein?
Dachte, es wären Dynamische Produktgruppen… sind ja aber Regeln. Da macht meine Aussage wenig Sinn.
Habe es eben versucht nachzustellen und kann es nicht reproduzieren. Funktioniert mit den gleichen Filtern.
Eventuell ist etwas in der Datenbank korrupt. Schon einmal versucht eine neue Rabattaktion zu erstellen mit den gleichen Bedingungen? Aber alles neu angelegt, auch Regeln?
Danke, ich versuche das bei nächster Gelegenheit nochmal und berichte!
Das würde ich ebenfalls wie einen Bug behandeln, aber für ein belastbares Ticket möglichst klein reproduzieren.
Minimalfall:
- Frische Installation oder Staging ohne zusätzliche Erweiterungen.
- Zwei Kundengruppen: Endkunde und Händler.
- Ein Produkt in den Warenkorb legen.
- Promotion/Rabatt so konfigurieren, dass sie nur für Endkunden gilt.
- Warenkorb als Gast mit gültiger Promotion aufbauen.
- Danach mit einem Händlerkonto einloggen.
Wenn dann wieder InvalidCriteriaIdsException mit leerer ID-Liste kommt, ist das deutlich stärker als „bei uns passiert es“. Dann würde ich zusätzlich notieren:
- Shopware-Version
- PHP-Version
- Promotion-Typ: Artikelrabatt, Warenkorbrabatt, Code oder automatisch
- Rule-Konfiguration
- ob der Fehler auch mit Standard-Theme und ohne zusätzliche Erweiterungen kommt
Eine Promotion, die nach Login nicht mehr gültig ist, sollte entfernt oder neu berechnet werden, aber keinen Login-Abbruch mit generischem Fehler erzeugen.
Entwarnung: Doch ein User-Error. Ohne meines Wissens wurde da „mal schnell“ eine Funktion in ein Theme implementiert, das anscheinend etwas mit den Warenkorbpositionen etwas einstellt. Die konkrete Funktion ist:
$productId = $event->getLineItem()->getReferencedId();
$product = $this->productRepository->search(
new Criteria([$productId]), $context)
->get($productId);
Das ergibt fast immer 0. Die Funktion habe ich korrigiert, Fehler damit behoben. Sorry und danke für die Teilnahme! 