XML - Auftragsimport automatisieren | DaWanda API

akaJ

Aktives Mitglied
15. Mai 2017
15
5
Hallo Forum!

es gibt hierzu schon einige Themen, viele sind schon etwas älter.

Ich Verkaufe einige Produkte bei DaWanda und musste bisher alle Bestellungen von Hand in die WaWo klopfen. Mittlerweile geht mir das aber schon etwas auf den Zeiger, so hab ich mich endlich mal hingesetzt und einen Connector zur DaWanda-API erstellt. Der Connector liefert mir die gewünschten Daten im JTL-Schema -> XML Format. Der Abgleich der API erfolgt über CronJob, die Spiegelung der Bestellungen auf dem Webspace <-> Lokalen Rechner erledige ich per Batch File mit Liste ( so vermeide ich doppelte Importe! ).

Die Bestellungen liegen sozusagen schon vor der Eingangstür zur WaWi, lediglich der Import in die Datenbank bereitet mir Kopfschmerzen - seit Tagen komme ich nicht weiter. Am liebsten hätte ich den Insert ebenfalls via sqlcmd erledigt, man müsste halt durch das Folder iterieren und jede Bestellung in die Tabelle schreiben. Ziemlich doof, das ich mit SQL nicht viel Erfahrung habe und einfach nicht weiterkomme.

Hat hier aus dem Forum schon jemand Erfahrung gemacht, oder kann Hilfe anbieten? Gerne kann ich den gesamten PHP Part ( Connector ) oder auch das komplette Projekt anschließend hier - kostenlos - zur Verfügung stellen.

DANKE!
 

JohannP

Offizieller Servicepartner
SPBanner
27. Juli 2015
192
44
Flensburg
Bei einem Kunden war der Einsatz von dem XML Autoimporter von Leitcon geplant: http://leitcon.at/jtl-wawi-autoimport-xml-bestellungen/ Alle Tests liefen absolut zufriedenstellend.
Der einzige Grund warum die Lösung nicht beim Kunden eingesetzt wurde ist, dass es, zusammen mit dem Shop des Kunden, einfacher war die Aufträge per CSV über die Ameise zu importieren und zu automatisieren.
 

akaJ

Aktives Mitglied
15. Mai 2017
15
5
Ich kenne den Autoimporter von Leitcon, hab den auch erfolgreich getestet. Dummerweise hab ich damit auch den Worker lahmgelegt, weil ich erst zu spät hier im Forum gelesen habe, das man je Datensatz nur eine Bestellung importieren kann.

An einen CSV-Import habe ich auch schon gedacht, sollte mit der JTL Ameise CMD-Line einfacher zu realisieren sein.
 

akaJ

Aktives Mitglied
15. Mai 2017
15
5
Das Lizenzmodell von Unicorn2 sagt mir leider nicht zu - bzw. lässt sich das derzeit mit den Einnahmen aus DaWanda nicht in Einklang bringen.
Daher suche ich vorerst eine für mich möglichst kostengünstige Lösung. Für echte DaWanda-Fans gibt es ja BillBee welche auch mit der JTL WaWi kommuniziert. Nur ist bis heute nicht sauber geklärt, inwieweit ich Kunden in den AGB oder an anderer Stelle über die Weitergabe der Daten informieren muss. Ich bin zwar Mitglied beim Händlerbund, möchte mich da aber auch nicht zu 100% verlassen.
 

akaJ

Aktives Mitglied
15. Mai 2017
15
5
Auch an dieser Stelle - Thema ist erledigt! In einem SQL-Forum konnte man mir den richtigen Tipp geben!
 

akaJ

Aktives Mitglied
15. Mai 2017
15
5
@dropshipout natürlich !

Vorweg, ich übernehme keine Haftung für evtl. Schäden an der Datenbank oder dergleichen! Das Script wird derzeit auf einem Rechner mit Windows 7 und SQL Server 2014 mit aktueller WaWi 1.2.2.2 ausgeführt. Ob das ganze mit einer älteren Windows-Version läuft kann ich nicht sagen.

// Was benötigen wir?
Damit die das ganze auch funktioniert, muss jede Bestellung in einer separaten XML nach Schema lokal in einem Ordner abgelegt werden.
Von dort aus muss jede einzelne *.xml in die eazybusiness Datenbank in die Spalte tXMLBestellImport übertragen werden.Die restlichen Arbeitsschritte übernimmt der JTL- Worker !

// DaWanda API
In meinem Fall, hole ich meine Bestelldaten über die DaWanda API via cURL "zerlege" die XML von DaWanda und gebe diese im JTL-Schema erneut als XML wieder auf dem Webspace aus. Damit ich nur Bestellungen ausgebe, welche "neu" und noch nicht im System sind wird eine Logdatei angelegt. So vermeide ich bereits vorab, doppelte Auftragsimporte in die WaWi ( ! Beim Import über die Tabelle tXMLBestellimport wird nicht geprüft, ob evtl ein Kunde/Auftrag bereits angelegt ist ! ). Man könnte das ganze auch vor dem INSERT in SQL nochmal überprüfen, allerdings bin ich dazu in SQL nicht fit genug.

