#AEM

Batchverwerking van content in AEM met de Groovy-console

Inhoud

Taken

Een van de taken die AEM-ontwikkelaars kunnen tegenkomen, is de verwerking van JCR-content. Soms moet u een enorme hoeveelheid gegevens bijwerken/wijzigen/bundelen/analyseren, en dit in een productieomgeving doen, maakt de taak twee keer zo moeilijk.

Hier zijn enkele typische gevallen:

  • Wijziging van de contentstructuur (bijvoorbeeld, nieuws/feb/evenement -> nieuws/2015-2016/feb/evenement);
  • Wijziging/correctie van content (bijvoorbeeld, de noodzaak om ‘colour’ te veranderen in ‘color’ op elke pagina);
  • Analyse van content (op MSM gebruiken editors assets van een andere website, alle incorrecte gebruiken moeten worden gevonden);
  • Voorbereiding en bundeling van content (bijvoorbeeld, bij de migratie van CQ5.x naar AEM6.x, moet u eerst de content analyseren en een geldig pakket voor de migratie creëren).

Oplossingen

Er zijn verschillende oplossingen en workarounds voor elk geval:

  • Servlets/JSP/Scriptlets
  • AEM utility packages Ontdek hoe u batchverwerking van content in Adobe Experience Manager kunt vereenvoudigen met behulp van de Groovy-console, waardoor contentupdates, -analyses en -migraties een fluitje van een cent worden in een productieomgeving.
  • Externe tools
  • Groovy Console

Laten we ons richten op de Groovy Console. Het is een wondermiddel als het gaat om het oplossen van problemen zoals hierboven genoemd.

Hier zijn enkele voordelen van de Groovy Console:

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

Aan de slag

De AEM Groovy Console is gehost op 

https:\/\/github.com\/Citytechinc\/cq-groovy-console\u00a0en is beschikbaar voor AEM\/CQ5-versies vanaf CQ5.4. Zodra de Groovy Console is geïnstalleerd op een lokale AEM\/CQ5-instantie, ga dan naar 

http:\/\/:\/etc\/groovyconsole.html

De volgende voorgedefinieerde variabelen zijn onmiddellijk 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 ervan):

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

En de 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 de scriptgeschiedenis en -archieven gebruiken. Deze functionaliteiten stellen u in staat om deze problemen op een eenvoudige en elegante manier op te lossen.

Voorbeeld

Stel dat we pagina’s moeten vinden die het woord ‘baking’ in de titel bevatten en dit moeten vervangen door ‘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 kunt zien, is de oplossing van 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