Installation
Voraussetzungen
Magento 2.4.x — getestet mit 2.4.9, kompatibel mit vorherigen 2.4.*-Versionen. PHP 8.1–8.5. Erfordert codingrow/module-core (wird automatisch als Composer-Abhängigkeit installiert) für das gemeinsame Codingrow-Admin-Menü und die Lizenzvalidierung.
Einrichtungsschritte
- Fügen Sie die per E-Mail erhaltenen Zugangsdaten zu
auth.jsonim Stammverzeichnis Ihres Magento-Projekts hinzu:{ "http-basic": { "repo.codingrow.com": { "username": "...", "password": "..." } } } composer config repositories.codingrow composer https://repo.codingrow.comcomposer require codingrow/module-orderexportbin/magento module:enable Codingrow_OrderExportbin/magento setup:upgrade && bin/magento setup:di:compile && bin/magento cache:flush- Fügen Sie Ihren Lizenzschlüssel in Admin → Stores → Configuration → Codingrow → Order Export → License → Lizenzschlüssel ein, speichern Sie, dann
bin/magento cache:flush. - Setzen Sie in derselben Sektion, Gruppe General, Modul aktivieren auf "Yes" — das Modul wird auf Magento-Ebene aktiviert ausgeliefert, ist aber funktional deaktiviert, sodass es erst nach ausdrücklicher Aktivierung überhaupt etwas exportiert.
- Erstellen Sie Ihr erstes Profil unter Codingrow → Order Export → Export Profiles — siehe Profile weiter unten.
Die gesamte Profilverwaltung, der Mapping-Builder, das Protokoll und jede Benachrichtigungs-E-Mail sind in 7 Sprachen verfügbar, automatisch ausgewählt je nach Sprache des Admin-Benutzers:
Deinstallation
composer remove codingrow/module-orderexport dann
bin/magento setup:upgrade && bin/magento setup:di:compile && bin/magento cache:flush.
Profile und das Exportprotokoll (codingrow_orderexport_profile,
codingrow_orderexport_log) werden nie automatisch gelöscht —
verwenden Sie zuerst Profil exportieren, wenn Sie eine Kopie
Ihrer Profilkonfiguration behalten möchten.
Benutzerhandbuch
Profile
Alles im Modul ist um Profile herum organisiert, aufgelistet unter Codingrow → Order Export → Export Profiles. Jedes Profil ist vollständig unabhängig: eigener Name, eigener Ein-/Aus-Schalter, eigener/e Trigger-Status, eigenes Ziel (Kanal + Format), eigenes Feld-Mapping und eigene Zeile im Exportprotokoll — Sie können beliebig viele Profile parallel betreiben (eines pro Lieferant, eines pro Spediteur, eines für ein internes ERP), und das Deaktivieren oder Löschen eines Profils wirkt sich nie auf die anderen aus.
Ein deaktiviertes Profil (Profil aktiviert = "No") exportiert nie etwas, unabhängig davon, ob automatisch ausgelöst, über die manuelle Aktion oder über den CLI-Befehl — dies ist unabhängig vom modulweiten Schalter Modul aktivieren unter System Config, der als einziger Hauptschalter alle Profile gleichzeitig abschaltet.
Kanäle & Formate
Jedes Profil wählt einen Kanal (wohin das Payload geliefert wird) und ein Format (wie es serialisiert wird) — die beiden Entscheidungen sind unabhängig, jedes Format funktioniert also mit jedem Kanal.
| Kanal | Typische Nutzung | Wichtige Einstellungen |
|---|---|---|
| REST API | Sendet das Payload als HTTP-Anfrage an einen Webservice | Ziel-URL, HTTP-Methode (GET/POST/PUT/PATCH), Authentifizierung (Keine, HTTP Basic, Bearer-Token), Mindestsekunden zwischen Anfragen (Rate-Limiting, standardmäßig 1 Sekunde) |
| FTP / SFTP | Lädt das Payload als Datei auf einen entfernten Server hoch | Host, Port (standardmäßig 21), Benutzername, Passwort, entfernter Pfad, optionales FTPS (explizites TLS), passiver Modus |
| Lokale Datei | Schreibt das Payload in eine Datei unter dem
eigenen pub/media/ dieses Stores, damit ein externes System sie per HTTP abholen kann |
Unterordner — die Datei landet unter
pub/media/codingrow_orderexport/<Unterordner>/ (Standard-Unterordner:
"default") |
Formate: JSON, XML oder CSV, unabhängig vom obigen Kanal wählbar — dasselbe Feld-Mapping (siehe unten) steuert alle drei, das Format ändert nur die Art der Serialisierung.
Feld-Mapping
Der Tab Mapping ist eine Tabelle mit Zeilen, die jeweils ein target (den
Feldnamen in der Ausgabe — ein Punkt bedeutet eine Verschachtelungsebene, z. B.
customer.email) mit einem source path verbinden, der aus einer
Dropdown-Liste aller verfügbaren Bestell-/Kunden-/Artikelfelder gewählt wird. Leere Zeilen werden
beim Speichern ignoriert.
Die Zeilen werden von oben nach unten in derselben Form wie die Ausgabe selbst gelesen: zuerst eine optionale Header-Vorlage, dann die Mapping-Zeilen auf Bestellebene, dann etwaige Repeat blocks (siehe unten), und zuletzt eine optionale Footer-Vorlage.
Transformationen
Jede Mapping-Zeile kann eine Transformation auf den Quellwert anwenden, bevor er in das Zielfeld geschrieben wird:
| Transformation | Was sie tut |
|---|---|
| Keine | Direkte Kopie des Werts des source path (fällt auf "Default value" zurück, wenn die Quelle leer ist). |
| Statischer Wert | Ignoriert die Quelle vollständig, schreibt immer den festen Text aus "Value". |
| HTML-Tags entfernen | Entfernt HTML-Markup aus dem Quellwert — nützlich für einen Produktnamen oder eine Beschreibung mit restlicher Formatierung. |
| Textvorlage | Freier Text mit Platzhaltern, z. B.
{order.shipping_address.firstname} {order.shipping_address.lastname}.
Innerhalb eines Platzhalters steht auch eine Funktion zur Verfügung:
striphtml{path} (entspricht der Transformation Strip HTML tags, inline
nutzbar) und substr{path,N} (entfernt die ersten N Zeichen, z. B.
substr{order.some_code,3}). |
| Suchen und ersetzen | Sucht den Text "Search" im Quellwert (Groß-/Kleinschreibung wird ignoriert) und ersetzt ihn genau wie angegeben durch "Value". |
| Zahl | Serialisiert den Wert als echte JSON-Zahl statt als
Zeichenkette in Anführungszeichen — nutzen Sie dies, wenn das Ziel den TYP des Feldes
strikt validiert (eine als datenbankrohe Zeichenkette "1.0000" gesendete
Menge wird von manchen APIs abgelehnt, während 1.0 als echte Zahl akzeptiert
wird). Dies ist bewusst nicht die Vorgabe für numerisch aussehende Felder:
sie überall zu aktivieren würde stillschweigend führende Nullen aus Dingen wie einer
Postleitzahl oder einem Artikelcode entfernen — es ist daher eine pro Zeile bewusst
gewählte Option, kein automatisches Verhalten. |
Dieselbe {path} / striphtml{} / substr{}-Syntax, die in
Text-template-Zeilen verwendet wird, steht auch in Repeat-block-Zeilen und im optionalen
Header/Footer des Profils zur Verfügung.
Wiederholungsblöcke
Ein Wiederholungsblock erstellt ein verschachteltes Array in der Ausgabe — der häufigste Fall ist ein Eintrag pro Bestellposition. Jeder Block hat einen Block output key (wo das Array in der Ausgabe geschrieben wird) und eine source collection (worüber er iteriert, z. B. die Artikel der Bestellung), sowie seine eigenen Mapping-Zeilen darunter, die einmal pro Element ausgewertet werden, wobei "current" auf dieses Element beschränkt ist — der source path einer Zeile innerhalb eines Wiederholungsblocks bezieht sich also auf Felder des aktuellen Artikels, nicht auf die gesamte Bestellung.
items, der source
collection "Order items" und zwei Zeilen (sku ← SKU des aktuellen Artikels,
qty ← Menge des aktuellen Artikels) erzeugt:
{
"items": [
{ "sku": "43241", "qty": 2 }
]
}
Ein Profil kann beliebig viele unabhängige Wiederholungsblöcke definieren — zum Beispiel
einen für die Artikelliste und einen separaten für eine Liste angewendeter Rabatte.
Lieferantenartikel-Filter
Zwei Einstellungen im Tab General entscheiden, welche Bestellzeilen tatsächlich exportiert werden, zusätzlich zu dem, was die eigene source collection eines Wiederholungsblocks bereits enthält:
- Nur Lieferantenartikel — bei "Yes" (Standardeinstellung, passend zum Dropshipping-Fall, für den dieses Modul gebaut wurde) werden nur Bestellzeilen exportiert, deren Produkt das unten genannte Attribut ausgefüllt hat; bei "No" wird jede Bestellzeile einbezogen.
- Lieferanten-SKU-Attribut — das Produktattribut, das durch die obige
Einstellung geprüft wird, da nicht jeder Katalog es gleich benennt (
supplier_skuist nur der übliche Standardwert).
Wenn "Nur Lieferantenartikel" Zeilen aus einer Bestellung ausschließt, zeigt die Live-Vorschau eine ausdrückliche Warnung, die angibt, wie viele Zeilen aus welchem Grund ausgelassen wurden — ein leeres oder kürzer als erwartetes Payload ist so nie eine stille Überraschung.
Live-Vorschau
Die Schaltfläche Preview auf der Profil-Bearbeitungsseite erstellt ein temporäres, nie gespeichertes Profil aus dem aktuellen Inhalt des Formulars — einschließlich noch nicht gespeicherter Änderungen — und führt es anhand einer von Ihnen gewählten echten Bestellung genau über denselben Codepfad aus, der auch für einen echten Export verwendet wird. Das Ergebnis ist genau das JSON/XML/CSV-Payload, das diese Bestellung erzeugen würde, sodass Sie das Mapping korrigieren können, bevor das Profil überhaupt aktiviert wird — statt es erst nach einem fehlgeschlagenen echten Export zu bemerken.
Trigger & Deduplizierung
Die Mehrfachauswahl Auslösestatus im Tab General listet auf, welche(r) Bestellstatus einen automatischen Export für dieses Profil startet/starten (Strg/Cmd-Klick, um mehrere auszuwählen) — sie wird nur beim automatischen, ereignisgesteuerten Trigger geprüft; die manuelle Aktion in der Übersicht und der CLI-Befehl ignorieren sie absichtlich, da das manuelle Auslösen selbst schon die bewusste Entscheidung ist, unabhängig vom Status zu exportieren.
Jeder erfolgreiche und fehlgeschlagene Versuch wird in das Protokoll dieses Profils geschrieben (siehe unten), und das Protokoll ist auch das, was Duplikate verhindert: dieselbe Bestellung wird von demselben Profil nie automatisch zweimal exportiert, unabhängig davon, was danach mit der Bestellung geschieht (weitere Bearbeitungen, Statuswechsel hin und her). Wird ein echtes erneutes Senden benötigt — zum Beispiel nach der Behebung eines Problems auf Zielseite — verwenden Sie Erneutes Senden erzwingen, was diesen Schutz ausdrücklich umgeht.
Exportprotokoll & erzwungenes erneutes Senden
Jedes Profil hat seinen eigenen Protokoll-Tab: ID, Bestellung, Ergebnis (Success/Error), was den Versuch ausgelöst hat, HTTP-Status, Fehlermeldung, Datum und eine ausklappbare "Details"-Zeile mit dem genauen gesendeten Request-Payload und dem empfangenen Response-Body — dieselben Informationen, nach denen der Support bei der Fehlersuche für einen fehlgeschlagenen Export fragt.
Die Schaltfläche Erneutes Senden erzwingen einer fehlgeschlagenen Zeile führt den Export für genau diese Bestellung über genau dieses Profil jetzt sofort erneut aus, wobei der oben beschriebene Duplikatschutz ignoriert wird — ein Bestätigungsdialog weist ausdrücklich darauf hin, bevor die Aktion ausgeführt wird, da es sich um ein bewusstes Übersteuern handelt, nicht um das Standardverhalten.
Fehlerbenachrichtigungs-E-Mails
Zwei Einstellungen im Tab General steuern Fehlerbenachrichtigungen, unabhängig vom Protokoll (das unabhängig von diesen Einstellungen immer jeden Versuch erfasst): Benachrichtigungsempfänger (eine oder mehrere durch Komma getrennte E-Mail-Adressen — leer lassen, um nichts zu senden) und E-Mail senden bei (welche Ereignisse eine Benachrichtigung auslösen).
Der E-Mail-Text enthält den tatsächlichen vom Ziel zurückgegebenen Fehler, nicht nur eine
allgemeine HTTP-Statuszeile: Wenn der Response-Body als JSON mit einem message-Feld
geparst werden kann, wird diese Meldung wortwörtlich angehängt (z. B. "Destination returned HTTP
422 - Minimum product quantity is 1.0"); andernfalls wird der rohe Response-Body eingefügt,
gekürzt auf 500 Zeichen — so ist die tatsächliche Ursache direkt im Postfach sichtbar, ohne das
Protokoll öffnen zu müssen.
Profil importieren/exportieren
Die Schaltfläche Profil exportieren auf der Bearbeitungsseite eines Profils lädt dessen gesamte Konfiguration — allgemeine Einstellungen, Ziel, Mapping-Zeilen und Wiederholungsblöcke — als einzelne JSON-Datei herunter, wobei die Zugangsdaten des Ziels bewusst ausgeschlossen sind, sodass die Datei gefahrlos gespeichert, mit dem Support geteilt oder zusammen mit einem Deployment versioniert werden kann. Die Schaltfläche Profil importieren in der Export-Profiles-Übersicht erstellt ein Profil aus einer solchen Datei neu — der typische Anwendungsfall ist das Verschieben eines Profils von einem Staging-/Demo-Store zur Produktion, oder das Sichern eines Mappings, mit dem Sie zufrieden sind, bevor Sie weiter experimentieren. Zugangsdaten müssen nach einem Import immer von Hand neu eingegeben werden, da sie nie in der Datei enthalten waren.
Lizenz
Eine Lizenz pro Domain, eingegeben unter Admin → Stores → Configuration → Codingrow → Order Export → License → Lizenzschlüssel. Enthält alle Updates für diese Domain. Müssen Sie zu einer anderen Domain wechseln (Staging → Produktion oder eine Site-Migration)? Ihr erster Domainwechsel ist kostenlos und sofort von Ihrer Kontoseite aus möglich — kein Warten, kein Ticket nötig. Ab dem zweiten Wechsel ist ein Wechsel einmal pro Jahr erlaubt. Sie können außerdem innerhalb von 30 Tagen nach dem Kauf selbstständig eine Rückerstattung von derselben Kontoseite aus anfordern.