3.5.0 – Pimcore Data Director in der neuen Version

Stefano Viani

Geschäftsleitung

08 Nov 2023 Pimcore Import, Export PIM

Die neue Version des Pimcore Data Directors haben unsere Entwickler mit neuen praktischen Funktionen versehen. Die größte Veränderung: Der Data Director ist nun vollständig kompatibel mit Pimcore 11.

Voll kompatibel mit Pimcore 11: Version 3.5.0 des Pimcore Data Directors von Blackbit

Pimcore 11 Kompatibilität

Version 3.5.0 ist vollständig kompatibel mit Pimcore 11: Zwar hat Pimcore einige Bundles aus dem Kernprodukt entfernt (Application Logger, Reports, Redirects etc.). Der Data Director ist jedoch nicht mehr von diesen Bundles abhängig und folgt damit dem Pimcore-Standard: Installieren Sie einfach die Bundles, die Sie benötigen – der Data Director funktioniert mit all Ihren installierten Bundles.

Außerdem haben wir die Kompatibilität auch in die andere Richtung verbessert: Der Data Director 3.5 ist kompatibel mit PHP 7.3, sodass Pimcore 5 und 6 weiterhin unterstützt werden.

Hintergrundprozess zur Überprüfung, ob automatische Dataports ausgeführt werden sollen

In früheren Versionen wurde direkt beim Speichern eines Pimcore-Elements geprüft, welche automatischen Dataports gestartet werden sollten. Wenn ein automatischer Dataport eine komplexe SQL-Abfrage hatte, konnte dies einige Zeit dauern. Dies galt auch für manuell ausgeführte Speicherungen im Pimcore-Backend, sodass der User in diesem Fall warten musste, bis die Prüfung für alle automatischen Datenports fertig war. In Version 3.5.0 wird diese Prüfung nun in einem Hintergrundprozess ausgeführt, sodass das manuelle Speichern eines Elements genauso schnell ist wie ohne Data Director.

Automatisches Testen von Dataports

Mit dem Befehl bin/console data-director:create-test <Dataport ID> können Sie einen PHPUnit-Test für den angegebenen Dataport erstellen. Basierend auf den aktuell vorhandenen Rohdaten und dem Mapping wird eine Testklasse erstellt. Sie können diese automatischen Tests über PHPUnit ausführen.

Hauptzweck der automatischen Tests:

  1. Sicherstellen, dass nach Änderungen der Datenport-Einstellungen oder der Attribut-Zuordnung alles so funktioniert wie zuvor.
  2. Sicherstellen, dass vor und nach Aktualisierungen/Änderungen der zugrundeliegenden Bibliotheken wie Pimcore oder Data Director selbst, alles wie zuvor funktioniert.

Zum Ausführen der Tests wird eine phpunit.xml benötigt. Wenn diese nicht bereits im Pimcore-Stammverzeichnis vorhanden ist, wird sie automatisch erstellt. Wenn sie bereits existiert, wird eine neue Testsuite hinzugefügt. Nach dem Erstellen der Tests erhalten Sie direkt Hilfestellung, wie die Tests ausgeführt werden können.

Dataport-Synchronisation zwischen mehreren Pimcore-Systemen

Der Befehl data-director:deployment:dataport-rebuild kann nun auch zur Synchronisation von Dataports zwischen mehreren Pimcore-Systemen verwendet werden. Es gibt zwei neue REST-Endpunkte:

  • GET http(s)://<YOUR-DOMAIN>/api/dataports?apikey=<API key>
    gibt eine JSON-Liste der Dataports zurück, die der durch <API Key> angegebene Benutzer konfigurieren darf.

  • GET http(s)://<YOUR-DOMAIN>/api/dataports/<dataport id oder name>?apikey=<API key>
    gibt die Dataport-Konfiguration als JSON zurück, die zum Einrichten von Dataports über den Befehl data-director:deployment:dataport-rebuild verwendet werden kann (genau wie beim Exportieren der Dataport-Konfiguration oder bei der Verwendung von Git zum Speichern von JSON-Konfigurationsdateien).

Um Dataports von einem Remote-System zu importieren, können Sie
bin/console data-director:deployment:dataport-rebuild --source=https://other-pimcore.com --api-key=<API key>
aufrufen. Als optionales Argument können Sie den Namen des Dataports angeben, der abgerufen werden soll – anderenfalls werden alle Dataports abgerufen.

Wenn Sie mit einer Remote-Quelle arbeiten, werden nur Dataports importiert, deren letzte Version importiert wurde oder die noch nicht existieren. Bei bereits existierenden Dataports, deren letzte Version von einem echten Benutzer bearbeitet wurde, werden Sie gefragt, ob Sie die lokale Dataport-Konfiguration überschreiben wollen, um zu verhindern, dass lokale Änderungen überschrieben werden. Sobald Sie den Import zulassen, wird die letzte Version als importiert markiert und kann somit in Zukunft automatisch synchronisiert werden. Wenn Sie lokale Änderungen immer überschreiben wollen, verwenden Sie das --force Flag.

