ConfiguratorSet Bug

Hi allersiets, ich habe bereits hierzu ein Artikel veröffentlicht, was anscheinend etwas zu unübersichtlich wurde. Daher möchte ich das Problem noch mal hier ansprechen. Ich möchte also folgenden Artikel per API importieren: $new\_article = array( 'name' =\> 'Testartikel', 'description' =\> 'Test description', 'active' =\> true, 'mainDetail' =\> array( 'number' =\> 'swTEST52b04c97da770', 'inStock' =\> 15, 'unitId' =\> 1, 'prices' =\> array( array('customerGroupKey' =\> 'EK', 'from' =\> 1, 'to' =\> '-', 'price' =\> 400) ) ), 'taxId' =\> 1, 'images' =\> array( array( 'mediaId' =\> 573, 'options' =\> array( array( array('name' =\> '0,2 Liter'), array('name' =\> 'schwarz'), ), array( array('name' =\> '0,5 Liter'), array('name' =\> 'schwarz'), ), array( array('name' =\> '0,8 Liter'), array('name' =\> 'schwarz'), ), ) ) ), 'configuratorSet' =\> array( 'name' =\> 'Test-Set', 'groups' =\> array( array( 'name' =\> 'Flascheninhalt', 'options' =\> array( array('name' =\> '0,2 Liter'), array('name' =\> '0,5 Liter'), array('name' =\> '0,8 Liter'), ) ), array( 'name' =\> 'Größe', 'options' =\> array( array('name' =\> 'schwarz'), ) ) ) ), ); Es wurde vom Beispiel von Rest API Beispiel abgeleitet. Ich habe lediglich die Varianten ausgelassen, da man diese auch nachträglich importieren kann. Zudem habe ich die mediaID angepasst um ein bestehendes Bild zu haben, die configuratorSet groupsID ausgelassen, da sonst eine Fehlermeldung geworfen wird, sowie unter images eine zweite Option eingefügt um mein Problem zu demonstrieren. Nach meinem Verständniss müsste ein Artikel angelegt werden, mit einem Bild, das für die Varianten mit Optionen mit Werten 0,2 oder 0,5 angezeigt wird. Wenn man im Backend auf den Artikel geht und dann auf Bilder, dann Bild markiert und dann Konfiguration öffnen klickt, dann müssten die beiden Optionen jeweils untereinander Aufgelistet werden. Stattdessen schaut es bei mir aber so aus: D.h. die erste Option wird doppelt eingetragen und nicht beide jeweils einmal. Tabellarisch niederschlägt sich dies in s_article_img_mapping_rules: dort wird die erste OptionsId für den Artikel doppelt eingefügt anstelle der ids 1 und 2, die in der Tabelle s_article_configurator_options: Ich gehe davon aus dass dies ein Bug ist, wäre daher echt dankbar, wenn dies bestätigt oder widerlegt werden könnte. Bitte daher um Feedback jeglicher Art. Ich werde daher auch ein Bug anlegen, man möge mir verzeihen wenn ich selbst irgendwas falsch mache :slight_smile: Gruß Edin

