Import von Kunden und Bestellungen via SQL

Hallo Gemeinde, folgendes Problem habe ich: Ich habe einen Shopware 4 Shop vor einem Monat auf Version 5 geupdatet und diesen Shop quasi als Duplette auf den Stand gebracht auf den ich jetzt sein möchte. Über den Zeitraum dieses Monats lief der Shopware Shop 4 weiter, jetzt stehe ich vor der Aufgabe die Daten, die Kunden und Bestellungen hinterlassen haben in den Shopware 5 Shop zu übertragen. Ich versuche mich da an einen SQL Ex- und Import. Ich hatte gehofft, dass es reicht, alles Tabellen die mit s_order und s_user anfangen aus dem 4er Shop zu exportieren und in den 5er zu importieren. Allerdings werden bei mir die Bestellungen nicht angezeigt, oder es kommt zu Fehlern beim Import. Ich hatte sogar auch versucht den 4er Shop nochmal zu spiegeln, mit dem aktuellen Stand nochmals auf SW5 zu updaten und dann diese Tabellen einzuspielen - bringt einen auch nicht zu Ziel. Kann mir jemand sagen wie man das am cleversten bewerstelligt? Gibt es vielleicht noch andere Tabellen die ich ebenfalls beachten muss? LG kweb

Ich würde wirklich den SH4 Shop stoppen, auf SH5 aktualisieren und dann nur noch den SH5 Shop laufen lassen. Manuell die Daten zu kopieren dürfte ziemlich fehleranfällig sein.