// Daten via FTP abholen
Um jede XML-Datei als Einzelbestellung vom FTP Server abzuholen nutze ich ebenfalls CMD. Anschließend wird die abgeholte *.XML Datei vom Server gelöscht um Ressourcen zu sparen. Hier kommt dann unser zuvor erstelltes Logfile zum Einsatz - denn ohne dieses Logfile würde die bereits abgeholte und nun gelöschte *.XML auf dem Webspace beim nächsten abgleich erneut ausgegeben werden -> Doppel-Import! Entsprechende snippets hierzu findet man im Netz - ist schnell gebastelt. Wer Hilfe hierzu benötigt, einfach melden.

// Übertragung in die Datenbank "eazybusiness"
Hier fingen meine Probleme an. Eine einzelne Datei zu übergeben war nicht das Problem, einen ganzen Ordner davon, anhand unterschiedlicher Dateinamen dann schon. Meine Dateinamen einzelner XML-Dateien setzen sich wie folgt zusammen: dawanda_order_<DAWANDA BESTELLNUMMER>.xml - Um nun jede Datei aus einem bestimmten Verzeichnis zu holen und in die Datenbank zu übertragen nutzen wir sqlcmd!

// Verzeichnisstruktur
An meinem Rechner habe ich folgende Verzeichnisstruktur. Beachtet, dass die in der config.ini angegebenen Verzeichnis existent sein müssen, andernfalls funktioniert das script nicht!

c:\XML\ <- Hauptverzeichnis ( config.ini & import.bat )
c:\XML\sql\ <_ SQL Verzeichnis ( xml_import.sql )
c:\XML\temp <- Verzeichnis für XML-Dateien ( Bestellungen )
c:\XML\backup <- Verzeichnis in welches die XML-Dateien nach dem INSERT abgelegt werden.

// Script
Wir beginnen mit einer config.ini in welcher unsere "variablen" gespeichert sind. Diese Datei beinhaltet unsere Zugangsdaten für die Datenbank der WaWi, als auch die Pfade zu den einzelnen Verzeichnissen, in welchem die XML-Dateien liegen, bzw. nach dem INSERT die *.XML-Dateien als Backup hinverschoben werden. Grundlegend habe ich ein Verzeichnis "XML" auf Laufwerk c: angelegt -> c:\XML.
In dieses Verzeichnis legen wird die config.ini mit folgendem Inhalt ab:

------------------- config.ini ---------------------

db_server = COMPUTERNAME\JTLWAWI
db_username=sa
db_passwort=sa04Tj14
db_plattform=5
db_rechnung=0

xml_verzeichnis=c:\XML\temp
xml_backupverzeichnis=c:\XML\backup\
------------------- config.ini ---------------------

Als nächstes benötigen wir die import.bat im Verzeichnis c:\XML\.
Kurz Erklärt: In dem *.bat File holen wir uns aus der config.ini die nötigen variablen und füllen damit das sqlcmd Kommando. Man könnte die Daten auch direkt im *.bat File Einpflegen allerdings ist das ganze in einer config.ini etwas übersichtlicher und schneller erledigt. Ich möchte trotzdem anmerken, das die Zugangsdaten in dieser Datei für jeden einsehbar sind! Wichtig!! Im xml_verzeichnis Pfad dürfen nur XML-Dateien mit Einzelbestellungen abgelegt werden! Andernfalls crasht der Worker und ihr müsst die Tabelle von Hand via Microsoft SQL Server Management Studio wieder leeren!

------------------- import.bat ---------------------
@echo off
for /f "tokens=*" %%a in ('type "config.ini"') do set %%a
for f "%xml_verzeichnis%" %%i in (*.xml) do (
sqlcmd -U %db_username% -P %db_password% -S %db_server -v filepath="%%i" plattform="%db_plattform%" rechnung="%db_rechnung%" -i c:\XML\sql\xml_import.sql
move "%%i" "%xml_backupverzeichnis%" )
exit
------------------- import.bat ---------------------

In der import.bat wird via sqlcmd das sql-script xml_import.sql aufgerufen. Zusätzlich werden die values der variablen filepath, plattform und rechnung an das script übergeben! Nur so kann das script für jede xml-Datei einen separaten INSERT vornehmen.

------------------- xml_import.sql ---------------------

INSERT INTO eazybusiness.dbo.tXMLBestellImport(cText,nPlattform,nRechnung)
SELECT CAST(CONVERT(XML,x.BulkColumn,2) AS archer(max)),$(plattform),$(rechnung)
FROM OPENROWSET (BULK '$(filepath)', SINGLE_BLOB) AS x

------------------- xml_import.sql ---------------------

