Erstellung einer benutzerdefinierten Integration für ein externes DAM in Magnolia
Magnolia bietet nicht nur ein standardmäßiges Digital Asset Management (DAM), sondern lässt sich auch mit DAM-Plattformen wie Cloudinary und Bynder integrieren. Obwohl es technisch gesehen kein DAM ist, bieten wir auch einen Konnektor zu Amazon S3, das von unseren Kunden häufig zum Speichern von Assets verwendet wird. Schön, aber das ist noch nicht das Ende der Geschichte.
Bei Magnolia sind wir stolz auf unsere Flexibilität und Erweiterbarkeit. Wenn Sie also ein anderes DAM nutzen oder eine eigene Lösung entwickelt haben, gibt es mit großer Wahrscheinlichkeit eine Möglichkeit, diese mit Magnolia zu kombinieren. Lassen Sie uns herausfinden, wie.
Änderungen im DAM-Bereich in Magnolia 6.2
In DAM 3.0 mit Magnolia 6.2 haben wir einige wichtige Änderungen an der Funktionsweise unserer Assets App vorgenommen, darunter die Unterstützung von Subapps mit separaten Datenanbietern. Zusammen mit der YAML-Dekoration können Sie nun die native Magnolia-App mit externen DAM-Systemen nutzen.
Unser DAM Connector Pack enthält Konnektoren, die Assets in Magnolias Asset-Browser verfügbar machen. Während unsere Integration für Bynder auf einer Liste von Assets mit Schwerpunkt auf Caching und Lazy Loading basiert, haben wir uns für die Integration mit Amazon S3 entschieden, indem wir das klassische Ordner-Browsing dem Baum-Browsing vorziehen, weil es besser zu dieser Speichermethode passt.
Zusätzlich zu diesen Konnektoren können Sie mit unserem externen DAM-Modul Ihre eigenen erstellen.
Maven ist der einfachste Weg, das Modul zu installieren:
<dependency>
<groupId>info.magnolia.externer.damm</groupId>
<artifactId>magnolia-external-dam</artifactId>
<version>[neueste Version]</version>
</dependency>
Komponenten der Datenquelle
DieDatenquelle ist eine Gruppe von Komponenten, die für die Bereitstellung und Konvertierung von externen Assets in Magnolia-Asset-Objekte zuständig ist. Sie wird in einem Moduldeskriptor definiert:
info.magnolia.ui.datasource.ItemResolver
info.magnolia.ui.datasource.DatasourceDefinition
info.magnolia.ui.datasource.PropertySetFactory
info.magnolia.ui.contentapp.browser.preview.PreviewProvider
info.magnolia.ui.contentapp.ItemDescriber
info.magnolia.ui.contentapp.browser.ItemInteractionAvailability
info.magnolia.dam.api.AbstractAssetProvider
info.magnolia.dam.api.AbstractAssetProvider ist das Herzstück eines jeden Connectors. Für die Konnektoren in unserem Connector Pack haben wir eine Serviceschicht mit dem Suffix [Gateway] darüber erstellt. Diese Schicht ist verantwortlich für die Übersetzung von Aufrufen aus dem externen DAM und die Erstellung von Magnolia-Objekten. Außerdem hält sie den gesamten Code, der mit dem SDK des externen Systems zusammenhängt, zusammen und erleichtert so die Wartung und Anpassung des Codes an neuere Versionen.
How to Build your Commerce Connector
Connecting commerce and content is fundamental for a retailer’s digital experience platform (DXP). Learn how to build a custom integration with Magnolia through your commerce system’s SDK or API to build the best shopping experiences.
Caching
Für die Zwischenspeicherung von Methodenergebnissen verwenden wir das Magnolia-Modul 'magnolia-addon-commons-cache'. Es basiert auf dem'com.github.ben-manes.caffeine'-Projekt und dem aopalliance-Methoden-Interceptor von Guice.
Bei der Installation unseres externen DAM-Moduls wird das Cache-Modul als Abhängigkeit mit installiert:
<dependency>
<groupId>info.magnolia.addon.commons</groupId>
<artifactId>magnolia-addon-commons-cache</artifactId>
</dependency>
Das Modul bietet @Cacheable- und @CacheEvict-Annotationen, um Methoden zu markieren, die gecacht werden müssen oder die Cache-Eviction aufrufen müssen. Sie können mehr als einen Cache evozieren, indem Sie mehrere @CacheEvict in @Caching einwickeln. Sie können sogar wählen, ob Sie den Cache vor oder nach der Ausführung evozieren wollen.
Gateway
Jedes DAM funktioniert anders, daher gibt es keine generische Schnittstelle, die als Gateway verwendet werden kann. Das Gateway für jeden unserer Konnektoren bietet eine Reihe von CRUD- und Suchoperationen basierend auf der gewählten Verbindungsmethode. Jedes Objekt wird im Moduldeskriptor als Magnolia-Komponente registriert, die in verschiedene Klassen injiziert werden kann. Wenn Sie eine neue Integration entwickeln, können Sie eines der Gateways als Vorlage für Ihren Anwendungsfall verwenden.
Erstellen Sie Ihren eigenen Anschluss
Ich schlage vor, mit einer leeren Klasse vom Typ "Gateway" zu beginnen und nach Bedarf Methoden hinzuzufügen.
Anschließend müssen Sie auswählen, wie die Assets im Asset-Browser angezeigt werden sollen. Magnolia bietet Baum- und Listendarstellungen. Darüber hinaus können Sie unseren S3-Konnektor als Vorlage für einen Ordner-Browser verwenden.
Dann können Sie mit der Erstellung von datasource beginnen und AbstractAssetProvider implementieren.
Fügen Sie anschließend Ihren neuen Asset-Anbieter hinzu, indem Sie eine YAML-Dekoration [module-name]/decorations/dam-app-core/apps/dam.subApps.yaml#! erstellen. Um dann Ihre neue Sub-App hinzuzufügen, dekorieren Sie die DAM-App wie in [Modulname]/decorations/dam-app-core/apps/dam.subApps.yaml#! gezeigt.
Fügen Sie dann eine Aktion nach der anderen hinzu. Wenn Sie sich nicht auf das Ergebnis der Aktion verlassen wollen, sollten Sie info.magnolia.external.dam.app.action.AsynchronousAction verwenden, um die Benutzeroberfläche nicht zu blockieren. Denken Sie auch daran, Ihr "Gateway" zu benutzen und die Ergebnisse der Methoden mit Bedacht zu cachen, um Ihre Assets wartbar zu halten und Inkonsistenzen zu vermeiden.
Schlussfolgerung
Unser externes DAM-Modul ermöglicht es Ihnen, externe Assets in Magnolia zu nutzen. Autoren können Assets wie Bilder, Videos oder Dokumente bearbeiten und einfach zu einer Seite hinzufügen, ohne die Magnolia-Oberfläche zu verlassen.
Das Caching-Modul ermöglicht das faule Laden von Assets im Asset-Browser und hilft so bei der Verwaltung großer Mengen von Assets in Ihrem DAM-System oder Speicher. Sie benötigen einige Grundkenntnisse in Java, um datasource vorzubereiten, aber der Code erfordert keine anspruchsvolle Logik. Es ist ein unterhaltsames Puzzle, das sich in kurzer Zeit zusammensetzen lässt.