UI-Änderungen

Pimcore-Perspektiven

Perspektiven sind ein mächtiges, aber selten verwendetes Feature von Pimcore. Der Data Director bietet nun eine Basis-Perspektive, die auf den Gruppen der Datenobjektklassen basiert. Alle Datenobjektklassen, die zur selben Gruppe gehören, werden im selben Perspektiven-Panel angezeigt. Der Root-Ordner wird automatisch auf das niedrigste übergeordnete Objekt optimiert, das alle Objekte der entsprechenden Klasse enthält.

Zusätzlich enthält die Perspektive auch ein Dashboard, das einen Queue-Monitor und Portlets für getaggte Elemente und Datenportfehler enthält. Natürlich können diese Portlets auch in anderen Dashboards verwendet werden (z.B. könnte das Portlet für getaggte Elemente als To-do-Liste verwendet werden).

Element Tree Tooltips

Standardmäßig zeigt Pimcore nur die Element-ID und die Klasse an, wenn man mit der Maus über ein Element im Baum hovert. Diese Informationen sind nur selten von Nutzen. Der Data Director wird in Version 3.5.0 nun mit einem Standard-Tooltip ausgeliefert, der alle Felder, die so konfiguriert sind, dass sie in der Gridansicht angezeigt werden, auch im Tooltip anzeigt.

Path Formatter für Assets

@DataDirectorSearchViewPathFormatter und @DataDirectorGridViewPathFormatter unterstützen jetzt die Anzeige von Asset-Metadaten für Asset-basierte Relationen (als Tooltip beim Drüberfahren mit dem Mauszeiger).

Außerdem unterstützen sie jetzt die direkte Bearbeitung mit MS Office-Tools für Excel-, Word- und PowerPoint-Assets: Der angezeigte Asset-Pfad wird verlinkt: Wenn Sie daraufklicken, wird das Asset in MS Office geöffnet. Alle gespeicherten Änderungen werden direkt über die WebDAV-Schnittstelle in Pimcore übernommen – ohne die Datei manuell herunter- und wieder hochladen zu müssen.

Dataport-Einstellungen

  • Unterstützung des Kopierens mehrerer Rohdatenfelder
  • Vereinfachter Zugriff auf komplexe Import-Ressourcen:
    • Unterstützung der direkten Eingabe von PHP-/Shellcode, z.B. für den Zugriff auf Daten von OAuth2-APIs. So besteht keine Notwendigkeit mehr, eine separate Skriptdatei zu erstellen.
    • Unterstützung der Verwendung von PHP-Code als Importressource, die eine URL zurückgibt (z.B. HTTP, FTP, Pimcore-Assetpfad). So kann sich das Skript auf die Logik zur Generierung der URL konzentrieren, während der Code für den tatsächlichen Zugriff auf die Ressource an den Data Director delegiert wird.
  • Unterstützung der Abfrage von Asset-Metadatenfeldern in SQL-Bedingungen über deren Namen, z.B. metaField=1.
  • Unterstützung von Platzhaltern im Zielordner/Asset-Zielordner (z.B. bei der Angabe des Zielordners in abhängigen Datenport-Parametern).

Attribut-Mapping

  • Verbesserte Performance des Attribut-Mapping-Panels.
  • Callback-Funktionsfenster
    Im Baum der verfügbaren Variablen werden einzelne Raw-Item-Felder als Unterbaum von $params['rawItemData'] Dasselbe gilt für einzelne Felder von $params['currentObjectData'].
  • Zuerst wird nun die Datenport-Version gespeichert, dann Attribut-Mapping-Beispieldaten verarbeitet. So kann man bei kritischen Syntaxfehlern in einer der Callback-Funktionen immer noch zur vorherigen Version zurückkehren.
  • Felder, die über den Button „automatic mapping“ gemappt wurden, werden nicht mehr automatisch gespeichert, das Mapping-Ergebnis kann allerdings überprüft und anschließend gespeichert werden.
  • Hinzufügen einer Checkbox für das Feld „Pfad“, um untergeordnete Elemente vor dem Import zu löschen, analog zu „Vor Import leeren“ für relationale Felder.

Andere Änderungen