Fertig! Zumindest fast...! Nun fehlt nur noch der Eintrag im Microsoft Aufgabenplaner, wie oft / wann der INSERT erfolgt.
Hierzu gibt es zumindest von meiner Seite ein paar Hinweise welche ich so nicht im Netz gefunden habe.

Wer sich von dem sich immer wieder kurz aufblickenden CMD-Fenster gestört fühlt ( sofern DB & WaWi Client auf einem Rechner ) sollte für das Ausführen des *.bat scripts einen weiteren User anlegen etwa -> JTL. Damit diese Aufgabe auch ausgeführt wird, wenn man mit einem anderen Nutzer angemeldet ist, muss bei der Aufgabe lediglich der Haken bei "Unabhängig von der Benutzeranmeldung ausführen" gesetzt sein. Der Trigger kann frei gewählt werden, die Aktion muss wie folgt übergeben werden.

Programm/Skript
C:\Windows\SYSWOW64\cmd.exe
Achtung, dies gilt nur für 64-Bit Betriebssysteme, andernfalls muss hier
C:\Windows\system32\cmd.exe
eingetragen werden.

Als Argument müssen wir mit übergeben:
/c start"" "c:/XML/import.bat"

Worker starten... und auf Aufträge hoffen! Sofern gewünscht kann ich all diese Dateien auch als *.zip bereitstellen - so müsste lediglich die config.ini angepasst werden.

NACHTRAG! ACHTUNG - Das Script importiert jegliche im Ordner liegende Bestellung, auch wenn diese bereits in der Datenbank exisitert!
 
Zuletzt bearbeitet:

akaJ

Aktives Mitglied
15. Mai 2017
15
5
Anbei das komplette Folder als *.zip Datei!
Nicht vergessen, die config.ini an eure lokalen Pfade / Zugangsdaten anzupassen!

Was mir wichtig ist?
Das Script ist für jeden frei & kostenlos nutzbar!
Sollte dieses Script durch Agenturen/Dienstleister für Kundenprojekte genutzt werden, verkauft diese Arbeit bitte nicht an eure Kunden weiter - verschenkt es ;)

Wer interesse an einer Version mit vorheriger Datenbankabfrage ( verhindert den Import bereits vorhandener Aufträge! ) und automatischen FTP-Download der XML-Dateien hat, kann sich gerne Melden.
 

Anhänge

  • XML_JTL_IMPORTER.zip
    1,6 KB · Aufrufe: 88
Zuletzt bearbeitet:

svenyo

Gut bekanntes Mitglied
18. Februar 2016
104
2
Bin am verzweifeln. Manuell funktioniert per Script alles wie gewollt. Aber die blöde Aufgabenplanung :mad: will nicht loslegen. Kann kurz jemand Hlfestellung geben, wie wo was eingetragen werden muss?
 

akaJ

Aktives Mitglied
15. Mai 2017
15
5
@svenyo
Pfad zum Script ist korrekt?
Adminrechte des jeweiligen Kontos?

Bei mir scheiterte es am “Argument“ das kann sich nach Betriebsystem unterscheiden.
 

svenyo

Gut bekanntes Mitglied
18. Februar 2016
104
2
Hab jetzt mal testweise das Script manuell gestartet, wobei diesmal 2 XML Dateien im Temp Ordner waren. in den Backup Ordner wurden zwar beide verschoben, aber in die Tabelle tXMLBestellimport wurde nur eine Bestellung geschrieben?
 

akaJ

Aktives Mitglied
15. Mai 2017
15
5
Als Argument müssen wir mit übergeben:
/c start"" "c:/XML/import.bat"

Bei WinXP klappt das fast immer, manchmal aber auch nur ohne die Anführungszeichen!
Google hilft hier weiter, ich hab mich da selbst durchprobiert bis dann das richtige Argument dabei war.

Bezüglich dem Import - kann ein Datensatz nicht korrekt importiert werden ( etwa durch nicht erlaubte Sonderzeichen ) wird dieser “überlesen“. Daher nochmal prüfen ob der Datensatz ok ist!
 

donezkij

Gut bekanntes Mitglied
1. April 2009
103
1
Hallo, das Thema ist schon etwas älter aber ich versuche es trotzdem. Wir bekommen beim Import folgende Fehlermeldung:

Meldung "4861", Ebene "16", Status "1", Server "....", Zeile 1
"Das Massenladen ist nicht möglich, da die Datei "D:\XML\temp\KHBE1075.xml" nicht geöffnet werden konnte. Betriebssystemfehlercode 3(Das System kann den angegebenen Pfad nicht finden.)."

Woran kann das liegen?
 

donezkij

Gut bekanntes Mitglied
1. April 2009
103
1
Ja, habe schon alles versucht. In einem anderen Verzeichnis, anderes Laufwerk, anderer Rechner :( Immer wieder die gleiche Fehlermeldung.