Also, da bisher keine Reaktion gekommen ist, habe ich versucht es selbst zu debuggen und dabei kam folgendes bisher raus: Damit man Debuggen kann habe ich den API Aufruf auf eigenem Plugin über Create Funktion ausgeführt Sprung zu (engine/Shopware/Components/Api/Resource/Article.php Zeile 498). In der Zeile 510 wird prepareAssociatedData Aufgerufen Sprung zu (engine/Shopware/Components/Api/Resource/Article.php Zeile 685) In der Zeile 706 erfolgt der Aufruf von prepareImageAssociadetData Sprung zu (engine/Shopware/Components/Api/Resource/Article.php Zeile 1437) Dort geht es weiter bis zum AUfruf vom createImageMappings in 1509 Sprung zu (engine/Shopware/Components/Api/Resource/Article.php Zeile 1668) In einer Schleife (1678) werden beide Optionen (0.2 Liter, 0.5 Liter) verarbeitet. Entscheinend dabei ist der Aufruf von getCollectionElementByProperties (in 1684). Da wird wohl geschaut ob die Option bereits existiert. Wenn die nicht existiert, wird diese angelegt, ansonsten wird bestehende Option verwendet, um Duplikate zu vermeiden. Da meine beide Optionen neu sind, haben die noch keine id, also ist id Wert null. So anscheinend passiert aber dann folgendes. id mit dem Wert null wird erstmal im Speicher der ersten Option zugeordnet. Dann kommt die zweite Option, die ebenfalls neu ist und die id ebenfalls Wert null hat. So jetzt wird mit aber mit getCollectionElementByProperties und fortfolgenden Aufrufen nachgeschaut ob Option mit id Wert null existiert, und dummerweise die erste Option im Speicher entdeckt. Das sorgt dafür, dass die beiden Optionen zwar gespeichert werden, aber bei Bilder Mappings die erste Option für alle Mappings verwendet wird. Wenn später Artikel mit gleichen Optionen importiert werden, läuft alles richtig da zu der Option eine id gefunden werden kann. Ich habe das ganze mit meinem laienhaften Kenntnissen beschrieben, aber dies sollte eigentlich ausreichen um den Fehler zu beheben. Vielleicht kann mir jemand helfen was ich an entsprechenden Klassen anpassen muss, um diesen Import durchführen zu können. Denkbar ist dass dies funktioniert wenn man Optionen von Anafang an die id mitgibt, aber das ist total umständlich. Denn dann muss ich in meinem Import Skript slebst eine id Verwaltung implementieren, um bei der Wiederholung die gleiche id zu verwenden. Ehrlich gesagt finde ich grundsätzlich es schwach, wenn man über eine API die Datenbank ids mitübergeben muss. Das geht denke ich schon besser, oder ? Viele Grüße Edin

So langsam wird das ganze wirklich undurchschauber. Nachdem ich jetzt beim Import eigene ids für die configuratorSet Optionen definiere, entstehen neue Probleme: 1) obwohl ich die ids mit angebe, scheinen diese dennoch anders in der db abgespeichert zu werden. 2) wenn beim Import eines Artikels, ein Mix aus bestehenden und nicht bestehenden Optionen angegeben wird, bekomme ich einen Fehler, dass die id für die nicht bestehende Option nicht existiert. Die anderen Optionen zuvor waren ebenfalls nicht existent, wurden aber dann erstellt. Wäre echt dankbar für einen Hinweis, wie dies mit den Optionen ids gehandabt werden soll! Sollen diese irgendwie vor dem Artikelimport importiert werden? Wie vergebe ich die ids wenn verschiedene Artikel bei gleicher Gruppe (z.B. “Größe”) zum Teil überlappende Werte haben (Artikel A hat L XL XXL, Artikel B hat M L XL).

Also in dem (was ich aktuell habe) gebe ich gar keine IDs an, weder bei den groups noch options. Damit erzeugt er bei mir Optionen/Gruppen, die noch ncith vorhanden sind, matched aber über die Bezeichner. Also, group statt groupId, und option statt optionId. Ich habe für das Varianten-Thema ehe auf 4.2.1 gewechselt, da ist das ganze Prozedere an sich deutlich strukturierter. Bei mir hat nur leider der Variantenvater keine Option als aktiv, obwohl im Beispiel der Vater ohne Optionen sondern nur mit Gruppen angelegt wird: http://wiki.shopware.de/Shopware-4-REST … rce_ab_4.2 Ich dachte, dass der das selbst dann merkt, welche Optionen der Kinder gegeben sind. Hast Du da vielleicht eine Idee? :slight_smile: … Niklas

Hi, ja das hatte ich auch. Dann werden die Optionen und Gruppen usw. angelegt, doch die Bilder-Optionen Zuordnung ist fehlerhaft. Aber auch nur dann wenn die Option zum ersten mal angelegt wird. Nimm einfach bitte mal mein Article Array von oben und importiere es auf einer frischen Installation und schau dir (oder ev. auch jemand von Shopware) dann mal an im Backend, wie die Bild-Zuordnung zu den einzelnen Optionen ist (Artikel->Übersicht->Artikel auswählen-> Bilder Tab -> Bild auswählen -> Konfiguration Öffnen klicken) . Du musst lediglich von meinem Beispiel die beim image Media id zu einem existierenden Bild anpassen (oder einfach stattdessen Link des Bildes benutzen). Wenn dir irgendwas auf meinem Array als fehlerhaft erscheint, sag es mir bitte. Bzgl. deines Problems, kann ich dir nicht so ganz folgen, wahrscheinlich ergibt sich das Problem bei mir noch :slight_smile: Was meinst du mit Vater ? Den Parameter isMain ? Gruß Edin

