Produkt- und Kundendaten für den Online-Shop, Marketing-Kanäle und Vertriebsprozesse perfekt zu strukturieren, ist keine einfache Aufgabe. Bei der Erstellung eines Datenmodells müssen zahlreichen Faktoren berücksichtigt werden, damit sich die Daten am Ende effizient pflegen und performant speichern und verarbeiten lassen.
Das Digital Commerce Framework Pimcore bietet vielfältige Möglichkeiten, um ein Datenmodell ideal auf die eigenen Unternehmensprozesse abzustimmen. Bei der Wahl der Datentypen für die einzelnen Felder in Klassen, Objektbausteinen und Feldsammlungen führen verschiedene Wege zum Ziel. Da sich Unternehmensstrategie, Sortimentsstruktur etc. schnell ändern können, muss jedoch auch ein für den Moment perfektes Datenmodell regelmäßig angepasst werden. Nur so wird eine weiterhin sinnvolle, konsistente und effiziente Datenpflege sichergestellt.
Wenn Datentypen geändert werden, gehen allerdings meist die bisher in den Objekten eingetragenen Daten verloren. Häufig muss man also abwägen zwischen einer aufwendigen Nachpflege von Daten oder dem Akzeptieren eines für die neuen Anforderungen suboptimalen Datenmodells.
Mit dem BB Ultima Import Bundle besteht diese Wahl zwischen zwei Übeln nun nicht mehr: Damit ist es möglich, Datentypen ohne Datenverlust zu ändern!
Wenn Daten mit dem BB Ultima Import Bundle in Pimcore importiert werden, laufen die folgenden drei Schritte ab:
Als Datenquelle für den ersten Schritt können auch die Pimcore-Objekte selbst dienen. Um den Datentyp eines Objektfeldes umzuwandeln, werden im ersten Schritt die Daten aus den Pimcore-Objekten eingelesen. Anschließend können Sie den Datentyp des Objektfeldes (bzw. des Objektbausteins oder der Feldsammlung) anpassen. Natürlich gehen die Daten auch in diesem Fall vorerst verloren. Nun aber können Sie auf Basis der Rohdaten in die veränderten Objektfelder importieren.
Zur Veranschaulichung zeigen wir hier, wie Sie in einem Objektbaustein ein Nummernfeld in ein Quantity Value Feld umwandeln können. In unserem Beispiel wurden technische Daten zunächst ohne Einheiten gespeichert, da bei Einführung des Datenmodells alle Angaben in cm vorlagen. Künftig soll es das System jedoch erlauben, die Einheiten bei der Produktdatenpflege individuell anzupassen (z.B. Länge in mm, cm, m).
Ausgangssituation ist also eine Produkt-Klasse mit einem Objektbaustein-Feld. Die zugehörigen Objektbausteine enthalten verschiedene Nummernfelder:
Nun legen Sie einen Import an, der Daten aus den Pimcore-Produkt-Objekten importieren soll:
Für die Rohdatenfelder können Sie auf alle Getter-Methoden der Produktklasse zugreifen. In diesem Fall benötigen Sie den Objektpfad und den Objektschlüssel für die spätere Identifizierung der Objekte und natürlich die Objektbausteine, die die zu ändernden Datenfelder enthalten.
Nach dem Rohdatenimport sehen die Daten so aus:
Nun ändern Sie die Objektbaustein-Definition (von Nummernfeld zu Quantity Value Feld):
Anschließend ordnen Sie die Rohdatenfelder den Objektfeldern zu, um den Objektimport zu ermöglichen: Per Drag and Drop wird das Rohdatenfeld path auf die Objektfelder für den Objekt-Pfad und das Feld key dem Objekt-Schlüssel zugeordnet:
Beide Felder sind in diesem Fall Schlüsselfelder. Es wird also nach Objekten gesucht, bei denen sowohl der Pfad als auch der Schlüssel mit dem Rohdatenwert übereinstimmt.
Um die Rohdaten in die neuen Objektbaustein-Felder einzutragen, müssen die Rohdaten nun so aufbereitet werden, dass das Import Bundle sie versteht und die jeweiligen Setter-Methoden korrekt aufrufen kann.
Hierzu kann eine Callback-Funktion bei der Feldzuordnung hinterlegt werden. Darin können Sie auf die Rohdaten und auf die vorhandenen Objektdaten zugreifen. Im Falle der Objektbausteine mit Quantity Value Feldern sieht eine solche Callback-Funktion für das Feld width im Objektbaustein Stuhl so aus:
// Parsen des JSON-Strings, der die Objektbausteindaten enthält - das Umwandeln des Rückgabewertes der Brick-Getter-Methode in JSON übernimmt das Import-Bundle params.value = JSON.parse(params.value); // Falls Objekt keine technischen Daten hat, null zurückgegeben if(typeof params.value.primarytechnicaldata === "undefined") return null; // falls es den Objektbaustein "Stuhl" hat if(typeof params.value.primarytechnicaldata.Stuhl !== "undefined") { // den Wert aus dem alten Nummernfeld auslesen und als Array zur Befüllung des Quantity Value Feldes [Wert, Einheit] zurückgeben return [params.value.primarytechnicaldata.Stuhl.width, 'cm']; }
In diesem Beispiel ist die Callback-Funktion als JavaScript-Code hinterlegt. Es ist aber genauso möglich, PHP-Code zu hinterlegen. Über die Callback-Funktionen können sämtliche Pimcore-Datentypen angesteuert werden, also auch Relationen, Relationen mit Metadaten, Feldsammlungen usw.
Das BB Ultima Import Bundle erlaubt es Ihnen also, Ihr Datenmodell geänderten Anforderungen und Pimcore-Weiterentwicklungen ohne Datenverlust anzupassen.
Benötigen Sie Hilfe bei Datenmodelländerungen oder Importen aus externen Quellen? Wir beantworten gern Ihre Fragen und unterstützen Sie bei der Umsetzung.