Export beliebiger Datensätze aus xt:Commerce

Ich habe eine Applikation programmiert um beliebige Datensätze aus einer Datenbank im XML-Format zu exportieren. Momentan kann das Programm „nur“ xt:Commerce. Es exportiert anhand vorher definierter Regelsätze beliebige verschachtelte Abhängigkeiten von Datenbanktabellen in ein unterstütztes Format.

Momentan ist das nur XML, was aber die meisten Anwendungsfälle abdecken sollte. Als vordefinierte Regelsätze stehen „Offene Bestellungen“ und „Offene Bestellungen mit anschließender Statusänderung auf ‚Versendet'“ zur Verfügung. Diese Regelsätze können beliebig erweitert werden, oder man definiert sich eigene Regelsätze.

Die Software ist momentan noch im BETA Stadium, funktionierte aber bei meinen eigenen Tests bisher sehr gut. Je nach dem wie die Resonanz ist steht einer Erweiterung des Funktionsumfangs nichts im Wege.

Ich überlege ein XML-RPC Modul zu integrieren, um beliebiger externer Software den Zugriff auf die Datensätze ohne den Umweg über das händische Herunterladen der XML-Dateien zu gewähren.

Ich würde mich freuen wenn die Software jemandem nutzt, und bitte natürlich um entsprechendes Feedback zu Fehlern und Features.

Die Projektseite mit Screenshots, aktuellen Informationen und Download ist hier: [Exanto Export](/exanto-export/)

Das Programm wird unter der GPL Lizenz veröffentlicht und ist Open-Source.