[quote=“edin”]… Du musst lediglich von meinem Beispiel die beim image Media id zu einem existierenden Bild anpassen (oder einfach stattdessen Link des Bildes benutzen). Wenn dir irgendwas auf meinem Array als fehlerhaft erscheint, sag es mir bitte.[/quote] OK, mal ausprobieren, die Bildzuordnungen kommen bei mir die nächsten Tage auch dran :slight_smile: [quote=“edin”]Bzgl. deines Problems, kann ich dir nicht so ganz folgen, wahrscheinlich ergibt sich das Problem bei mir noch :slight_smile: Was meinst du mit Vater ? Den Parameter isMain[/quote] Mit Artikelvater meine ich den Artikel, der die Varianten-Artikel “beherbergt” … isMain ist ja nur die Standard-Vorauswahl, welche Varianten als erstes angezeigt werden soll. So habe ich das verstanden. Und, der besagte Hauptartikel bei mir hat korrekt die Varianten drin, diese haben auch die Optionen drin, der Hauptartikel hat auch die Gruppen aktiv, aber eben nicht alle verfügbaren Optionen. Ich glaube, dass muss man eben selbst manuell setzen … Wenn ich etwas herausfinde gebe ich bescheid. Bis dahin viel Erfolg

Hi, danke das wäre echt cool. Da bisher keine Reaktionen aufkamen bin ich ein wenig verunsichert, ob ich was falsch mache oder ob das ein Bug ist. Hab echt einiges ausprobiert, aber leider ohne erfolg. Ich denke bei mir und bei dir auch liegt das Problem darin, dass man es auf verschiedene Wege machen kann (wobei alle ja richtig sein sollen). Ich für mich importiere folgendermaßen, dass Hauptartikel und die main Variante quasi identische Inhalte erhalten. Optionen und Gruppen aber schreibe ich nur in der Variante drin, nicht im Hauptartikel. So hat es bei mir denke ich funktioniert.