Ja aber wir brauchten ja eine Übergangsphase. Ich habe es jetzt tatsächlich geschafft Kunden und Bestellungen zu importieren, bekomme jedoch 1 Fehler. 1. Im Backend wenn ich eine Bestellung bearbeiten will: Ups! Ein Fehler ist aufgetreten! Die nachfolgenden Hinweise sollten Ihnen weiterhelfen. SQLSTATE[42S02]: Base table or view not found: 1146 Table 'd01e522c.s\_order\_viison\_intraship' doesn't exist in Zend/Db/Statement/Pdo.php on line 234 Stack trace: #0 Zend/Db/Statement.php(303): Zend\_Db\_Statement\_Pdo-\>\_execute(Array) #1 Zend/Db/Adapter/Abstract.php(480): Zend\_Db\_Statement-\>execute(Array) #2 Zend/Db/Adapter/Pdo/Abstract.php(238): Zend\_Db\_Adapter\_Abstract-\>query('DESCRIBE `s_ord...', Array) #3 Enlight/Components/Db/Adapter/Pdo/Mysql.php(75): Zend_Db_Adapter_Pdo_Abstract-\>query('DESCRIBE `s\_ord...', Array) #4 Zend/Db/Adapter/Pdo/Mysql.php(169): Enlight\_Components\_Db\_Adapter\_Pdo\_Mysql-\>query('DESCRIBE `s\_ord...') #5 Zend/Db/Table/Abstract.php(836): Zend\_Db\_Adapter\_Pdo\_Mysql-\>describeTable('s\_order\_viison\_...', NULL) #6 Zend/Db/Table/Abstract.php(875): Zend\_Db\_Table\_Abstract-\>\_setupMetadata() #7 Zend/Db/Table/Abstract.php(983): Zend\_Db\_Table\_Abstract-\>\_setupPrimaryKey() #8 Zend/Db/Table/Select.php(100): Zend\_Db\_Table\_Abstract-\>info() #9 Zend/Db/Table/Select.php(78): Zend\_Db\_Table\_Select-\>setTable(Object(Zend\_Db\_Table)) #10 Zend/Db/Table/Abstract.php(1019): Zend\_Db\_Table\_Select-\>\_\_construct(Object(Zend\_Db\_Table)) #11 Shopware/Plugins/Community/Backend/ViisonIntraship/ViisonShippingCommon/Controllers/ViisonShippingCommonOrder.php(245): Zend\_Db\_Table\_Abstract-\>select() #12 Enlight/Controller/Action.php(159): Shopware\_Controllers\_Backend\_ViisonShippingCommonOrder-\>getAllLabelsAction() #13 Enlight/Controller/Dispatcher/Default.php(524): Enlight\_Controller\_Action-\>dispatch('getAllLabelsAct...') #14 Enlight/Controller/Front.php(227): Enlight\_Controller\_Dispatcher\_Default-\>dispatch(Object(Enlight\_Controller\_Request\_RequestHttp), Object(Enlight\_Controller\_Response\_ResponseHttp)) #15 Shopware/Kernel.php(143): Enlight\_Controller\_Front-\>dispatch() #16 vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/HttpCache.php(490): Shopware\Kernel-\>handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #17 Shopware/Components/HttpCache/AppCache.php(255): Symfony\Component\HttpKernel\HttpCache\HttpCache-\>forward(Object(Symfony\Component\HttpFoundation\Request), true, NULL) #18 vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/HttpCache.php(261): Shopware\Components\HttpCache\AppCache-\>forward(Object(Symfony\Component\HttpFoundation\Request), true) #19 Shopware/Components/HttpCache/AppCache.php(103): Symfony\Component\HttpKernel\HttpCache\HttpCache-\>pass(Object(Symfony\Component\HttpFoundation\Request), Scheint 1 Problem mit Viison Intraship zu sein zu sein - weiß da wer weiter?! Was sagt die Fehlermeldung?

Weitere Informationen zu dem Fehler stehen in der Log Datei /logs/core_production-2015-07-23.log Da schauen, evtl. den Fehler hier posten.

Ja es lag am Plugin DHL Adapter. Jetzt habe ich den deaktiviert, jetzt bekomme ich: [quote] 404 not found… Shopware 5.0.2 (Rev. 201507160826) - Backend © shopware AG iframe { border: 0 none !important; width: 100%; height: 100%; } #nav ul { top: 26px !important } #header li.main { height: 28px !important } .deprecated { color: #fff; font-size: 11px; font-weight: 700; text-align: center } .sprite-point { background: url(/sw5/engine/Shopware/Plugins/Community/Frontend/SwagBonusSystem/Views/_default/backend/_resources/images/point.png) no-repeat 0 0 !important; } .paypal–icon { background-image: url(‚data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABvFBMVEUAIHoAJn8AMIcAPJAARZkAkdUAlNkAldkAldoAltkAltoAl9oAmNsAmNwAmdsAmdwAmd0Amt0Am90AnN4And4AoOH///8AufgAMIcAMIcAMokAO48AmNsAIHoAMIcAMIcAmd0AmtwAMIcAJ4AAmdwAO5EAMIcAMIcAMIcAp+gAmNsAMIcAmNwAldkAMIcAmNwAMIcAmtwAlNcAMIcAfcIAMIcAMIcAmt0AnN4AnN4AMIcAqegAMIcAMIcAoeEAMIcAMIcAMIcAnN4AEW4AMIcAmdwAM4kAdb8And8AMIcAGnYAG3YAHXgAJ4AAKYIAK4IALH8ALIAALYAAMIYAMIcAMIgAMYcAMYgAMowAM4oAM40ANIwANI0AS54AWqgAaLMAbK8AmdsAmtsAm9wAm90AnN4And8AnuAAoOEAoOIAoeIAouMApOUApeYAqOkArO0Are0Ar/AAsO4AsPEAsvAAs/AAs/EAt/gAvf0BAEABAEUBCVIBDFQBD1QBE1wBGF8BGGUBGWEBHWEBHWIBH2MBH2UBIWcBIWkBImoBI2sBJGwBJnQBKHgBKXIBLH4BL3YBM3kBOX8BPoQBU5gN6zI6AAAASnRSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFBhESEhcfMDw9Q0VFTFJdYGVmfHyAg4WWnZ6jpay6vb3ByMnQ2uDh4uTm6erq8PT1/JvflF8AAADISURBVBgZBcHBTsJAEIDhf6azW1vxggYIN+LFmxff/xH0ZEJEbzaYaCJi21DW3fH7ZMHXctMmRNLnDm4MiGsAWM2eQIEaFzMzu9sUDAioTy6uWQ0DAuGhr0CG7toViFBEVZPdzzFYtOAiIqf11GAQG9Ehn0tZvZaMgV3a8ary6nHy/ohBpG92F39h+XPeHoJBxOvZIOOvPneKQV25lPTe5XEfagxaXIzD1moAhfI9fbhMMTiAwVtVbkdJKasiGOx1nl/yKYpD0X/ZN1Ci2Gv4kwAAAABJRU5ErkJggg==‘); } Ext.editorLang = ‚de‘; Ext.shopwareRevision = ‚201507160826‘; var userName = ‚admin‘, maxParameterLength = ‚0‘; Ext.define(‚Shopware.app.Application‘, { extend: ‚Ext.app.Application‘, name: ‚Shopware‘, singleton: true, autoCreateViewport: false, requires: [‚Shopware.container.Viewport‘], baseComponents: { ‚Shopware.container.Viewport‘: false, ‚Shopware.apps.Index.view.Menu‘: false, ‚Shopware.apps.Index.view.Footer‘: false }, viewport: null, launch: function() { var me = this, preloader = Ext.create(‚Shopware.component.Preloader‘).bindEvents(Shopware.app.Application), errorReporter = Ext.create(‚Shopware.global.ErrorReporter‘).bindEvents(Shopware.app.Application) /** * Activates the Ext.fx.Anim class globally and * drives the animations our CSS 3 if supported. */ Ext.enableFx = true; this.addEvents(‚baseComponentsReady‘, ‚subAppLoaded‘); // Disable currency sign Ext.apply(Ext.util.Format, { currencySign: ‚‘ }); // Fix default date format Ext.Date.defaultFormat = Ext.util.Format.dateFormat; this.callParent(arguments); this.addSubApplication({ name: „Shopware.apps.Index“, controller: „ViisonIntrashipOrder“, params: , localizedName: ‚Shopware‘, firstRunWizardEnabled: 0, sbpLogin: 0, updateWizardStarted: 1 }); // Start preloading the icon sets me.iconPreloader = Ext.create(‚Shopware.component.IconPreloader‘, { loadPath: „http://kosmetik-kaufen24.de/sw5/themes/Backend/ExtJs/backend/_resources/resources/css“ }); }, /** * Checks if all base components are loaded and rendered. * If truthy the preloader will be triggered. * * @param cmp - Component which calls the method * @return void */ baseComponentIsReady: function(cmp) { var me = this, allReady = true; me.baseComponents[cmp.$className] = true; Ext.iterate(me.baseComponents, function(index, item) { if(!item) { allReady = false; return false; } }); if(allReady) { window.setTimeout(function() { me.fireEvent(‚baseComponentsReady‘, me); }, 1000); } } }); /** Basic loader configuration */ Ext.Loader.setConfig({ enabled: true, disableCaching: true, disableCachingParam: ‚no-cache‘, disableCachingValue: ‚1437653770+1+1‘ }); Ext.Loader.setPath(‚Shopware.apps‘, ‚/sw5/backend‘, ‚?file=app‘); Ext.onReady(function() { var timeField = Ext.create(‚Ext.form.field.Time‘); this.timeFormat = timeField.format; });[/quote] Das komische: Es kommt nur diese Fehlermeldung, die Daten sind aber alle da…auch die Log spuckt diesbezüglich nichts aus…

Hallo, bist du dir sicher, dass du das so machen willst? Generell kannst du eine Bestellung nur importieren, wenn die Bezüge 1:1 gleich bleiben. D.h. die Kunden und Artikel müssen 1:1 die gleichen IDs in der Datenbank haben. Was bei den Artikeln aber wahrscheinlich nicht gegeben ist. Gleiches gilt ja auch für die PaymentIDs usw. Gerade auch aufgrund von Datenbankveränderungen bei Updates kann man nicht mal eben die Daten aus SW4 in SW5 übernehmen. Auch weil Plugins die Tabellen erweitern usw. Wir raten von soetwas grundsätzlich ab. Grüße Moritz

Hi Moritz, also ganz kurz: Die Fehlermeldungen die ich jetzt bekommen scheinen mit dem Plugin DHL Adapter zu tun zu haben. Sonst sieht alles auf den ersten Blick gut aus. Moritz, wie sollte man es denn sonst machen? Also ich bin so vorgegangen: 1. Shopware 4 Shop komplett gespiegelt, damit der normale 4er Shop weiterlaufen kann. 2. Den gespiegelten Shop auf Shopware 5 geupdatet 3. Den SW5 Shop ca. 1 Monat umgestellt, angepasst usw. 4. Den Version 4 Shop NOCHMAl gespiegelt und auf Shopware 5 geupdatet 5. Alles was in der Datenbank von der zweiten Spiegelung war und mit s_order und s_user zu tun hatte exportiert 6. Im Shop der ersten Spiegelung genau diese Tabellen gelöscht und neu importiert Scheint zu funktionieren - wie gesagt, die Probleme die jetzt kommen sind durch das DHL Plugin bestimmt, Kundentechnisch ist alles da und Bestellungen sehen auch gut aus. Kann natürlich sein, dass vielleicht irgendwelche anderen Infos durcheinander geangen sind, jetzt heißt es ausgiebig zu testen - ich lasse es Euch wissen ob es es geklappt hat.

[quote]Moritz, wie sollte man es denn sonst machen? [/quote] das würde mich auch brennend interessieren. Der Bestellimport per CSV im SW5 zeigt bei mir an, dass es geklappt hat, leider werden die importierten Bestellungen aber nicht angezeigt. Ein SQL Dump der Bestellungen aus SW4 nach SW5 zerschießt den kompletten Shop. Da das doch eigentlich eine häufigea Aufgabenstellung ist wundert es mich, dass der ganze Import so schwierig zu sein scheint…

[quote=“jonaswagner”][quote]Moritz, wie sollte man es denn sonst machen? [/quote] das würde mich auch brennend interessieren. Der Bestellimport per CSV im SW5 zeigt bei mir an, dass es geklappt hat, leider werden die importierten Bestellungen aber nicht angezeigt. Ein SQL Dump der Bestellungen aus SW4 nach SW5 zerschießt den kompletten Shop. Da das doch eigentlich eine häufigea Aufgabenstellung ist wundert es mich, dass der ganze Import so schwierig zu sein scheint…[/quote] Bestellungen, Kunden oder auch Artikel würde ich nicht per SQL Dump oder sonstigen Weg von SW4 in SW5 importieren. Ich würde da immer die Update-Funktion verwenden. Ich würde da wie folgt vorgehen: Während noch der alte SW4 Shop läuft würde ich den neuen SW5 Shop entwickeln (Design und Funktionen). Wenn dann soweit alles fertig ist, den alten SW4 Shop während der Migration in den Wartungsmodus. Dann erst einmal Sicherheitkopien von allen Daten, damit man zur Not wieder zum urspünglichen Stand zurückkehren kann. Und dann den SW4 per Update auf SW5 updaten. Vorher schauen, ob es Plugins gibt, welche nicht mit SW5 kompatibel sind. Diese entweder updaten oder deaktivieren. Dann hast Du korrekte Daten für Kunden, Bestellungen und Artikel in der DB. Diese kannst Du dann in den neuen Shop kopieren. In dieser Weise habe ich das Update von SW4 auf Sw5 gemacht und es gab keine Probleme. Gruß Daniel

Ich hatte auch das Problem, dass ich nach dem Import der Bestellungen, der angeblich erfolgreich war kein Ergebnis gesehen habe. Das Problem war aber auch, dass die Kunden, Versand IDs etc. in den beiden Shops unterschiedlich waren.

Also hab ich es dann über einzelne Tabellen imports erledigt. Hierbei habe ich jeweils aus dem Shop, aus dem die Daten exportiert wurde jeweils nur die Daten und nichts die Struktur exportiert. Um alles zusammen zu haben musste ich die Inhalte folgender Tabellen importieren und dann jeweils die Inhalte der daneben aufgelisteten Spalten anpassen.

s_order anpassen → id, userID, dispatchID
s_order_billingaddress → id, userID, oderID, customernumber
s_order_billingaddress_attributes → id, billingID
s_order_details → id, orderID, articleID,
s_order_details_attributes → id, detailID
s_order_history → id, orderID
s_order_shippingaddress → id, uderID, orderID

evtl. auch:
s_order_attributes
s_order_shippingaddress_attributes (Wenn es Freitextfelder bei der Lieferadresse gibt)

Hoffe dass hilft dem einen oder anderen.

Das ist aber wirklich eine Fummel-Arbeit und ist nur mit wenigen Bestellungen realistisch. Bei mir waren es zum Glück nur 2 also hab ich mich durchgebissen.

Grüße, Atilla

Das eigentlich Thema ist nun 5 Jahr alt. Heute könnte man auch die API benutzen.

5 Jahre hin oder her - es gibt genug Leute die in den Archiven hier landen. Man liest was Google ausspuckt, und das kann eben genau dieser Beitrag hier sein. Ich hätte auch noch die alten SW4 Beiträge gelesen, wenn sie nicht schon gelöscht worden wären.

Ja man könnte. Aber der Laie sieht in der API nur 3 Buchstaben. Ich hab keine Ahnung wie das gehen soll. Hast du es schonmal gemacht? Muss man dann nicht die IDs anpassen?

Grüße, Atilla

Bei 5 Jahren alten Einträgen besteht die Gefahr, dass die angezeigten Inhalt heute nicht mehr zutreffend sind. Das sollte man sich schon bewusst sein.

Und zu den 3 Buchstaben gibt es auch Dokumentationen. Ist ein wenig Fleißarbeit angesagt.

https://developers.shopware.com/developers-guide/rest-api/

„Bei 5 Jahren alten Einträgen besteht die Gefahr, dass die angezeigten Inhalt heute nicht mehr zutreffend sind. Das sollte man sich schon bewusst sein.“

Die einzige Gefahr die ich hier sehe ist ein Schlaumeier der mir was erzählen will, dem ich aber gerne mal die Parkuhr vorstellen kann.

Zitat great2gether:

Die einzige Gefahr die ich hier sehe ist ein Schlaumeier der mir was erzählen will, dem ich aber gerne mal die Parkuhr vorstellen kann. Und komm mir nicht mit so dummen Fleißarbeit Sprüchen - pack ein sei leise, echt.

Wenn du was sinnvolles zu sagen hast, gerne sonst laber mich nicht zu. Ich hab hier ein Problem gelöst und teil es mit den Leuten die sich evtl. auch nen Zahn dran ausbeißen. Was hast du denn gemacht? Rumgelabert und API und Fleißarbeit gesagt. Steck den Kopf zwischen die Beine und mach dass du vom Acker kommt.

Kein Grund um hier gleich unhöflich zu werden!

Ja, sorry. Ich hatte selbst schon den Beitrag halb gelöscht. Bin etwas genervt und werd ständig vollgequatscht dass dieses oder jenes Thema alt ist. Ist ok, ich schreib einfach nicht mehr im Forum, es sei denn wir stellen ein Plugin vor. Peace.