Taken
Een van de taken waarmee AEM-ontwikkelaars te maken kunnen krijgen, is het verwerken van JCR-content. Soms moet u een enorme hoeveelheid gegevens bijwerken/wijzigen/verpakken/analyseren, en dit in een live-omgeving doen, maakt het twee keer zo moeilijk.
Hier zijn enkele typische gevallen:
- De contentstructuur wijzigen (bijvoorbeeld: news/feb/event -> news/2015-2016/feb/event);
- Content wijzigen/corrigeren (bijvoorbeeld: ‘colour’ op elke pagina wijzigen in ‘color’);
- Content analyseren (in MSM gebruiken redacteuren assets van een andere website, alle verkeerde gebruiken moeten worden gevonden);
- Content voorbereiden en verpakken (bijv. tijdens de migratie van CQ5.x naar AEM6.x moet u eerst content analyseren en een geldig pakket voor de migratie maken).
Oplossingen
Voor elk geval zijn er verschillende oplossingen en workarounds:
- Servlets/JSP/Scriptlets
- AEM Utility-pakkettenOntdek hoe u het batchverwerken van content in Adobe Experience Manager kunt vereenvoudigen met de Groovy Console, om contentupdates, analyses en migraties in een live-omgeving moeiteloos te maken.
- Externe tools
- Groovy Console
Laten we ons richten op de Groovy Console. Het is een wondermiddel als het gaat om het oplossen van de bovengenoemde problemen.
Hier zijn enkele voordelen van de 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. Zodra de Groovy Console op een lokale AEM/CQ5-instantie is 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 (een aantal daarvan):
- 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 javax.jcr.RepositoryException als het niet bestaat.
- activate(String path) – Activeert het knooppunt onder het opgegeven pad.
- deactivate(String path) – Deactiveert het knooppunt onder 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 deze problemen op een eenvoudige en elegante manier op te lossen.
Voorbeeld
Laten we aannemen dat we pagina’s moeten vinden die het woord ‘baking’ in de titel bevatten, en het 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 oplossing van de Groovy-console ongecompliceerd en logisch.