#AEM

Stapelverarbeitung von Inhalten in AEM mit Groovy Console

Inhalt

Aufgaben

Eine der Aufgaben, denen AEM-Entwickler begegnen können, ist die Verarbeitung von JCR-Inhalten. Manchmal müssen Sie eine enorme Menge an Daten aktualisieren/ändern/paketieren/analysieren, und dies in einer Live-Umgebung zu tun, macht es doppelt so schwierig.

Hier sind einige typische Fälle:

  • Änderung der Inhaltsstruktur (zum Beispiel: news/feb/event -> news/2015-2016/feb/event);
  • Inhalte ändern/korrigieren (zum Beispiel: die Schreibweise von ‘colour’ zu ‘color’ auf jeder Seite ändern);
  • Inhalte analysieren (im MSM verwenden Redakteure Assets von einer anderen Website; es müssen alle falschen Verwendungen gefunden werden);
  • Inhalte vorbereiten und paketieren (z.B. während der Migration von CQ5.x zu AEM6.x müssen Sie zuerst den Inhalt analysieren und ein gültiges Paket für die Migration erstellen).

Lösungen

Für jeden Fall gibt es mehrere Lösungen und Workarounds:

  • Servlets/JSP/Scriptlets
  • AEM Util PackagesEntdecken Sie, wie Sie die Stapelverarbeitung von Inhalten in Adobe Experience Manager mithilfe der Groovy Console vereinfachen können, um Inhaltsaktualisierungen, Analysen und Migrationen in einer Live-Umgebung mühelos zu gestalten.
  • Externe Tools
  • Groovy Console

Konzentrieren wir uns auf die Groovy Console. Sie ist eine Wunderwaffe, wenn es darum geht, die oben genannten Probleme zu lösen.

Hier sind einige Vorteile der Groovy Console:

  • Verändert den Projektcode nicht;
  • Kurze und übersichtliche Skripte;
  • Vordefinierte Services/Methoden.

Erste Schritte

Die AEM Groovy Console wird gehostet auf 

https://github.com/Citytechinc/cq-groovy-console und ist für AEM/CQ5-Versionen ab CQ5.4 verfügbar. Sobald die Groovy Console auf einer lokalen AEM/CQ5-Instanz installiert ist, gehen Sie zu 

http://:/etc/groovyconsole.html

Die folgenden vordefinierten Variablen sind sofort für jedes Groovy-Skript verfügbar:

  • session – javax.jcr.Session
  • pageManager – com.day.cq.wcm.api.PageManager-resourceResolver-org.apache.sling.api.resource.ResourceResolver
  • slingRequest – org.apache.sling.api.SlingHttpServletRequest-queryBuilder-com.day.cq.search.QueryBuilder-bundleContext-org.osgi.framework.BundleContext-log-org.slf4j.Logger

Methoden (einige davon):

  • getPage(String path) – Ruft die Seite für den angegebenen Pfad ab, oder null, wenn sie nicht existiert.
  • getNode(String path) – Ruft den Knoten für den angegebenen Pfad ab. Wirft javax.jcr.RepositoryException, wenn er nicht existiert.
  • activate(String path) – Aktiviert den Knoten unter dem angegebenen Pfad.
  • deactivate(String path) – Deaktiviert den Knoten unter dem angegebenen Pfad.

Und Importe:

  • com.day.cq.search
  • com.day.cq.tagging
  • com.day.cq.wcm.api
  • com.day.cq.replication
  • javax.jcr
  • org.apache.sling.api
  • org.apache.sling.api.resource

Sie können auch den Verlauf und Skriptarchive nutzen. Diese Funktionen ermöglichen es Ihnen, diese Probleme auf einfache und elegante Weise zu lösen.

Beispiel

Nehmen wir an, wir müssen Seiten finden, die das Wort „baking“ im Titel enthalten, und es durch „banking“ ersetzen.

import com.day.cq.commons.jcr.JcrConstants
def search =  "Baking"
def replace = "Banking"
def path = "/content/geometrixx"
def property = JcrConstants.JCR_TITLE;
def query = createSQL2Query(path,  search , property)
def result = query.execute()
result.nodes.each{node -> 
    def title = node.get(property)Learn what AEM Dispatcher is and how it combines the capabilities of the Static Web Server and Content Management Server for better caching, load balancing, security, and request processing management.
    node.set(JcrConstants.JCR_TITLE, title.replaceAll(search ,replace))
    println node.path
}
save()  
def createSQL2Query(path, term, property) {
    def queryManager = session.workspace.queryManager
    def statement = "SELECT * FROM [cq:PageContent] AS s WHERE ISDESCENDANTNODE([${path}]) and s.[${property}] like '%${term}%'"
    def query = queryManager.createQuery(statement, "JCR-SQL2")
    query
}

Wie Sie sehen können, ist die Lösung mit der Groovy-Konsole unkompliziert und logisch.

    Lassen Sie uns über Ihr Projekt sprechen!
    / 2
    Alle mit einem Sternchen gekennzeichneten Felder sind Pflichtfelder
    Alle mit einem Sternchen gekennzeichneten Felder sind Pflichtfelder
    Alle mit einem Sternchen gekennzeichneten Felder sind Pflichtfelder
    Alle mit einem Sternchen gekennzeichneten Felder sind Pflichtfelder
    Setzen Sie ein Häkchen in das Kästchen
    Erfolg!
    Wir werden uns per E-Mail mit Ihnen in Verbindung setzen