#AEM

Masowe przetwarzanie treści w AEM za pomocą konsoli Groovy

Spis treści

Zadania

Jednym z zadań, z jakimi mogą spotkać się deweloperzy AEM, jest przetwarzanie zawartości JCR. Czasami trzeba zaktualizować/zmodyfikować/spakować/przeanalizować ogromną ilość danych, a robienie tego w środowisku produkcyjnym sprawia, że jest to dwa razy trudniejsze.

Oto kilka typowych przypadków:

  • Zmiana struktury treści (na przykład: news/feb/event -> news/2015-2016/feb/event);
  • Modyfikowanie/naprawianie treści (na przykład: potrzeba zmiany „colour” na „color” na każdej stronie);
  • Analiza treści (w MSM edytorzy używają zasobów z innej witryny, trzeba znaleźć wszystkie błędne użycia);
  • Przygotowanie i pakowanie treści (np. podczas migracji z CQ5.x do AEM6.x należy najpierw przeanalizować zawartość i stworzyć prawidłowy pakiet do migracji).

Rozwiązania

Istnieje kilka rozwiązań i obejść dla każdego przypadku:

  • Serwlety/JSP/Skryplety
  • Pakiety narzędzi AEM. Dowiedz się, jak uprościć przetwarzanie wsadowe treści w Adobe Experience Manager za pomocą Groovy Console, dzięki czemu aktualizacje, analiza i migracja treści w środowisku produkcyjnym stają się dziecinnie proste.
  • Narzędzia zewnętrzne
  • Groovy Console

Skupmy się na Groovy Console. To niezawodne rozwiązanie, jeśli chodzi o rozwiązywanie problemów takich jak te wymienione powyżej.

Oto kilka zalet Groovy Console:

  • Nie zaśmieca kodu projektu;
  • Krótkie i przejrzyste skrypty;
  • Predefiniowane usługi/metody.

Rozpoczęcie pracy

AEM Groovy Console jest hostowana na

https://github.com/Citytechinc/cq-groovy-console i jest dostępna dla wersji AEM/CQ5 począwszy od CQ5.4. Po zainstalowaniu Groovy Console na lokalnej instancji AEM/CQ5, przejdź do

http://:/etc/groovyconsole.html

Następujące predefiniowane zmienne są natychmiast dostępne dla każdego skryptu 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

metody (niektóre z nich):

  • getPage(String path) – Pobiera stronę dla danej ścieżki lub null, jeśli nie istnieje.
  • getNode(String path) – Pobiera węzeł dla danej ścieżki. Wyrzuca javax.jcr.RepositoryException, jeśli nie istnieje.
  • activate(String path) – Aktywuje węzeł pod daną ścieżką.
  • deactivate(String path) – Dezaktywuje węzeł pod daną ścieżką.

Oraz importy:

  • 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

Możesz również korzystać z historii i archiwów skryptów. Te funkcje pozwalają rozwiązać te problemy w łatwy i elegancki sposób.

Przykład

Załóżmy, że musimy znaleźć strony zawierające słowo „baking” w tytule i zamienić je na „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
}

Jak widać, rozwiązanie z konsolą Groovy jest proste i logiczne.

    Porozmawiajmy o Twoim projekcie!
    / 2
    Wszystkie pola oznaczone gwiazdką są obowiązkowe
    Wszystkie pola oznaczone gwiazdką są obowiązkowe
    All fields marked with an asterisk are required
    All fields marked with an asterisk are required
    Check the box
    Success!
    We will contact you by email