46 Kommentare

  1. Hallo,
    Die Schnittstelle finde ich toll habe aber einige Probleme damit Lokal auf einem XAMMP System funktioniert es Super aus das auf Vista nicht mit dem IE zugegriffen werden kann nur mit Opera und Firefox. Ferner auf meinem VServer bekomme ich einen Safe Mode Fehler obwohl die Safe mode als „off“ erscheint in der PhP Info.
    Währe aber trotzdem Interessiert diese Schnittstelle weiter zu Entwickeln.

    Gruss

  2. Hallo Mantis,

    auf Vista und IE habe ich nie getestet, und will es ehrlich gesagt auch nicht 😉

    Hast du auf deinem Server PHP5 laufen? Ist vielleicht open_basedir o.ä. gesetzt? PHP hat da sehr viele Einstellungsmöglichkeiten.

  3. Super! Genau so etwas habe ich händeringend gesucht. Sehr fein – es klappt alles sehr gut.

    Eine Frage aber noch: Ich würde gerne Status auf „in Bearbeitung“ setzen, statt auf „versendet“. Aber, wenn ich in der relations/obsv.php den status von 3 auf 2 ändere, kriege ich nur eine Fehlermeldung, wenn ich mir die xml-Datei herunterladen will:

    Warning: Cannot modify header information – headers already sent by (output started at …admin/exanto-export/relations/obsv.php:1) in …admin/exanto-export/download_xml_file.php on line 19

  4. Hi Manuel,

    hast du evtl. die Datei mit vim bearbeitet? Im UTF-8 Modus hinterlässt der Editor manchmal ein paar Zeichen ganz am Anfang einer Datei (irgendwelches UTF-8 Gedöns), was dann zu solchen Fehlern führen kann.

    Prüfe es mal, indem du die Datei mit einem anderen Editor (nano, mcedit) öffnest. Es sind drei kryptische Zeichen ganz am Anfang der Datei.

  5. hmmm, wie ich gerade merke, sind die Bestellungen dann im xt-commerce-Admin komplett weg, wenn ich die Option „status auf versendet“ stelle und dann exportiere. Muss das so?

  6. Huch, danke für die schnelle Antwort 😉

    Also, ich hab die Datei mit dem win-Editor bearbeitet. Habe jetzt nen anderen Editor genommen, und jetzt kommt die Meldung nicht mehr…

    Werde nochmal neue Bestellungen eingeben und testen. Filter zum Ausblenden? Wo finde ich denn den – kommt mir zum ersten Mal unter…

  7. Ok, mit der Änderung in „Status = 2“ und der „sauberen“ Editierung klappt es jetzt. Bestellung ist noch da (richtiger Status) und wurde sauber exportiert. Sehr fein!

    Noch ne Frage – wie kann ich denn eigene Regeln anlegen – und wie muss die Datei dann heissen?

    (und gibt´s vielleicht eine Möglichkeit, die Dateien auch als csv exportieren zu können? g)

    Danke nochmal für die schnelle Hilfe!

    Gruß, Manuel

  8. Hi,

    ist egal wie es heißt, einfach eine vorhandene Relation nehmen und alle Vorkommen von „ob“ oder „obsv“ austauschen, außer bei ->xml_file, da gibt es momentan nur das eine für die orders.

    CSV ist mit der Struktur der Bestellungen nur sehr schwer realisierbar, da jedes Bestellungs-Element ja noch Kindelemente hat, welche wiederum Kindelemente haben können (Attribute etc.). Daher war XML meine erste Wahl, und es ist auch sehr viel flexibler als CSV.

    Wenn du das Programm erfolgreich einsetzt freue ich mich übrigens über einen Backlink 🙂

    Gruß,
    Ingo

  9. Hi,

    ich versuche grad ob.php eine zusätzliche Regel bei zu bringen. Konkret möchte ich zu jedem Produkt aus der Bestellung auch die kompletten Daten aus dem Katalog mit exportieren.

    Zwar bekomme ich mit dieser Zeile:
    $produkte = $relations[„ob“]->has_many(„products“, „products_id“, „orders_products_id“, „produkt“, „produkte“);

    eine Auswahl in „Spalten auswählen“ hin, kriege dann aber beim Export die Fehlermeldung:
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/localhost/htdocs/xt/admin/exanto-export/classes/ExantoExport.class.php on line 371

    Was mache ich falsch ?

    Viele Grüße und danke für das sehr nützliche Tool.

    Lutz

  10. Hi Lutz,

    du kannst nur Spalten einfügen die auch in der Tabelle vorhanden sind. Die Spalten produkt/produkte gibt es wahrscheinlich nicht.

    Schau mal in die Methodendefinition, wofür die einzelnen Angaben bei ->has_many und ->has_one gebraucht werden. Die müssen halt korrekt definiert sein in den Relation-Dateien.

  11. Hi Ingo,

    wieder zu schnell gefragt und nicht erst die Hirnzellen massiert 🙂
    Ich hab es hingebracht:
    $oprelation->has_many(„products_description“, „products_id“, „products_id“, „description“, „descriptions“);

    Schönes Wochende !

    Lutz

  12. Ich hab gerade mal nachgeforscht – die zu verwendende WaWi kann auch xml-Dateien „schlucken“, insofern passt es schon.

    Wenn die Sache live geht, gibts auch natürlich nen Backlink!

    Ich meld mich dann wieder.

    Schönes Wochenende,
    Manuel

  13. Hallo!
    Ich würde dieses Programm gerne nutzen um Bestellungen aus xtc zu exportieren und dann in EasyLog(DHL Software) zu importieren um daraus Versandlabels zu drucken. Jedoch schluckt Easylog nur csv Dateien.

    Hast du vlt eine Idee wie ich das sonst hinbekommen könnte?
    Grüße
    FaKe

  14. Hi FaKe,

    wenn du nur die Lieferadresse brauchst, dann brauchst du im Prinzip auch nicht diese Export-Software. Das kann sogar PHPMyAdmin als CSV exportieren.

    LG,
    Ingo

  15. Hi Ingo, danke für die schnelle Antwort!
    Bei den EasyLog Daten kommt noch mehr rein, wie zb. Gewicht der Ware.
    Ich will auch nicht unbedingt dass unsere Mitarbeiter in PHPMyAdmin rumhantieren.. ich sehe es kommen: „Oops ich habe ausversehen die Datenbank gelöscht“ 😉

    Gibt es da eine Möglichkeit? Habe sonst leider nichts vergleichbares gefunden.. :/
    Greets
    FaKe

  16. Hallo FaKe,

    ich habe nicht vor den Skript mit CSV auszurüsten, da man damit sehr schlecht die komplex verschachtelten Datensätze exportieren kann.

    Die beste Möglichkeit ist wahrscheinlich das von jemandem programmieren zu lassen, dann hast du genau das Passende für deinen Arbeitsablauf.

    Gruß,
    Ingo

  17. mh okay, das wird wohl das Beste sein.. dann meine Frage: macht ihr soetwas? 🙂 ..wenn ja können wir evtl. per E-Mail in Kontakt treten und über den Preis reden 😉

    LG
    FaKe

  18. Ich bins noch einmal 😉

    Jetzt habe ich vom Testsystem, wo alles klappt auf das reale umgestellt. Und jetzt krieg ich nur das beim Aufruf:
    Warning: touch() [function.touch]: Utime failed: Operation not permitted in /home/…/admin/exanto-export/classes/ExantoExport.class.php on line 312
    Fehler: Verzeichnis fÃŒr den Export nicht beschreibbar!
    Alle Unterverzeichnisse nebst exantoExport sind aber auf 777 …

  19. Ist bei der PHP-Installation eventuell das „touch“ Kommando deaktiviert? Manche PHP-Installationen verbieten das Ausführen von bestimmten Shellkommandos.

  20. Ich überlege ein XML-RPC Modul zu integrieren, um beliebiger externer Software den Zugriff auf die Datensätze ohne den Umweg über das händische Herunterladen der XML-Dateien zu gewähren.

    Ich wollte mal hoeflich fragen, ob es das schon gibt oder es konkrete Planungen dazu gibt. Hintergrund: Ich wuerde gerne haeufig wechselnde Artikel aus einem xt-c-Shop in WordPress anzeigen. Vielleicht koennen wir da irgendwie ins Geschaeft kommen. (?)

  21. Hallo,

    wir sind 2 Studenten, die im Rahmen eines Beleges Ihr Tool nutzen möchten. Nach Installation und Konfiguration startet das Tool zwar, jedoch bleibt nach Klick auf „Start“ der Bildschirm weiß und es passiert nichts mehr. Schreibrechte sind alle gesetzt und offene Bestellungen sind ebenfalls vorhanden. Woran kann das liegen? Danke im voraus.

  22. Hallo IT, folgendes Problem, wir bekommen diese Fehlermeldung:
    Fatal error: main() [function.require]: Failed opening required ‚includes/application_top.php‘ (include_path=‘.:/usr/lib/php‘) in /homepages/44/d38630989/htdocs/admin/exanto_export.php on line 22
    …evtl. nen Vorschlag zur linderung parat? Danke OM

  23. Hm, wurde der Skript denn in das xt:Commerce Verzeichnis entpackt? Er muss unter xt:c/admin/ liegen damit er funktioniert, da er u.a. die application_top.php von dort inkludiert.

  24. Hallo IT, wir sind sehr interessiert an einem XML-RPC Modul. Wir könnten damit offene Bestellungen in unsere auf Filemaker basierte Lösung importieren. Sind arbeiten in diese Richtung schon vorangeschritten ?

  25. Tolle Idee. Jetzt habe ich extra dafür auch PHP5 am laufen, ABER:

    Ich steh aufn Schlauch, wollte eigentlich Bestelldaten für Execel oder so exportieren:
    Name, Bestellnr, Bestelldatum, Bestellerland, netto, MwSt., Brutto

    Letzte drei Felder kann man ja nicht so einfach aus den Tabellen auswählen..

    Geht das überhaupt mit dem Export-Modul?

  26. @Kai: Geht alles, das Modul muß aber dafür angepasst werden. Ich glaube diese Daten stehen sogar in der Datenbank.

    @Mario: Schonmal mit Firefox getestet? Was sagt die Apache Logdatei?

  27. Ja bin nur mit dem Firefox unterwegs…auch schon andere Browser getestet.
    In den Logfiles stehen eine Millionen Urls drin 🙂 wüsste nicht wo ich da gucken soll

  28. Hi, aus dem Stehgreif keine Ahnung woran’s liegt, und leider auch keine Installation wo ich’s debuggen könnte momentan. Am Besten suchen und mir sagen damit ich den Fehler beheben kann 😉

  29. Ich habe noch einmal eine Frage. habe die letzte Version installiert. Export „offene Bestellungen“ klappt wunderbar. Export „offene + versendet“ geht nur teilweise. Der Status wird geändert – aber in der xml sind dann keine exportierten Daten drin…

    woran könnte das liegen?
    Ansonsten keine Fehlermeldungen, nix. Meckert nirgends :))

  30. Entwarnung. Ich hatte vergessen, dass man ja im anderen Status auch wieder die „Häkchen“ setzen muss – sonst exportiert er natürlich nix 🙂

  31. Geniales Tool! Funktioniert super. Gibt es eine Möglichkeit den Export auch direkt zu starten ? Also einfach Adresse ./exanto_export.php?action=export_to_file aufrufen und der Export passiert ohne weitere Eingabe mit einem festen Regelsatz ?

  32. Hi Martin, momentan wird das Rechtesystem von xt:Commerce genutzt um den Zugriff zu gewähren, das ließe sich natürlich auch anders realisieren. Von Haus aus geht das aber in der aktuellen Version nicht.

  33. Danke Ingo für die schnelle Anwort. Habe es grad hin bekommen allerdings muß man wirklich in das Rechtesystem eingreifen. Ist aber mit 2 Zeilen Code zu lösen. Danke für den Tip!

  34. Hi,
    ich benutze den export auch und es ist wirklich sehr komfortabel, bekomme es aber leider nicht hin, dass er alle Bestellungen mit status „offen“ UND „In Bearbeiung“ exportiert, bin mir über die syntax nicht im klaren, welche hinter $relations[„ob“]->condition = “ orders_status = ‚1‘ “ bzw. in die klammern muss, kann mir jemand helfen?

  35. Hi Chris, das in den Klammern ist ganz einfach SQL-Syntax. Also kannst du einfach statt orders_status = '1' diesen hier nehmen: orders_status = '1' OR orders_status = '$x', wobei du $x natürlich durch die Zahl ersetzen musst die dem „In Bearbeitung“ Status deines Shopsystems entspricht.

    1. Hey Ingo,
      vielen Dank, das Problem war die genaue syntax mit „OR“ da ich leider von SQL keine Ahnung habe und daher auch die entsprechende OR Verknüpfung nicht kannte, dachte es müsste etwas mit AND sein…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert