Explore product-specific spaces to ask questions, share insights, and learn best practices.
Recently active
AEM 6.5.10.0 - Select Experience Fragments in RTE (Rich Text Editor) Link Plugin by Sreekanth Choudry Nalabotu Abstract In the Path Field picker of RTE Link Plugin, Experience Fragments are NOT shown by default. This extension is to adjust /libs/cq/gui/content/linkpathfield/picker/views/column/datasource configuration synthetically during runtime and set exclude attribute to none so XFs can be selected and linked... Create a filter apps.experienceaem.sites.core.filters.LinkPathFieldFilter to adjust the exclude configuration during request... package apps.experienceaem.sites.core.filters; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.resource.Resource; import org.osgi.framework.Constants; import org.osgi.service.component.annotations.Component; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.jcr.Node; import javax.servlet.*; import java.io.IOException; import java.util.Map; @Component( service = Filter.class, immediate = tru
AEM Proxy Component Pattern and Component Versioning by Suryakand Abstract Most organization want to keep content and user experience flexible so that they can innovate and deliver new experiences/features faster. Flexibility allows organizations to reuse what has been built already and keep adding new features and functionalities on top of it. One of the key characteristics of flexibility is backward compatibility and non-breaking changes. This flexibility comes with a clear definition of a strategy for content creation and user experience. In this article we are going to look at 2 very simple but powerful component development strategies that organization (specifically technical teams) can adopt to win the flexibility game and stay ahead in competition of delivering rich user experience. Let’s start with a scenario/problem statement. Assume that a large banking organization has business in multiple countries. The organization is using AEM and MSM (Multi Site Manager) to manage
What is Adobe Experience Manager as a Cloud Service? by Initialyze Abstract Adobe Experience Manager is now accessible as a cloud-based service as well. It’s the latest version of Adobe’s experience management platform that has been built and developed for cloud use. AEM as a Cloud Service is Adobe’s next-generation platform for creating and serving experiences. AEM as a Cloud Service provides the most up-to-date features from Adobe to marketers who use the platform. AEM as a Cloud Service is a next-generation software-as-a-service that is built to take advantage of cloud computing to develop and host AEM solutions. It has excellent CMS and digital asset management (DAM) features for brand communication and marketing teams. How will your business benefit from Adobe Experience Manager as a Cloud Service? With the release of AEM as a Cloud Service, businesses now can build and deploy more campaigns, digital assets, and experiences than ever before. The Cloud Service is designed to hel
Enabling the Front-End Pipeline by Adobe Docs Abstract Learn how you can enable the front-end pipeline for existing sites to leverage site themes to more quickly customize your site. Overview The front-end pipeline is a mechanism that can quickly deploy just the front-end code of your websites based on site themes and site templates. Instead of deploying the full-stack, only front-end code is handled by this pipeline making the process faster and also allows front-end developers to easily and quickly customize your site without knowledge of AEM. Sites based on site templates can leverage the front-end pipeline by default. This document describes how you can adapt your existing sites to take advantage of the front-end pipeline. TIP If you are not familiar with the front-end pipeline and how to quickly deploy sites using it and site templates, please review the Quick Site Creation journey for an introduction. If you have not created your existing site based on site templates and th
Extending Adobe Experience Manager as a Cloud Service using Adobe Developer App Builder by Adobe Docs Abstract What is App Builder for AEM as a Cloud Service The new Adobe Developer App Builder provides an extensibility framework for a developer to easily extend AEM as a Cloud Service functionalities. App Builder provides a unified third-party extensibility framework for integrating and creating custom experiences that extend Adobe Experience Manager. With this complete extensibility framework, built on Adobe’s infrastructure, developers can build custom microservices, extend, and integrate Adobe Experience Manager across Adobe solutions and the rest of the IT stack. App Builder provides a way for customers to easily extend Adobe Experience Manager in various use cases: Middleware Extensibility - Connect external systems with Adobe applications building custom connectors or leverage a suite of pre-built integrations. Core Services Extensibility - Extend core application capabilitie
trying to check if user/initiator who run a request for activation workflow, had enough permission to activate the page. depending on the user access, I am trying to update the workflow model under OR split. used below code to get the user privileges Session session = resourceResolver.adaptTo(Session.class);AccessControlManager acm = session.getAccessControlManager();Privilege p[] = UIHelper.getAllPermission(acm, resource); Issue is session.getUserID() return the workflow user, Need a way to get the session adaptTo initiator userID(). Please let me know, if any suggestions to achieve it or suggest if any alternate approach to check user has permission to replicate the page.Thanks!
Hi Community, I'm currently creating a Unit Test that uses the Object Content Element, coming from the content fragment.getElements(). I'm currently using Junit5 to create my Unit Tests and the io.wcm.testing framework. I was checking the mocked class for the ContentElement that is inside that package, and I found that this method getValue() is always throwing this exception:class MockContentFragment_ContentElement_Structured extends MockContentFragment_Versionable implements ContentElement { public FragmentData getValue() { throw new UnsupportedOperationException(); }}So, when I try to do the following behaviour, I always get this exception: while(contentElement.hasNext()) { ContentElement contentElementObject = contentElement.next(); FragmentData value = contentElementObject.getValue(); <---- Exception (So test failed) String fieldName = contentElementObject.getName(); String fieldValue = getValueFromBranch(fullBranch, f
Create AEM Content Package using cURL by Rashid jorvee Abstract Use case Create an AEM content package using cURL cURL to create a package Below is the syntax and a sample command to create an AEM content package using cURL. curl -u : -X POST http://localhost:4502/crx/packmgr/service/.json/etc/packages/mycontent.zip?cmd=create -d packageName= -d groupName= e.g. curl -u admin:admin -X POST http://localhost:4502/crx/packmgr/service/.json/etc/packages/mycontent.zip?cmd=create -d packageName=sample-test-package -d groupName=my_packages After the successful execution of cURL, you will see a successful message. {"success":true,"msg":"Package created","path":"/etc/packages/my_packages/sample-test-package.zip"} Read Full Blog Create AEM Content Package using cURL Q&A Please use this thread to ask the related questions.
Hi, I created a AEM React SPA using the latest archetype.Now, I am trying to replace Javascript with Typescript.Could you please let me know if it is compatible with AEM.please share me any steps available to do the same?Also, share is it possible to provide typescript as an input while creating AEM React SPA using Archetype mvn command?Thanks,Priyanka
Are there any jmx statistics exposes for the the number HTTP requests made, as well as potentially broken out by status code response? Looking at /system/console/jmx - I didn't see anything out of the box that seemed to handle this.
I'm using AEM 6.5.8and what I want is to do something like below<select jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/form/select" fieldLabel="select" name="./select"> <items jcr:primaryType="nt:unstructured"> <option1 jcr:primaryType="nt:unstructured" selected="{Boolean}true" text="option1" value="option1"/> <option2 jcr:primaryType="nt:unstructured" text="option2" value="option2"/> </items> <datasource jcr:primaryType="nt:unstructured" sling:resourceType="/test/run/url"/></link>
Hi, I built a page and an experience fragment and placed the fragment on the page. Now the page is redirecting to the actual experience fragment and I can't edit the page at all.When I press edit it looks to be loading /content/company/au/en/section/section/page.html and then redirects to /content/experience-fragments/company/au/en/section/section/details/master.html I have deleted the experience fragment, but the page it still redirecting to it. Is there a way to stop this happening? I had extensive work on this page so am keen to retrieve. Thanks
Hi Everyone, We have updated the access level of the options which control Audit. Earlier options for enabling/disabling Audit trail were not accessible to functional administrators. With this change, access level of audit is modified to provide control to functional administrators. Read here for more details: Enable/Disable Audit Trail Please feel free to reach out through the below comment section in case you have any questions.
By default, AEM queryBuilder, which is how servlets can lookup content, responds with the data encoded in iso-8859 char set instead of the required UTF-8. The solution, which seems improbable, but works, is to create /osgiconfig/config/org.apache.sling.engine.impl.SlingMainServlet.cfg.json file with the following content: { "sling.additional.response.headers":[ "X-Content-Type-Options=nosniff", "Content-Type=text/html;charset=utf-8", "X-Frame-Options=SAMEORIGIN" ] } This fixes the queryBuilder returning data with the wrong charset in the servlet, but has the side effect of making the response header always "text/html". We want our servlets, which are used by the front end to search for and pull page pages as json, to have a content-type of application/json. however, if we change the above file, it will then break AEM.We tried overriding the content type in the servlet itself, but this gets ignored (or overwritten).Any ideas how to su
Website Structure in AEM — Multi-Site Manager(MSM) by Albinsblog Abstract In this post let us explore how to use MSM concepts to structure websites in AEM. The site structure is driven by multiple factors, set up a site structure that meets your goals Multiregional, multilingual needs Content re-use/Duplicate Content/Content Velocity Content distribution Translations(automation third-party translation connectors ) Access Control/Governance(Who manages the global/local websites and content) Create a consistent fluid look among sites Multiple site structures can be enabled based on the above factors, some of the important structures are IThe AEM MSM(Multiple Site Manager) can be used to enable the required site structure and enable the content reuse. Let us see some of the important concepts on MSM. MSM(Multi-Site Manager) — MSM enables you to use the same site content in multiple locations. MSM enables a set of tools to manage sites that share the same content. MSM defines the rela
AEM 6.5.10 - Start Workflow on Site Pages in Omni Search Results by Sreekanth Choudry Nalabotu Abstract 1) Create a clientlib /apps/eaem-omni-search-create-workflow with categories=cq.gui.common.admin.searchpanel and below code to add the workflow button in search action bar... (function ($, $document) { const FOUNDATION_CONTENT_LOADED = "foundation-contentloaded", GRANITE_OMNI_SEARCH_CONTENT = ".granite-omnisearch-content", SITES_EDIT_ACTIVATOR = "cq-siteadmin-admin-actions-edit-activator", START_WF_URL = "/mnt/override/libs/wcm/core/content/common/startbulkworkflows.html", CREATE_WF_BUT_URL = "/apps/eaem-omni-search-create-workflow/create-wf-but.html"; let init = false; $document.on(FOUNDATION_CONTENT_LOADED, GRANITE_OMNI_SEARCH_CONTENT, function(event){ $.ajax(CREATE_WF_BUT_URL).done(function(html){ init = addCreateButton(html); }); }); function addCreateButton(html){ html = html || ""; if(!html.trim()){ return; } const $eActivator = $("." + SITES_EDIT_ACTIVATOR); if ($eActi
Set up Local Instance of SonarQube using Docker Image | AEM by Bimmi Soi Abstract You can evaluate SonarQube using a traditional installation with the zip file or you can spin up a Docker container using one of the Docker images. Steps to install Docker : Set Up Docker Steps to setup Local Instance of SonarQube using Docker Image: Start your server by running below command. docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:latest Once your instance is up go to http://localhost:9000/ using below credentials Login: admin Password: admin Under How do you want to create your Project ? Click on Manually. Under Create a project, enter Project display name and Project key and then click on Set up. Note: Project display name and Project key can be any name of your choice. Under How do you want to analyze your Repository ? Click on Locally. Under Provide a token, select Generate a token. Give your token a name, click the Generate button. Y
AEM Unit Testing With Groovy & Spock by Juan Ayala Abstract In my last post, I explored three different ways to use Groovy in our AEM projects. Using Groovy to build OSGi components, servlets and models seemed the most promising. Now I bring you a fourth one that I find as promising. Unit testing with Groovy & Spock. There are a lot of topics here. TDD vs. BDD. JUnit vs. Spock. Groovy vs. Java. My goal here is not to give you a complete analysis. That's up to you based on your team composition and client. I am going to give you some context. Then I will show you is how to set it up in an AEM project and show you a few examples. TDD vs. BDD You can spend some time researching Test Driven Development and Behavior Driven Development. To put it simply TDD is for a small technical audience, such as developers. To test small pieces of code. In AEM this could be a Java Sling model or OSGi service. BDD is for a wider audience outside of the development team. Developers, QA test
If you are working with Adobe Audience Manager, you have come across this challenge: you want to target your visitors instantly, as soon as they visit your website/app. This is achievable when you make users qualify based upon their real time activity on the site/app. But, if you have offline data available to be onboarded, then AAM system takes some time to process data (onboarded traits method). The way AAM processes on-boarded data is as follows:You upload your CRM data to AAM, either to an SFTP location or an S3 bucket.Every 12h, AAM reads all on-boarded data and processes it, converting the signals into traits.The traits are stored in the core servers.A visitor logs in for the first time.Since the communication between the browser and AAM is done through the edge servers, these servers have at this moment in time no on-boarded information for that visitor.The edge servers where this visitor activity has happened, request the on-boarded traits to the core servers.In a batch process
Slicing, dicing, and filtering your data has never been easier. There are multiple ways to target and drill down to your desired data in Analysis Workspace. Filters and quick segments in Workspace panels easily limit data in all reports and visualizations while dimension breakdowns add details to specific reports. Add as many filters, segments, and breakdowns as you want and mix and match to get the results you need. Everything is drag and drop which adds to the ease of use. Used to segmentation dropdown in other Analytics platforms? Try out dropdown filters and quick segments. Dropdown filters are a powerful and flexible tool to segment and filter and can be used in conjunction with quick segments to build reports with focused data. Add dropdown filters for device type, marketing channels, audien
Join us for the next Adobe Target Community Q&A Coffee Break taking place Wednesday, February 23rd, 2022 @ 8am PT - 9am PT ~ Be sure to REGISTER HERE to receive email reminders and a calendar hold ~ We'll be joined by Vishal Chordia aka @vishalchordia, Senior Product Manager, who will be signed in here to the Adobe Target Community to chat directly with you on this thread about your Adobe Target questions pertaining to his areas of expertise: Adobe Experience Platform Audience-based Personalization Real-time Customer Data Platform (RTCDP) integration with Target General Adobe Target topics Shelby Goff aka @shelbygoff, Senior Technical Support Engineer, will also be in the thread to provide further guidance around the above topics with Vishal! REQUIREMENTS TO PARTICIPATE Must be signed in to the Community during the 1-hour period Must post a Question about Adobe Target THAT'S IT! *(think of th
Already have an account? Login
No account yet? Create an account
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.