{"id":23399,"date":"2016-07-29T19:19:00","date_gmt":"2016-07-29T19:19:00","guid":{"rendered":"https:\/\/site.axamit.com\/?p=370"},"modified":"2026-06-23T07:06:00","modified_gmt":"2026-06-23T07:06:00","slug":"stapelverarbeitung-von-inhalten-in-aem-mit-groovy-console","status":"publish","type":"post","link":"https:\/\/axamit.com\/de\/blog\/adobe-experience-manager\/stapelverarbeitung-von-inhalten-in-aem-mit-groovy-console\/","title":{"rendered":"Stapelverarbeitung von Inhalten in AEM mit Groovy Console"},"content":{"rendered":"<div class=\"custom-toc\"><ul><\/ul><\/div>\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading\">Aufgaben<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Eine der Aufgaben, denen AEM-Entwickler begegnen k\u00f6nnen, ist die Verarbeitung von JCR-Inhalten. Manchmal m\u00fcssen Sie eine enorme Menge an Daten aktualisieren\/\u00e4ndern\/paketieren\/analysieren, und dies in einer Live-Umgebung zu tun, macht es doppelt so schwierig.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hier sind einige typische F\u00e4lle:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00c4nderung der Inhaltsstruktur (zum Beispiel: news\/feb\/event -&gt; news\/2015-2016\/feb\/event);<\/li>\n\n\n\n<li>Inhalte \u00e4ndern\/korrigieren (zum Beispiel: die Schreibweise von \u2018colour\u2019 zu \u2018color\u2019 auf jeder Seite \u00e4ndern);<\/li>\n\n\n\n<li>Inhalte analysieren (im MSM verwenden Redakteure Assets von einer anderen Website; es m\u00fcssen alle falschen Verwendungen gefunden werden);<\/li>\n\n\n\n<li>Inhalte vorbereiten und paketieren (z.B. w\u00e4hrend der Migration von CQ5.x zu AEM6.x m\u00fcssen Sie zuerst den Inhalt analysieren und ein g\u00fcltiges Paket f\u00fcr die Migration erstellen).<\/li>\n<\/ul>\n<\/div>\n<\/div>\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading\">L\u00f6sungen<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr jeden Fall gibt es mehrere L\u00f6sungen und Workarounds:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Servlets\/JSP\/Scriptlets<\/li>\n\n\n\n<li>AEM Util PackagesEntdecken Sie, wie Sie die Stapelverarbeitung von Inhalten in Adobe Experience Manager mithilfe der Groovy Console vereinfachen k\u00f6nnen, um Inhaltsaktualisierungen, Analysen und Migrationen in einer Live-Umgebung m\u00fchelos zu gestalten.<\/li>\n\n\n\n<li>Externe Tools<\/li>\n\n\n\n<li>Groovy Console<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Konzentrieren wir uns auf die Groovy Console. Sie ist eine Wunderwaffe, wenn es darum geht, die oben genannten Probleme zu l\u00f6sen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hier sind einige Vorteile der Groovy Console:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ver\u00e4ndert den Projektcode nicht;<\/li>\n\n\n\n<li>Kurze und \u00fcbersichtliche Skripte;<\/li>\n\n\n\n<li>Vordefinierte Services\/Methoden.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading\">Erste Schritte<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Die AEM Groovy Console wird gehostet auf\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Citytechinc\/cq-groovy-console\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/Citytechinc\/cq-groovy-console<\/a>\u00a0und ist f\u00fcr AEM\/CQ5-Versionen ab CQ5.4 verf\u00fcgbar. Sobald die Groovy Console auf einer lokalen AEM\/CQ5-Instanz installiert ist, gehen Sie zu\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"http:\/\/\/etc\/groovyconsole.html\">http:\/\/:\/etc\/groovyconsole.html<\/a><\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6ac55586c7650&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6ac55586c7650\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1193\" height=\"843\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"http:\/\/axamit.com\/wp-content\/uploads\/2016\/07\/groovyconsole_2.webp\" alt=\"\" class=\"wp-image-6639\" srcset=\"https:\/\/axamit.com\/wp-content\/uploads\/2016\/07\/groovyconsole_2.webp 1193w, https:\/\/axamit.com\/wp-content\/uploads\/2016\/07\/groovyconsole_2-300x212.webp 300w, https:\/\/axamit.com\/wp-content\/uploads\/2016\/07\/groovyconsole_2-1024x724.webp 1024w, https:\/\/axamit.com\/wp-content\/uploads\/2016\/07\/groovyconsole_2-768x543.webp 768w\" sizes=\"auto, (max-width: 1193px) 100vw, 1193px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Die folgenden vordefinierten Variablen sind sofort f\u00fcr jedes Groovy-Skript verf\u00fcgbar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>session &#8211; javax.jcr.Session<\/li>\n\n\n\n<li>pageManager &#8211; com.day.cq.wcm.api.PageManager-resourceResolver-org.apache.sling.api.resource.ResourceResolver<\/li>\n\n\n\n<li>slingRequest &#8211; org.apache.sling.api.SlingHttpServletRequest-queryBuilder-com.day.cq.search.QueryBuilder-bundleContext-org.osgi.framework.BundleContext-log-org.slf4j.Logger<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Methoden (einige davon):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>getPage(String path) &#8211; Ruft die Seite f\u00fcr den angegebenen Pfad ab, oder null, wenn sie nicht existiert.<\/li>\n\n\n\n<li>getNode(String path) &#8211; Ruft den Knoten f\u00fcr den angegebenen Pfad ab. Wirft javax.jcr.RepositoryException, wenn er nicht existiert.<\/li>\n\n\n\n<li>activate(String path) &#8211; Aktiviert den Knoten unter dem angegebenen Pfad.<\/li>\n\n\n\n<li>deactivate(String path) &#8211; Deaktiviert den Knoten unter dem angegebenen Pfad.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Und Importe:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>com.day.cq.search<\/li>\n\n\n\n<li>com.day.cq.tagging<\/li>\n\n\n\n<li>com.day.cq.wcm.api<\/li>\n\n\n\n<li>com.day.cq.replication<\/li>\n\n\n\n<li>javax.jcr<\/li>\n\n\n\n<li>org.apache.sling.api<\/li>\n\n\n\n<li>org.apache.sling.api.resource<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Sie k\u00f6nnen auch den Verlauf und Skriptarchive nutzen. Diese Funktionen erm\u00f6glichen es Ihnen, diese Probleme auf einfache und elegante Weise zu l\u00f6sen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Beispiel<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nehmen wir an, wir m\u00fcssen Seiten finden, die das Wort \u201ebaking\u201c im Titel enthalten, und es durch \u201ebanking\u201c ersetzen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import com.day.cq.commons.jcr.JcrConstants\ndef search =  \"Baking\"\ndef replace = \"Banking\"\ndef path = \"\/content\/geometrixx\"\ndef property = JcrConstants.JCR_TITLE;\ndef query = createSQL2Query(path,  search , property)\ndef result = query.execute()\nresult.nodes.each{node -&gt; \n    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.\n    node.set(JcrConstants.JCR_TITLE, title.replaceAll(search ,replace))\n    println node.path\n}\nsave()  \ndef createSQL2Query(path, term, property) {\n    def queryManager = session.workspace.queryManager\n    def statement = \"SELECT * FROM &#91;cq:PageContent] AS s WHERE ISDESCENDANTNODE(&#91;${path}]) and s.&#91;${property}] like '%${term}%'\"\n    def query = queryManager.createQuery(statement, \"JCR-SQL2\")\n    query\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Wie Sie sehen k\u00f6nnen, ist die L\u00f6sung mit der Groovy-Konsole unkompliziert und logisch.<\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Aufgaben Eine der Aufgaben, denen AEM-Entwickler begegnen k\u00f6nnen, ist die Verarbeitung von JCR-Inhalten. Manchmal m\u00fcssen Sie eine enorme [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":5015,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[156],"tags":[],"class_list":["post-23399","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-adobe-experience-manager"],"acf":{"cta":"Give Us a Call","phone":"+1 (438) 383-6878","meta-description":"Entdecken Sie, wie Sie die Stapelverarbeitung von Inhalten in Adobe Experience Manager mit der Groovy Console vereinfachen k\u00f6nnen, um Inhaltsaktualisierungen, -analysen und -migrationen in einer Live-Umgebung m\u00fchelos zu gestalten."},"_links":{"self":[{"href":"https:\/\/axamit.com\/de\/wp-json\/wp\/v2\/posts\/23399","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/axamit.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/axamit.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/axamit.com\/de\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/axamit.com\/de\/wp-json\/wp\/v2\/comments?post=23399"}],"version-history":[{"count":1,"href":"https:\/\/axamit.com\/de\/wp-json\/wp\/v2\/posts\/23399\/revisions"}],"predecessor-version":[{"id":23400,"href":"https:\/\/axamit.com\/de\/wp-json\/wp\/v2\/posts\/23399\/revisions\/23400"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/axamit.com\/de\/wp-json\/wp\/v2\/media\/5015"}],"wp:attachment":[{"href":"https:\/\/axamit.com\/de\/wp-json\/wp\/v2\/media?parent=23399"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/axamit.com\/de\/wp-json\/wp\/v2\/categories?post=23399"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/axamit.com\/de\/wp-json\/wp\/v2\/tags?post=23399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}