#AEM

Traitement par lots du contenu dans AEM avec Groovy Console

Sommaire

Tâches

L’une des tâches que les développeurs AEM peuvent rencontrer est le traitement de contenu JCR. Parfois, vous devez mettre à jour/modifier/packager/analyser une quantité immense de données, et le faire dans un environnement de production rend la tâche deux fois plus difficile.

Voici quelques cas typiques :

  • Modification de la structure du contenu (par exemple, actualités/fév/événement -> actualités/2015-2016/fév/événement) ;
  • Modification/correction de contenu (par exemple, il faut changer ‘colour’ en ‘color’ sur chaque page) ;
  • Analyse de contenu (sur MSM, les éditeurs utilisent des assets d’un autre site web, il faut trouver toutes les utilisations incorrectes) ;
  • Préparation et empaquetage de contenu (par exemple, lors de la migration de CQ5.x vers AEM6.x, vous devez d’abord analyser le contenu et créer un package valide pour la migration).

Solutions

Il existe plusieurs solutions et contournements pour chaque cas :

  • Servlets/JSP/Scriptlets
  • Packages utilitaires AEM. Découvrez comment vous pouvez simplifier le traitement par lots de contenu dans Adobe Experience Manager à l’aide de la console Groovy, ce qui facilite les mises à jour de contenu, l’analyse et la migration dans un environnement de production.
  • Outils externes
  • Console Groovy

Concentrons-nous sur la console Groovy. C’est une solution miracle pour résoudre les problèmes mentionnés ci-dessus.

Voici quelques avantages de la console Groovy :

  • N’altère pas le code du projet ;
  • Scripts courts et clairs ;
  • Services/méthodes prédéfinis.

Démarrage

La console Groovy d’AEM est hébergée sur

https://github.com/Citytechinc/cq-groovy-console et est disponible pour les versions AEM/CQ5 à partir de CQ5.4. Une fois la console Groovy installée sur une instance AEM/CQ5 locale, rendez-vous sur

http://:/etc/groovyconsole.html

Les variables prédéfinies suivantes sont immédiatement disponibles pour tout script Groovy :

  • 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

méthodes (quelques-unes d’entre elles) :

  • getPage(String path) – Récupère la page pour le chemin donné, ou null si elle n’existe pas.
  • getNode(String path) – Récupère le nœud pour le chemin donné. Lance javax.jcr.RepositoryException s’il n’existe pas.
  • activate(String path) – Active le nœud au chemin donné.
  • deactivate(String path) – Désactive le nœud au chemin donné.

Et les 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

Vous pouvez également utiliser les archives d’historique et de scripts. Ces fonctionnalités vous permettent de résoudre ces problèmes de manière simple et élégante.

Exemple

Supposons que nous devions trouver des pages avec le mot « baking » dans le titre et le remplacer par « 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
}

Comme vous pouvez le voir, la solution de la console Groovy est simple et logique.

    Parlons de votre projet !
    / 2
    Tous les champs marqués d'un astérisque sont obligatoires
    Tous les champs marqués d'un astérisque sont obligatoires
    Tous les champs marqués d'un astérisque sont obligatoires
    Tous les champs marqués d'un astérisque sont obligatoires
    Cochez la case
    C'est réussi !
    Nous vous contacterons par e-mail