Richtige Anwendung des Shopware Migrationsplugins in Verbindung mit Magento

Shopware-Version: 5.2.5

Migrationsplugin-Versiion: 2.5.0

Hi Zusammen,

nach einigen Tests mit dem Shopware Migrationsplugin und in Verbindung mit dem Magento System 1.9.2.4 hätte ich mal eine Frage zur korrekten Anwendung der Eigenschaftsfelder. Im Magento-Shop hatte ich nur einige wenige Felder, die filterbar waren. Diese werden mir im Migrationstool auch entsprechend angezeigt. Ein Screenshot zur Verdeutlichung ist anbei: Es geht um die gelb markierten Felder. 

Auf der Wiki-Seite zur Migration: http://community.shopware.com/\_detail\_1011\_797.html wird ja folgendes zu den Eigenschaften beschrieben: 

  • Eigenschaften : Legen Sie vor der Migration eine Gruppe an, in welche alle Artikel-Eigenschaften von Magento migriert werden.
  • Benutzerdefinierte Eigenschaften : Es werden die benutzerdefinierten Eigenschaften importiert. Diese tauchen beim Attribut-Mapping auf. Wenn diese migriert werden sollen, müssen in SW vorab entsprechende Attributsfelder angelegt werden.

Ich habe daraufhin einmal folgende Konstellationen probiert:

  • 3 Eigenschaftsgruppen angelegt (ohne Optionen)
    • 1 Set angelegt „Wein“, welches die drei Gruppen zugeordnet hat
    • Dann dieses Set gemappt auf die drei Attribute: 

Im Anschluss nur versucht die Produkte zu importieren: 

Die Artikel werden daraufhin importiert allerdings ohne Eigenschaften. 

2. Test

Zusätzlich zu meinen o.g. Einstellungen habe ich entsprechende Optionen für das Land angelegt. Das waren nur eine handvoll. Im Anschluss habe ich wieder einen Import versucht, die Eigenschaften werden wiederum nicht mit importiert mit den Artikeln. 


Hat mir jemand eventuelle einen Tipp, wie ich hier korrekt vorgehen sollte um auch meine Filtereigenschaften in Shopware importieren zu können? 

Danke euch.

Liebe Grüße

Kevin

Hi Zusammen,

komme hier nach wie vor nicht weiter in der Angelegenheit. Finde einfach keine Möglichkeit meine Eigenschaften in Shopware zu bekommen. Wollte es vermeiden durch den kompletten Code vom Plugin zu gehen um das Importverhalten zu verstehen. Ist ja doch kein ganz kleines Plugin :slight_smile:

Falls noch jemand eine Idee hätte, wäre ich euch dankbar.

Liebe Grüße

Kevin

Hallo Kevin,

habe exakt dasselbe Problem mit einem Magento 1.7.0.2.
Großer Katalog mit 140 Attributen, kein Filterattribut wird auf die Sets gemappt.

Auch die regulären Attribute machen Probleme. In Shopware 5.2. kann man ja Freitextfelder mit beliebigen Feldnamen definieren (statt der unsäglichen attrX). Leider werden auch diese nicht gemappt. Man kann Sie zwar im Mapping hinzufügen, das Importmodul importiert scheinbar aber nur attr1-20.

Hast Du mittlerweile eine Lösung gefunden?

Grüße

Raphael

Hi Raphael,

ich brauche denke ich noch 2-3 Wochen um hier genauere Aussagen treffen zu können. Fakt ist eine reine Migration über das Migrationstool ist aus meiner Sicht nicht möglich, da das Verständnis bezüglich der Attribute in Magento und Shopware zu unterschiedlich sind. Bei mir kommt noch dazu, dass ich meiner Magento Datenbank (ehem. 1.3 nun auf 1.9.2.4) nicht ganz traue. Früher bei magento waren die Update-Prozesse nicht ganz so sauber.

Daher tendiere ich momentan zu einer gemischten Lösung. 

Grundimporte über Migrationstool 

Updates von Attributen und Eigenschaften über die Shopware API. 

Gerne können wir hierz auch einmal telefonieren, wenn du Lust hast um uns etwas auszutauschen. Bei interesse kannst einfach eine PM schicken. 
Liebe Grüße

Kevin

Hey Raphael,

ich bin nun mit meinem ersten Migrationslauf durch. 

Werde hier morgen oder am Wochenende einen Bericht schreiben, wie ich vorgegangen bin. 

Liebe Grüße

Kevin

Hallo Zusammen,

wie versprochen, kommt hier noch ein kleiner Erfahrungsbericht zu meiner Magento-Migration und der Anwendung des Migrationstools: 

Ausgangssituation Magento: 

Wir sind angefangen damals mit Magento 1.3 und mittlerweile auf der Version 1.9.2.4 angekommen. Wir besaßen nur wenige filterbaren Attribute (5 Stück). Ansonsten hatten wir noch viele weitere Attribute die nicht filterbar waren, dennoch nicht nur aus Einfachtextfeldern bestehen sondern auch Selectboxen mit Mehrauswahlen. Die Herstellerverwaltung in Magento haben wir nicht genutzt, da es das damals in der Version 1.3 nicht gab und wir nie migriert haben. Wir arbeiteten aus einer Kombination (Herstellerattribut und dazugehörigen Attributen). 

Bezüglich der Migration sind wir folgendermaßen vorgegangen: 

Kunden: 

Die Kunden haben wir 1 zu 1 mit dem Migrationstool importieren können. Alle relevanten Daten wurden ohne Probleme übernommen

Bestellungen: 

Auf den Bestellimport haben wir verzichtet, da diese teilweise unvollständig übertragen worden sind. Ich habe mit dem Migrationstool sehr viele Bestellungen erhalten, die anscheinend keine Positionen hatten. Das hängt damit zusammen, dass im Magento System Erweiterungen genutzt wurden, die vom Migrationstool nicht bedacht werden können. 