Folgende weitere Funktionen sind in 3.5 enthalten:

  • SQL-Bedingung
    Unterstützung der Filterung für Metadaten-Spalten von erweiterten Many-to-Many-Objektbeziehungen, z.B. active=1 für eine erweiterte Many-to-Many-Beziehung „markets“ mit booleschem Metafeld „active“.
  • Für Remote-Datenport-Ressourcen werden nun weniger Dateikopien angelegt.
  • Ergebnisdokument-Vorlage für Excel-Export hinzugefügt.
  • Identische Rohdatenelemente werden bei der Ausführung von dd:process nicht mehr mehrfach verarbeitet.
  • Unterstützung des Imports von Mengenwerten mit Tausender-Trennzeichen wie 1.234,56 kg.
  • Erweitertes Logging: Hinzufügen von Logs zum Dataport-Log, das über PimcoreLogger::error() und ähnliche Methoden protokolliert wird.
  • Unterstützung für das Schlussfolgern von Feldwerten aus Texten über die ChatGPT-API für erweiterte Many-to-Many-Beziehungen.
  • Änderung der Priorität für die Auflösung von virtuellen Feldern, z.B. :
    • wenn das Feld „field“ in der Zielklasse wirklich existiert, wird der Rückgabewert dieses Feldes verwendet (zur Wiederverwendung von Rückgabewerten anderer Felder)
    • Anfrageparameter „field“ verwenden
    • Rohdatenfeld mit dem Namen „field“ verwenden
    • Zuvor führte es zu Problemen mit abhängigen Dataport-Parametern, wenn der aufgerufene Dataport ein Rohdatenfeld mit demselben Namen hatte. Dann gab es keine Möglichkeit, auf den Parameter zuzugreifen.
  • Serialisierungs-Bugfix
    Export boolescher Werte als 0/1 war in einigen Fällen „true“/„false“.
  • Nur noch Umgebungsvariablen bereitstellen, die tatsächlich in Callback-Funktionen verwendet werden, um Speicherverbrauch zu reduzieren.
  • Unterstützung von SQL-Abfrageoptimierungen für lokalisierte Relationsfelder wie relationField#de LIKE '%,1234,%'. Hier wurden bisher nur nicht-lokalisierte Felder unterstützt.
  • Unterstützung des Zugriffs auf den lokalisierten Klassifizierungsspeicher über den Datenabfrage-Selektor classificationStore#de.
  • Datenabfrage-Selektor für Klassifizierungsspeicher: Syntax classificationStoreField:groupName gibt nun ein Schlüsselwert-Array aller Felder der Gruppe zurück und classificationStoreField:groupName:fieldName gibt den Wert des angegebenen Klassifizierungsspeicherfeldes zurück.
  • Unterstützung von IN() in Data-Query-Selektoren, z.B. Product:sku:[123,234]
  • Pimcore-basierte Dataports automatisch ausführen, wenn die Initialisierungsfunktion „Alle x Stunden ausführen“ verwendet wird (löst einen Pseudo-Cronjob aus).
  • Thumbnails im WEBP-Format exportieren, wenn das Thumbnail-Format „Auto (Web optimiert)“
  • Unterstützung der automatischen Erstellung nicht vorhandener Auswahlfeldoptionen für Klassifizierungsspeicher und für Multiselect-Felder.
  • Rohdatenextraktion
    Es werden keine leeren Rohdatenfelder importiert, was eine schnellere Rohdatenextraktion erlaubt, z.B. CSV mit technischen Daten, wo bestimmte Spalten nur für Produkte einer bestimmten Produktgruppe gelten, aber für alle anderen leer sind.
  • Automatisches Löschen von (temporär) erstellten übergeordneten Elementen, die keine untergeordneten Elemente mehr haben. Dies passiert, wenn die Importreihenfolge nicht zuerst übergeordnete Objekte erstellt.
  • Serialisierung der Source-/Target-Konfiguration des Dataports als JSON statt mit serialize() für eine bessere Lesbarkeit bzw. Diff-Ansicht für Versionsdateien.
  • Queue-Monitor
    Speichert aktuellen Status in der Datenbank anstatt dateibasiert. Das ist notwendig, wenn der Queue-Prozessor in einem anderen Container als Pimcore läuft.
  • Viele weitere Bugfixes.

Nützliche Pimcore Data Director-Tutorials

Viele weitere hilfreiche Tipps und detailgenaue Anleitungen zur Anwendung des Pimcore Data Directors bieten wir Ihnen in den Video-Tutorials in der Blackbit Academy sowie auf dem Blackbit YouTube-Kanal.

Sie kennen unseren Data Director noch nicht?

Wenn Sie unser leistungsstarkes Import- und Export-Bundle erst noch kennenlernen möchten, dann informieren Sie sich jetzt in unserem Shop darüber, welche Möglichkeiten der Data Director für Pimcore Ihnen eröffnet.
Sprechen Sie uns jetzt an und wir stellen Ihnen das Bundle gerne in einer individuellen Demo vor.

Über den Autor

Als Executive Director der Blackbit digital Commerce GmbH leitet Stefano Viani alle Bereiche der Agentur in den Büros in Göttingen, Hamburg, Berlin und Kiew. Seine Leidenschaft gilt der Entwicklung von Marketingstrategien und deren Umsetzung in konkrete Maßnahmen.

In seiner Freizeit fährt Stefano leidenschaftlich gerne Motorrad oder trainiert im Fitnessstudio.