#AEM

Bulkverwerking van content in AEM met behulp van Groovy Console

Inhoud

Taken

Een van de taken waar AEM-ontwikkelaars mee te maken kunnen krijgen, is de verwerking van JCR-content. Soms is het nodig om een enorme hoeveelheid gegevens bij te werken/wijzigen/bundelen/analyseren, en dit in een productieomgeving doen maakt het twee keer zo moeilijk.

Hier zijn enkele veelvoorkomende gevallen:

  • Wijziging van de contentstructuur (bijvoorbeeld, nieuws/februari/evenement -> nieuws/2015-2016/februari/evenement);
  • Aanpassing/reparatie van content (bijvoorbeeld de noodzaak om ‘colour’ te wijzigen in ‘color’ op elke pagina);
  • Contentanalyse (in MSM gebruiken editors assets van een andere site, alle onjuiste gebruiken moeten worden gevonden);
  • Contentvoorbereiding en -verpakking (bijv. tijdens een migratie van CQ5.x naar AEM6.x, moet de content eerst worden geanalyseerd en een correct migratiepakket worden gemaakt).

Oplossingen

Voor elk geval zijn er verschillende oplossingen en workarounds:

  • Servlets/JSP/Scriptlets
  • AEM-hulpprogrammapakketten. Ontdek hoe u de batchverwerking van content in Adobe Experience Manager kunt vereenvoudigen met Groovy Console, waardoor contentupdates, analyse en migratie eenvoudig worden in een productieomgeving.
  • Externe tools
  • Groovy Console

Laten we ons richten op Groovy Console. Dit is de ‘silver bullet’ (wonderoplossing) als het gaat om het oplossen van problemen zoals hierboven genoemd.

Hier zijn enkele voordelen van Groovy Console:

  • Vervuilt de projectcode niet;
  • Korte en duidelijke scripts;
  • Voorgedefinieerde services/methoden.

Aan de slag

De AEM Groovy Console wordt gehost op

https://github.com/Citytechinc/cq-groovy-console en is beschikbaar voor AEM/CQ5-versies vanaf CQ5.4. Nadat u Groovy Console op uw lokale AEM/CQ5-instantie hebt geïnstalleerd, gaat u naar

http://:/etc/groovyconsole.html

De volgende voorgedefinieerde variabelen zijn direct beschikbaar voor elk Groovy-script:

  • 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 (enkele daarvan):

  • getPage(String path) – Haalt een pagina op voor het opgegeven pad of null als deze niet bestaat.
  • getNode(String path) – Haalt een node op voor het opgegeven pad. Werpt javax.jcr.RepositoryException als deze niet bestaat.
  • activate(String path) – Activeert de node op het opgegeven pad.
  • deactivate(String path) – Deactiveert de node op het opgegeven pad.

En imports:

  • 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

U kunt ook gebruikmaken van de geschiedenis en archieven van scripts. Deze functies stellen u in staat om deze problemen op een gemakkelijke en elegante manier op te lossen.

Voorbeeld

Laten we zeggen dat we pagina’s moeten vinden met het woord „baking” in de titel en dit moeten vervangen door het woord „banking”.

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
}

Zoals u ziet, is de oplossing met de Groovy console eenvoudig en logisch.

    Laten we je project eens bespreken!
    / 2
    Alle velden die met een sterretje zijn gemarkeerd, zijn verplicht
    Alle velden die met een sterretje zijn gemarkeerd, zijn verplicht
    Alle velden die met een sterretje zijn gemarkeerd, zijn verplicht
    Alle velden die met een sterretje zijn gemarkeerd, zijn verplicht
    Vink het vakje aan
    Geslaagd!
    We will contact you by email