Taken
Een van de taken waarmee AEM-ontwikkelaars te maken kunnen krijgen, is de verwerking van JCR-content. Soms moet u een enorme hoeveelheid gegevens bijwerken/wijzigen/bundelen/analyseren, en dit in een live omgeving doen maakt het twee keer zo moeilijk.
Hier zijn enkele typische gevallen:
- De contentstructuur wijzigen (bijvoorbeeld, nieuws/feb/evenement -> nieuws/2015-2016/feb/evenement);
- Content wijzigen/corrigeren (bijvoorbeeld, ‘colour’ wijzigen in ‘color’ op elke pagina);
- Content analyseren (op MSM gebruiken redacteuren assets van een andere website, alle verkeerde gebruiken moeten worden gevonden);
- Content voorbereiden en bundelen (bijv. tijdens migratie van CQ5.x naar AEM6.x moet u eerst de content analyseren en een geldig pakket voor de migratie aanmaken).
Oplossingen
Er zijn verschillende oplossingen en tijdelijke workarounds voor elk geval:
- Servlets/JSP/Scriptlets
- AEM Util-pakkettenOntdek hoe u batch contentverwerking in Adobe Experience Manager kunt vereenvoudigen met de Groovy Console, waardoor contentupdates, analyse en migratie een fluitje van een cent worden in een live omgeving.
- Externe tools
- Groovy Console
Laten we ons richten op de Groove Console. Het is een wondermiddel als het gaat om het oplossen van bovengenoemde problemen.
Hier zijn enkele voordelen van de Groovy Console:
- Verpest de projectcode niet;
- Korte en duidelijke scripts;
- Vooraf gedefinieerde services/methoden.
Aan de slag
De AEM Groovy Console wordt gehost op
https://github.com/Citytechinc/cq-groovy-console en is beschikbaar voor versies AEM/CQ5 vanaf CQ5.4. Zodra de Groovy Console is geïnstalleerd op een lokale AEM/CQ5-instantie, ga naar
http://:/etc/groovyconsole.html

De volgende vooraf gedefinieerde 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 de pagina op voor het opgegeven pad, of null als deze niet bestaat.
- getNode(String path) – Haalt de 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 geschiedenis- en scriptarchieven gebruiken. Deze functionaliteiten stellen u in staat om deze problemen op een gemakkelijke en elegante manier op te lossen.
Voorbeeld
Stel dat we pagina’s moeten vinden met het woord “baking” in de titel 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 ziet, is de Groovy console-oplossing eenvoudig en logisch.