Also, meine ersten Varianten-Artikel mit spezifischen Bildern klappen bei mir. Wie gesagt, den Varianten-Teil löse ich mit Shopware 4.2.1 [list=1] [*] Artikel-Vater anlegen (über die Artikel-Resource) mit den Configurator-Set Groups und. z.B. einem Satz von Artikel-Bildern (diese werden erst über die Media-Resource anlegegt und dann mit der ID verwiesen)[/*] [*] Kinder anlegen über die Varianten-Resource mit dem Verweis zum Vater-Artikel, die Bilder werden hier nach dem gleichen Prinzip im Kind aufgebaut (also erst erstellen wenn noch nicht vorhanden, sonst direkt die ID nehmen)[/*] [*] nach dem erstellen/updaten der Kinder aktualisiere ich die Configurator Options im Vater, weil das eben die Datenstruktur unserer Artikeldaten so bestimmt[/*][/list] Das einzige was bei mir fehlt ist ein Vergleich von aktuellen Bildern im Vater/Kind, weil ich sehe, dass im Vater alle Artikel hinterlegt sind und in den Kindern nur noch Einträge mit Verweisen auf die im Vater. Aber an sich funktioniert das bei mir gerade alles richtig, inkl. Bildwechsel bei der Variantenauswahl. Einen Fehler habe ich per pull request auf Github bereits ausgelöst, weil es beim anlegen von noch nicht vorhandenen Optionen einen Fehler bezüglich der Bezeichner gab, mal sehen was daraus wird. Ich kenne deine Datenstrukturen nicht, aber bei mir geht das gerade so wunderbar auf, gerade mit Hilfe der neuen Ressourcen für die Varianten! EDIT: Wenn ich bei mir nur eine Varianten Update (also ein Kind) mit einem neuen Bild, dann hatte ich auch diese Bildauswahl mit 2 mal dem gleichen Eintrag stehen. Nach einem Abgleich aller beteiligten Artikel (Vater und Kind) war diese Doppelung aber nicht vorhanden, sieht im Backend und Frontend dann jedenfalls alles richtig aus! Schöne Grüße, Niklas

Hi Niklas, ja meine Vorgehensweise war ja so, dass ich alles über Artikel Ressource mache, weil es für mich beim Programmieren des Import Skripts einfacher war alles in einem Zug abzuarbeiten. Ich versuche gerade deinen Text nachzuvollziehen und dazu habe ich ein paar Fragen: was meinst du mit “nach dem erstellen/updaten der Kinder aktualisiere ich die Configurator Options im Vater, weil das eben die Datenstruktur unserer Artikeldaten so bestimmt”? Also was ist mit Configurator Options aktialiseren gemeint? Der Satz “Das einzige was bei mir fehlt ist ein Vergleich von aktuellen Bildern im Vater/Kind, weil ich sehe, dass im Vater alle Artikel hinterlegt sind und in den Kindern nur noch Einträge mit Verweisen auf die im Vater. Aber an sich funktioniert das bei mir gerade alles richtig, inkl. Bildwechsel bei der Variantenauswahl.” Da kann ich dir irgendwie nicht so ganz folgen :slight_smile: Was meinst du denn da mit Vergleich von aktuellen Bilder und Einträge in Kindern mit Verweisen auf die Vatereinträge ? Gibt es eigentlich einen Grund warum du die Bilder zuerst über Media Ressource anlegst und dann über id gehst, anstelle des Links zum Bild ? Und was ist in deinem letzen Satz der Abgleich zwischen Vater und Kind ? Sind das alles irgendwelche API Aufrufe ? Gruß Edin

[quote=„edin“]was meinst du mit „nach dem erstellen/updaten der Kinder aktualisiere ich die Configurator Options im Vater, weil das eben die Datenstruktur unserer Artikeldaten so bestimmt“? Also was ist mit Configurator Options aktialiseren gemeint?[/quote] Das Configurator Set des Vaters setzt sich ja aus den groups und options zusammen. Ich lege den Vater zunächst nur mit den groups an, und mit jedem Kind update ich diese options im Vater dann. Und, mit Datenstruktur meine ich, weil bei uns eben auch ein selektierter Datenabgleich aus unserer Warenwirtschaft an den Shop funktioniert, und die Artikeldaten deswegen ehe alle auch getrennt werden können. [quote=„edin“]Was meinst du denn da mit Vergleich von aktuellen Bilder und Einträge in Kindern mit Verweisen auf die Vatereinträge?[/quote] Das habe ich mittlerweile auch drin … also, ich update bei uns nur Bilder, wenn sich was an den zu exportierenden Daten geändert hat. Deswegen vergleiche ich die Bilder immer. Bei den Varianten ist das nur etwas anders, wenn du dir mal die Artikeldaten anschaust siehst du, was ich meine. [quote=„edin“]Gibt es eigentlich einen Grund warum du die Bilder zuerst über Media Ressource anlegst und dann über id gehst, anstelle des Links zum Bild ?[/quote] Bei mir steckt schon etwas Logik im Bildabgleich, die ich an anderen Stellen mitnutzen möchte, das macht das ganze deutlich dann ordentlicher :slight_smile: [quote=„edin“]Und was ist in deinem letzen Satz der Abgleich zwischen Vater und Kind ? Sind das alles irgendwelche API Aufrufe ?[/quote] Auch das habe ich gelöst und war mein Fehler, lag am Bildabgleich. Genau wie bei den normalen Artikeln werden da Bilder nur angehängt beim Abgleich, da muss man also aufpassen, ähnlich wie beim Abgleich mit normalen Artikeln. Dadurch sind diese Zuordnungen doppelt entstanden. Schöne Grüße, Niklas

1 Like

Hi Niklas, danke für die Erklärungen, von dir kann ich glaub ich so einiges lernen :slight_smile: . Ich sehe schon, dass die ganze Geschichte bei dir um einiges weiter geht als bei mir. So ein Abgleich zwischen Warenwirtschaftssystem und Shop setzt natürlich viel mehr Logik und Prozesse voraus, als ein initialer Import, was ich ja anstrebe. Dannach werde ich vermutlich nur noch Updates für die Bestände benötigen, da sich die Artikeln nicht so oft ändern werden, bzw. die Verwaltung von der Hand ablaufen wird. Den Ansatz, dass man aber erstmal nur die Gruppe importiert und die Optionen erst anschließend mit Varianten, finde ich interessant, werden ich ausprobieren. Mein Problem ergibt sich aber auch eben beim Anlegen von neuen Optionen. Wenn diese da sind, läuft alles rund, also für die nachfolgenden Artikeln. Ich denke, da die meinsten Shops, die API verwenden bereits seit einiger Zeit laufen, werden nur noch selten, neue Optionen eingepflegt und somit fällt der Fehler auch nicht unbednigt auf. Vor allem, sollte dieser Fehler erst seit 4.2. existieren. Eine Lösung für neue Optionen hast du bisher noch nicht oder ? Bzgl. der Bilder würde ich eventuell auch auf Media Ressource umsteigen und mit der id arbeiten. Hast du nicht eventuell ein Beispiel für mich, wie so ein Media Ressource Array auszusehen hat ? Wie überträgst du die eigentlichen Bilder an sich? Per FTP in ein /image Unterordner, oder gibt es hierzu auch irgendwelche standardisierte Möglichkeiten ? Gruß Edin

:slight_smile: [quote=„edin“]Mein Problem ergibt sich aber auch eben beim Anlegen von neuen Optionen. Wenn diese da sind, läuft alles rund, also für die nachfolgenden Artikeln. Ich denke, da die meinsten Shops, die API verwenden bereits seit einiger Zeit laufen, werden nur noch selten, neue Optionen eingepflegt und somit fällt der Fehler auch nicht unbednigt auf. Vor allem, sollte dieser Fehler erst seit 4.2. existieren. Eine Lösung für neue Optionen hast du bisher noch nicht oder ?[/quote] Also, ich gebe bei den Optionen immer nur den Optionsnamen an, also „option“ statt „optionId“ die explizite ID. Das klappte vor 4.2 auch ohne Eingriffe, seit 4.2 ist das glaube ich wirklich defekt, weswegen ich eine lokale Änderung durchführen musste. Und zwar wurden bei mir neue Optionen mit dem Namen „Object“ angelegt, wenn man sich die passende Stelle anguckt fällt das schnell auf. Diesen Bug (+ Fix) habe ich schon bei Github als Pull-Request bereitgestellt (hier), da muss man jetzt abwarten, wie schnell die Stelle geprüft wird … aber - mit dieser kleinen Änderung legt er bei mir korrekt die noch nicht im System vorhandenen Optionen bei den calls an, vielleicht hilft das ja auch Dir. [quote=„edin“]Hast du nicht eventuell ein Beispiel für mich, wie so ein Media Ressource Array auszusehen hat ? Wie überträgst du die eigentlichen Bilder an sich? Per FTP in ein /image Unterordner, oder gibt es hierzu auch irgendwelche standardisierte Möglichkeiten?[/quote] Da habe ich mich streng an die API gehalten, mehr als die Standard-Sachen fülle ich nicht. Und, welche Pflichtfelder existieren, siehst du z.B. in der Media-Resource in der prepareMediaData: album, file, description … Und, die Bilder liegen bei mir in einem seperaten Ordner der an sich erst einmal nichts mit Shopware zu tun hat, aber auchd as hat ja immer etwas mit den Daten zu tun wie und woher die kommen :slight_smile: Achte nur darauf: Nach dem create der Media-Resource löscht er das Urpsrungsbild auf dem Server, vor 4.2 gab es noch einen Fehler wie der name des Bildes im Media-Manager angelegt wurde, deswegen ist da etwas drumgebaut wurden von mir was aber vielleicht auch etwas speziell ist … Aber prinzipiell, über den Media-Manager erstellen und dann die ID im Artikel verweisen, alle anderen Feinheiten bestimmen deine Daten und dein Workflow :slight_smile: Und, der Vorteil der VariantResource ist, dass du den Varianten somit nur die Bilder geben musst und nicht selbst die Optionen den Bildern zuweisen musst. Aber, dass ist noch viel genauer (und besser) im Wiki beschrieben :slight_smile: Schöne Grüße! Niklas