Hersteller: 

Wie erwähnt waren meine Hersteller in Magento in Kategorien hinterlegt. Daher habe ich mir ein einmaliges kleines PHP-Skript geschrieben, dass meine entsprechenden Kategorien ausliest und per API von Shopware importiert. Anbei eine Idee dazu: 

getCollection()
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('parent_id',array('in' => array(25,29,35,49,77,103,166,174,188,221,239,401,500,547,578,633,664,707,765)));

$export_file = "log_import_suppliers.log"; // assumes that you're running from the web root. var/ is typically writable
$export = fopen($export_file, 'w') or die("Permissions error."); // open the file for writing. if you see the error then check the folder permissions.
$supplier_file = "supplier_shopware.csv"; // assumes that you're running from the web root. var/ is typically writable
$export_supplier = fopen($supplier_file, 'w') or die("Permissions error."); // open the file for writing. if you see the error then check the folder permissions.


$output = "";

$output = date('d.m.Y H:i') . "Start Importing manufactuers";
$output .= "\r\n"; // add end of line
fwrite($export, $output); // write the file header with the column names

$outputSupplier = "id~name\r\n"; // column names. end with a newline.
fwrite($export_supplier, $outputSupplier); // write the file header with the column names

foreach ($categories as $category) {

    $apiImportCall = $apiClient->post('manufacturers', array(
        'name' => $category->getName(),
        'link' => $category->getLinkweingut(),
        'description' => $category->getDescription(),
        'metaTitle' => $category->getMetaTitle(),
        'metaKeywords' => $category->getMetaKeywords(),
        'metaDescription' => $category->getMetaDescription(),
        'attribute' => array(
            'attr' => $category->getAdresserzeuger()
        )
    ));
    $output = date('d.m.Y H:i') . " Result Importing: " . $category->getName() . " --> " . $apiImportCall["success"];
    $output .= "\r\n"; // add end of line

    fwrite($export, $output);

    if($apiImportCall["success"] == 1)
    {
        $outputSupplier = ""; // re-initialize $output on each iteration
        $outputSupplier .= '"' .$apiImportCall["data"]["id"]. '"~'; // no quote - integer
        $outputSupplier .= '"'.$category->getName().'"'; // quotes - string
        $outputSupplier .= "\r\n"; // add end of line
        fwrite($export_supplier, $outputSupplier);
    }

}

echo "Finished import";

fclose($export); // close the file handle.
fclose($export_supplier);

Produktstammdaten, Kategorien und Produktbilder: 

Den initialen Import der Produktstammdaten inkl. Kategorien habe ich komplett mit dem Migrationstool durchführen können. Hier handelte es sich tatsächlich nur um die Stammdaten ohne Attribute aus dem Magento-System, da ich die Zuordnung nicht sinnvoll hinbekommen habe mit dem Migrationstool. 

Magento Attribute: 

Vorab von Hand habe ich mir in Shopware ein Attrbiutset angelegt. Dazugehörig auch sämtliche Eigenschaftsgruppen ohne Optionsfelder. Im Anschluss habe ich mir aus Magento ein spezielles Attributexport Profil angelegt und sämtliche Daten in eine CSV-Datei schreiben lassen. Diese wurde 1 zu 1 in eine neue Shopwaretabelle importiert und mit einem entsprechend Migrationsflag versehen. 

Anschließend habe ich mir ein PHP-Skript geschrieben, dass ich über eine kleine Index-Website asynchron für alle Produkte aufgerufen habe. Für das Update der Produkte habe ich dann wiederum die API von Shopware verwendet. Das Skript kann ich als Idee gerne bereitstellen, ist nur zu lang um hier reinzukopieren. Daher bitte nachfragen.

Auf jeden Fall wird folgender API Aufruf mit Daten befüllt: 

//Prüfe ob Handeslpreis gefüllt, dann auch mit updaten sonst nur den Bruttopreis füllen
    if($prices['handelspreis'] == 0)
    {
        $updateArray = array(
            'supplierId' => $erzeugerId,
            'filterGroupId' => 1,
            'propertyValues' => $propArr,
            'attribute' => array(
                'attr4' => $nameZusatz
            ),
            'mainDetail' => array(
                'unitId' => $inhaltsfield['unitId'],
                'purchaseUnit' => $inhaltsfield['purchaseUnit'],
                'referenceUnit' => $inhaltsfield['referenceUnit'],
                'purchasePrice' => $prices['einkaufspreis'],
                'prices' => array(
                    array(
                        'customerGroupKey' => 'EK',
                        'price' => $prices['bruttopreis'],
                    )
                )
            )
        );
    }
    else
    {
        $updateArray = array(
            'supplierId' => $erzeugerId,
            'filterGroupId' => 1,
            'propertyValues' => $propArr,
            'attribute' => array(
                'attr4' => $nameZusatz
            ),
            'mainDetail' => array(
                'unitId' => $inhaltsfield['unitId'],
                'purchaseUnit' => $inhaltsfield['purchaseUnit'],
                'referenceUnit' => $inhaltsfield['referenceUnit'],
                'purchasePrice' => $prices['einkaufspreis'],
                'prices' => array(
                    array(
                        'customerGroupKey' => 'EK',
                        'price' => $prices['bruttopreis'],
                    ),
                    array(
                        'customerGroupKey' => 'H',
                        'price' => $prices['handelspreis'],
                    ),
                )
            )
        );
    }

    $apiImportCall = $apiClient->put('articles/'.$sku.'?useNumberAsId=true', $updateArray);

Soweit so gut, falls Fragen sind einfach melden. 

Liebe Grüße

Kevin

1 „Gefällt mir“