Menu

Showing posts with label AEM. Show all posts
Showing posts with label AEM. Show all posts

Bulk Import tool - AEM

The Bulk Import tool in Adobe Experience Manager (AEM) as a Cloud Service to import assets in bulk from cloud storage providers like Azure Blob Storage and Amazon S3. The tool allows administrators to efficiently migrate large volumes of assets without custom coding. Key features include:

  • Configuration: Save import configurations for single or repeated use.
  • Filtering: Optionally filter assets by file size or MIME type.
  • Import Modes: Define how to handle existing assets during import.
  • Scheduling: Schedule imports for single or periodic execution.
  • Job Status: Monitor the status and details of import jobs.

This tool is particularly useful for large-scale migrations and occasional bulk asset ingestions.

How to add custom clientLibs on component dialog in AEM

Adding custom clientLibs on component dialog in AEM.

  1. Add a categories property in clientLibs node. e.g. categories=wknd.hero
    AEM Dialog ClientLibs | AEM ClientLibs

  2. Add property extraClientlibs = wknd.hero on dialog node.
    AEM Dialog ClientLibs | AEM ClientLibs


  3. You have done with the adding the custom clientlibs to a component dialog in AEM.

Check render condition is not valid

*ERROR* [[0:0:0:0:0:0:0:1] [1692119460991] GET /editor.html/content/venia/us/fr.html HTTP/1.1] com.adobe.cq.msm.ui.servlet.IsSourceRenderCondition path /content/venia/us/fr.html to check render condition is not valid 

Run local AEM on https

Installing a SSL certificate to local AEM instance.

https://experienceleague.adobe.com/docs/experience-manager-learn/foundation/security/use-the-ssl-wizard.html#

How to create an experience fragment in AEM?

Below are the steps to create an Experience Fragment (XF) in AEM:
  1. Open AEM and navigate to the Assets console.
  2. Click on the Experience Fragments folder on the left side of the console.
  3. Click on the "Create" button at the top of the console and select "Experience Fragment" from the dropdown menu.
  4. Fill in the required fields in the "Create Experience Fragment" dialog box, including the XF's name, title, and description. You can also select a thumbnail image to represent the XF.
  5. Click on the "Create" button to create the XF.
  6. Once the XF has been created, you can begin authoring it by clicking on the "Open" button next to its name in the Assets console.
  7. The authoring mode for an XF is similar to the standard AEM authoring environment. You can add components and content to the XF, as well as define variations that can be used to tailor the XF for different audiences or use cases.
  8. Once you have finished authoring the XF, you can publish it to make it available for use in your AEM sites. To publish the XF, select it in the Assets console and click on the "Publish" button at the top of the console. You can choose to publish the XF as a draft or a final version, and select the channels or audiences that should have access to it.
  9. After the XF has been published, you can use it in your AEM sites by adding it as a component to a page or template. When the page or template is rendered, the XF will be displayed with its defined content and variations.

How to map AEM component with SPA React/Angular component

MapTo function is provided by the AEM SPA Editor JS SDK (@adobe/aem-react-editable-components). The AEM component path /apps/jorvee/components/text represents the sling:resourceType of the AEM component. This path gets matched with the :type exposed by the JSON model observed earlier. MapTo takes care of parsing the JSON model response and passing the correct values as props to the SPA component.

MapTo('jorvee/components/text')(Text, TextEditConfig);

Above MapTo function will map your AEM Text component with SPA Text component. The complete line will be like this with export keyword.

export default MapTo('wknd-spa-react/components/text')(Text, TextEditConfig);


Reference

https://experienceleague.adobe.com/docs/experience-manager-learn/getting-started-with-aem-headless/spa-editor/react/map-components.html?lang=en 

AEM with React component MapTo function
Map AEM with React component


Bundle is NOT whitelisted in AEM

While using the loginAdministrative() method of SlingRepository class you might see an error "Bundle is not whitelisted". To get this method work we have to whitelist the bundle in OSGi configuration "Apache Sling Login Admin Whitelist" this helps us to defines which bundles can use SlingRepository.loginAdministrative().

Below is the code snippet of creating session using loginAdministartive method.

@Reference
private SlingRepository repository

Session session = repository.loginAdministrative(null);




Java SDK 11 required to run AEM as Cloud Service

 We need Java 11 SDK to work on AEM as CS. If you try to run on a lower version of Java SDK then it will throw an error. below is the error which you will get when you try to run the AEM as a cloud service jar using Java 1.8

E:\aem-sdk>java -jar aem-sdk-quickstart-author-p4502.jar
Loading quickstart properties: default
Loading quickstart properties: instance
java.lang.Exception: Quickstart requires a Java Specification 11 VM, but your VM (Java HotSpot(TM) 64-Bit Server VM / Oracle Corporation) reports java.specification.version=1.8
at com.adobe.granite.quickstart.base.impl.Main.checkEnvironment(Main.java:1046)
at com.adobe.granite.quickstart.base.impl.Main.<init>(Main.java:646)
at com.adobe.granite.quickstart.base.impl.Main.main(Main.java:981)
Quickstart: aborting



Cloud Manager timeout

While using the cloud manager to build and deploy the code on Adobe Experience Manager (AEM), the default waiting time at a step is 7 days. If we left the pipeline waiting at any step for more than 7 days then the pipeline automatically gets failed.


Cloud Manager Pipeline
Cloud Manager Pipeline. Image Source Adobe Experience League


Reference 

Difference between the Process Thumbnails and Create Thumbnail workflow steps in AEM

Create thumbnail and process thumbnail workflow steps in AEM
Workflow steps
 
The Create Thumbnail step only creates thumbnail renditions for an asset, while the Process Thumbnails step can also create a folder thumbnail and web-enabled renditions also. 

How to check registered sling models classes in AEM?

Sling Models are annotation driven Java "POJO's" (Plain Old Java Objects) that facilitate the mapping of data from the JCR to Java variables and provide a number of other refinements when developing in the context of AEM (Adobe Experience Manager).

Sling Models Bound to Resource Types and can be explored and view in Felix console using the below path. And can be accessed on Felix console > Status > Sling Models

/system/console/status-slingmodels

Sling Models Inject Annotation Processor Factories


  • com.day.cq.wcm.models.impl.injectors.StyleValueInjector
  • com.day.cq.wcm.models.impl.injectors.StyleOrValueMapValueInjector
  • com.adobe.acs.commons.models.injectors.annotation.impl.JsonValueMapValueAnnotationProcessorFactory
  • com.adobe.acs.commons.models.injectors.annotation.impl.I18NAnnotationProcessorFactory
  • com.adobe.acs.commons.models.injectors.annotation.impl.HierarchicalPagePropertyAnnotationProcessorFactory
  • com.adobe.acs.commons.models.injectors.annotation.impl.ChildResourceFromRequestAnnotationProcessorFactory
  • com.adobe.acs.commons.models.injectors.annotation.impl.SharedValueMapValueAnnotationProcessorFactory
  • com.adobe.acs.commons.models.injectors.annotation.impl.AemObjectAnnotationProcessorFactory
  • org.apache.sling.models.impl.injectors.BindingsInjector
  • org.apache.sling.models.impl.injectors.ResourcePathInjector
  • org.apache.sling.models.impl.injectors.RequestAttributeInjector
  • org.apache.sling.models.impl.injectors.OSGiServiceInjector
  • org.apache.sling.models.impl.injectors.SlingObjectInjector
  • org.apache.sling.models.impl.injectors.SelfInjector
  • org.apache.sling.models.impl.injectors.ChildResourceInjector
  • org.apache.sling.models.impl.injectors.ValueMapInjector 

Sling Models Implementation Pickers 


  • org.apache.sling.models.impl.ResourceTypeBasedResourcePicker
  • org.apache.sling.models.impl.FirstImplementationPicker


Sling Models Injectors

  • i18n - com.adobe.acs.commons.models.injectors.impl.I18nInjector 
  • style - com.day.cq.wcm.models.impl.injectors.StyleValueInjector 
  • stylevaluemap - com.day.cq.wcm.models.impl.injectors.StyleOrValueMapValueInjector 
  • json-valuemap-value - com.adobe.acs.commons.models.injectors.impl.JsonValueMapValueInjector 
  • hierarchical-page-property - com.adobe.acs.commons.models.injectors.impl.HierarchicalPagePropertyInjector 
  • child-resources-from-request - com.adobe.acs.commons.models.injectors.impl.ChildResourceFromRequestInjector 
  • script-bindings - org.apache.sling.models.impl.injectors.BindingsInjector 
  • valuemap - org.apache.sling.models.impl.injectors.ValueMapInjector 
  • resource-path - org.apache.sling.models.impl.injectors.ResourcePathInjector 
  • child-resources - org.apache.sling.models.impl.injectors.ChildResourceInjector 
  • request-attributes - org.apache.sling.models.impl.injectors.RequestAttributeInjector 
  • define-objects - com.adobe.acs.commons.models.injectors.impl.AemObjectInjector 
  • osgi-services - org.apache.sling.models.impl.injectors.OSGiServiceInjector 
  • sling-object - org.apache.sling.models.impl.injectors.SlingObjectInjector 
  • self - org.apache.sling.models.impl.injectors.SelfInjector

How to search and get list of all pages of a given template in AEM?

Adobe experience manager is a powerful content management tool that provides ample options to explore and manage the content. In this post, we are going to see how to search and get all the pages from AEM which are created using a given template.

The detail required to execute this process.

Project path: Path of the directory where we would want to search the pages. e.g. /content/sample/en/en_us

Template path: Path of template. e.g. /apps/sample/templates/press

Now we have prerequisite handy with us, let's move to the execution.

Step 1: Go to the below mention URL. Adjust the domain according to your domain name.

http://localhost:4502/libs/cq/search/content/querydebug.html 

Step 2: Put the following query in the "Query Builder Debugger" section

type=cq:Page

path=/content/sample/en/en_us

1_property=jcr:content/cq:template

1_property.value=/apps/sample/templates/press

p.limit=500

In the above query; type cq:Page will include the nodes that have type cq:Page. Other than that nodes will get excluded from the script. after that path under that, we want to search the pages. Then after the name of the property and property value that will be a path of the template for which we are looking.

The last line p.limit is to set the limit of the results. We may set higher to get all the results at once on the screen. 

AEM Query Builder Debugger

Now click on the search button. After that query builder will execute the query and show the result on the right side of the page under the results section. Below is the screenshot.

 

Now click on the JSON QueryBuilder Link and get the JSON of the result which later you can convert into a CSV/XLS for future references.


Hope this helps you!, do let us know in the comment section if you have any question or suggestion.

References:

https://experienceleague.adobe.com/docs/experience-manager-64/developing/platform/query-builder/querybuilder-api.html?lang=en#refining-what-is-returned


How to find or count all pages in AEM project?

We may find all the AEM pages using the SQL query. Run the below SQL query to get the count and list of all the cq:Page from your project.

SELECT * FROM [cq:Page] AS page WHERE ISDESCENDANTNODE(page ,"/content/project")
Below is the screenshot of the result and query execution steps. You may replace the path with your own project path e.g. /content/project 
Count of pages in AEM project 

Analyze AEM thread dumps

To retrieve and get the thread dumps from a running AEM instance, open Apache Felix console then go to status >> Apache Felix Thread Dump or directly use this thread dump URL. https://localhost:4502/system/console/status-threaddump

Here we can see many download options(highlighted in below screenshot), using these download options we can download the thread dumps according to our need or just pick and copy the few threads dump from the console itself.

Apache Felix Thread Dump AEM
Image 1: Apache Felix Thread Dump console in AEM

This is how we can fetch and get the thread dump from AEM system.

Now to analyze those thread dumps we have a brilliant online tool fastThread available, using this tool we can easily analyze the thread dump.

1. Open the fastthread.io/

2. Under the Upload Thread Dumps option, we have the privilege to either use the upload or raw option.

Upload: In this case, we have to upload a file of thread dumps.

Raw: Just need to paste the content(thread dumps) in the text filed.

3. Now click on the analyze button. As soon as you clicked on the analyze button it will start analysis on our thread dumps. 

After successful analysis, it will generate a report which will look like as below.

fastThread thread analyzer tool
Image 2: fastThread thread analyzer tool


In the left sidebar, we could see all headings of the report. Check all part of this report and take the right and preventive action to fix the thread or high CPU consuming issue. 

References:

1. Take thread dumps from a JVM

2. https://fastthread.io/ft-index.jsp#features 

3. AEM Thread Dump Analysis 

Setup local dispatcher server | AEM as cloud service

In this article we are going to learn how to setup AEM cloud service dispatcher server on local machine.

Prerequisite:

1. Download the docker from Docker official site for our operating system. >> https://www.docker.com/products/docker-desktop and install the docker. Note: We need administrator privileged to run this installer, since this docker installer will change some BIOS settings in operating system.

2. Download latest AEM-SDK from Adobe software distribution libraryhttps://experience.adobe.com/#/downloads/content/software-distribution/en/aemcloud.html


Lets start the local dispatcher setup now:

Step 1: Start docker, make sure our docker is active and running.

Active docker


Step 2: Create a  folder "C:\Users\<user>\aem-sdk\dispatcher". Then extract the file "aem-sdk-dispatcher-tools-<version>-windows.zip" here. This will extract three folders: 

  1. bin
  2. src
  3. docs

Note: These all folder should direct child of dispatcher folder.

Step 3: Open the CLI (cmd) at open directory "C:\Users\<user>\aem-sdk\dispatcher"

Now run the command bin\validator full -d out src
If everything will be good with our setup then following message will get printed on your CLI.
C:\Users\<user_name>\aem-sdk\dispatcher>bin\validator full -d out src
Cloud manager validator 2.0.21
2020/08/07 18:31:20 No issues found
Step 4: Now run the docker to link our AEM publisher instance and tune dispatcher server on a port. Default port for dispatcher is 8080, but we may tune on different port based on availability. To start and link the dispatcher execute the below command.
bin\docker_run out host.docker.internal:4503 8080
Here in above command we just need to change the port numbers as per our configurations, rest all command will be remain same. This command will download the required image from docker server. Below are the entries of successful download on command line interface.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
C:\Users\rashidjorvee\aem-sdk\dispatcher>bin\docker_run out host.docker.internal:4503 8080
Required image not found, trying to load from archive...
d9ff549177a9: Loading layer [==================================================>] 4.671MB/4.671MB 
14c93ed9ebdc: Loading layer [==================================================>] 7.123MB/7.123MB 
cf0d60dcd2e9: Loading layer [==================================================>]  1.848MB/1.848MB 
214f54e148db: Loading layer [==================================================>] 109.1kB/109.1kB 
5931f9345e57: Loading layer [==================================================>]  3.584kB/3.584kB 
5ad19feebed3: Loading layer [==================================================>] 5.12kB/5.12kB 
21a29c76732d: Loading layer [==================================================>]  4.096kB/4.096kB 
860d3c46b038: Loading layer [==================================================>] 3.584kB/3.584kB 
Loaded image: adobe/aem-ethos/dispatcher-publish:2.0.23

Running script /docker_entrypoint.d/10-check-environment.sh
Running script /docker_entrypoint.d/20-create-docroots.sh
Running script /docker_entrypoint.d/30-wait-for-backend.sh
Waiting until host.docker.internal is available
host.docker.internal resolves to 192.168.65.2
Running script /docker_entrypoint.d/40-generate-allowed-clients.sh
Running script /docker_entrypoint.d/50-check-expiration.sh
Running script /docker_entrypoint.d/60-check-loglevel.sh
Running script /docker_entrypoint.d/70-check-forwarded-host-secret.sh
Starting httpd server
[Fri Aug 07 13:12:16.706522 2020] [:notice] [pid 1:tid 140172533533576] ModSecurity for Apache/2.9.2 (http://www.modsecurity.org/) configured.
[Fri Aug 07 13:12:16.706805 2020] [:notice] [pid 1:tid 140172533533576] ModSecurity: APR compiled version="1.6.3"; loaded version="1.6.3"
[Fri Aug 07 13:12:16.706827 2020] [:notice] [pid 1:tid 140172533533576] ModSecurity: PCRE compiled version="8.42 "; loaded version="8.42 2018-03-20"
[Fri Aug 07 13:12:16.706837 2020] [:notice] [pid 1:tid 140172533533576] ModSecurity: LIBXML compiled version="2.9.8"
[Fri Aug 07 13:12:16.706844 2020] [:notice] [pid 1:tid 140172533533576] ModSecurity: Status engine is currently disabled, enable it by set SecStatusEngine to On.
[Fri Aug 07 13:12:16.875893 2020] [mpm_worker:notice] [pid 1:tid 140172533533576] AH00292: Apache/2.4.43 (Unix) Communique/4.3.4-20200624 mod_qos/11.63 configured -- resuming normal operations
[Fri Aug 07 13:12:16.876090 2020] [core:notice] [pid 1:tid 140172533533576] AH00094: Command line: 'httpd -d /etc/httpd -f /etc/httpd/conf/httpd.conf -D FOREGROUND -D ENVIRONMENT_DEV'
172.17.0.1 "localhost:8585" - [07/Aug/2020:13:12:42 +0000] "GET / HTTP/1.1" 302 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"
[07/Aug/2020:13:12:42 +0000] "GET /index.html HTTP/1.1" 302 none [publishfarm/0] 24ms "localhost:8585"
172.17.0.1 "localhost:8585" - [07/Aug/2020:13:12:42 +0000] "GET /content.html HTTP/1.1" 404 196 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"
[07/Aug/2020:13:12:42 +0000] "GET /content.html HTTP/1.1" - blocked [publishfarm/-] 1ms "localhost:8585"
[07/Aug/2020:13:12:43 +0000] "GET /favicon.ico HTTP/1.1" 404 none [publishfarm/0] 39ms "localhost:8585"
172.17.0.1 "localhost:8585" - [07/Aug/2020:13:12:43 +0000] "GET /favicon.ico HTTP/1.1" 404 235 "http://localhost:8585/content.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"
[Fri Aug 07 13:13:28.608851 2020] [mpm_worker:notice] [pid 1:tid 140172533533576] AH00296: caught SIGWINCH, shutting down gracefully
172.17.0.1 "-" - [07/Aug/2020:13:13:34 +0000] "-" 408 - "-" "-"

Step 5: Our dispatcher is now active. We can now browse http://localhost:8080.
Step 6: Now we need to install our customized dispatcher configuration files in our local dispatcher server. To install the dispatcher files run the below mentioned command at same dispatcher directory. 
del -/Q out && bin\validator full -d out <path of the dispatcher source files in your project>

e.g. del -/Q out && bin\validator full -d out E:\aem\aemcloudmanager\aem-cloud-manager-set-up\dispatcher\src


Hope this helps you to understand the setup of dispatcher in local machine. Feel free to share your inputs and issues with us, we will happy to help you. Thank You!

References:


Pause option in AEM replication agent queue

At some point we need to stop the replication from AEM author to publisher for sometime or few minutes, so that no content get published from author to publisher instance. This may we need to handle the maintenance window or stop accepting new content from authors. So question here is how we can do this without disabling the AEM replication queue. 

How to pause the replication agent queue?

Out of the box AEM replication agent queue have an option "pause", using that pause option we could stop the replication. When you will pause the queue then all content which will get published by authors during that time frame will be enlist in the queue but those will not get processed. Pause option will only pause your queue but your replication queue will be still enabled and active.

Active AEM replication queue:

Active AEM replication queue

Paused AEM replication queue:

Paused AEM replication queue


Points to be remember:

  • When we will restart our instance then this paused status will be override and we will find queue is active.
  • By default it will pause for an hour.

Hope this help you to understand the pause option and its role in AEM replication queue.


References:

  1. Troubleshoot AEM replication queue


AEM as cloud service, /apps and /libs directories are in ready only mode

AEM cloud service makes the out of the box and custom codes immutable. Once we deployed the code in AEM server, we will not be able to modify or create any content or node under the /apps and /libs directories using CRXDE Lite. When we try to do so, then it will throw an error "Could not save changes. Received 500 () for saving changes in workspace crx.default. Unknown error (Error Code: 500) OR Could not save changes. Received 409 () for saving changes in workspace crx.default. org.apache.jackrabbit.oak.spi.state.ReadyOnlyBuilderException: This builder is read-only.". Below is the screenshot, when we tried creating a folder "myProject" under /apps folder.

AEM as cloud service, could not save changes


The only way to change the code is go for a fresh build and deploy the code. You may read more about mutable and immutable concept and could service project structure in our previous post Package shouldn't contain mutable and Immutable content. [https://rashidjorvee.blogspot.com/2020/07/aem-cloud-service-ImmutableMutableMixedPackage.html]

Hope this helps you!

References:

AEM Cloud Service deployment issue | Packages shouldn't mix mutable and immutable content

While deploying our old Adobe Experience Manager(AEM) code to AEM cloud service, we find some code smell issues,
ImmutableMutableMixedPackage in project build issue report. We will understand this issue here and also look how to fix this code issue from project.

Lets first understand what part of our AEM project is mutable and immutable.

Mutable

/content , /conf , /var , /etc , /oak:index , /system , /tmp , etc. are all mutable areas of AEM project, it means they can be changed at runtime.

Immutable

/apps and /libs are considered immutable areas of AEM as they cannot be changed and we are not allowed to perform CUD(create, update, delete) operation at runtime. Any attempt to change an immutable area at runtime will fail. On immutable areas we can only perform the read operation.

Issue Description


In order to make our project compatible with Cloud Service deployment model, individual content packages must contain either content for the immutable areas of the repository (that is, /apps and /libs, although /libs should not and never be modified by custom code and will cause a separate violation) or the mutable area (that is, everything else), but not both. For example, a package which includes both /apps/myproject/components/text and /etc/clientlibs/myproject is not compatible with Cloud Service and will cause an issue to be reported.
When we try to edit file under /apps directory and save, aem will not allow and show error message "Could not save changes. Received 409 () for saving changes in workspace crx.default. org.apache.jackrabbit.oak.spi.state.ReadyOnlyBuilderException: This builder is read-only."

How to search the content only from the specified directory using AEM query builder?

Using the AEM query builder, will search a content which is available in specified directory only. This query will not search the content in sub directories, or not even child of the child directories. 

Open AEM Query Builder Debuggerhttp://localhost:4502/libs/cq/search/content/querydebug.html. Add the following options to perform the search.
path=/content/dam/we-retail/en/features

path.flat=true
type=dam:Asset
fulltext=cart

Filters definition:

  • path=? // On which path this query will perform the search operation.
  • path.flat=true // will look the content only in the specified directory.
  • fulltext=? //name or keyword which you are searching.

find-direct-children-in-aem-using-query-builder
find direct children using query builder

Query tree + URLs

ROOT=group: [
{fulltext=fulltext: fulltext=cart}
{path=path: path=/content/dam/we-retail/en/features, flat=true}
{type=type: type=dam:Asset}
]

XPath query to find the direct child in a directory

/jcr:root/content/dam/we-retail/en/features/element(*, dam:Asset)
[
(jcr:contains(., 'cart'))

]

JSON response 

You can get the JSON response of this query using this URL: (Note: update the domain(localhost:4502) to browse the url for your AEM instance)


Response:
{
  "success": true,
  "results": 1,
  "total": 1,
  "more": false,
  "offset": 0,
  "hits": [
    {
      "path": "/content/dam/we-retail/en/features/cart.png",
      "excerpt": "/content/dam/we-retail/en/features/cart.png",
      "name": "cart.png",
      "title": "cart.png",
      "lastModified": "2016-06-06 16:26:05"
    }
  ]
}

How to export the list of users from AEM?

To manage the user and security purpose, we always need the list of available and active users in our system for analysis. Adobe Experience Manager(AEM) also have an in build user management section to manage the AEM user and make the things secure. In this article we will export or generate the list of available user from AEM in an excel file. To perform this activity we will use the ACS commons. ACS commons provide so many powerful tools, which is easy to use and easily plug-able on AEM, by installing ACS commons package.

Prerequisite:

ACS commons should be installed in your AEM instance. If you don't have latest ACS commons installed in your AEM instance, then you can easily and free download the ACS package from here and install the package in your AEM instance using package manager.

Now we will perform the following steps to export the user list from AEM.

Step 1: Open the URL <domain>/miscadmin#/etc/acs-commons/exporters
If you are running on your local machine then; e.g. http://localhost:4502/miscadmin#/etc/acs-commons/exporters

Go to Tools >> acs-commons >> Exporters from left side rail. Below is the screenshot of steps.

  1. Click on the Exporter folder
  2. Click on New >> New Page
  3. Create a page with any title using the default selected template(User to CSV Exporter).
  4. Click on create button.
This will create a new page under the exporter directory. Open the newly created page by double clicking on that page name.

Export users and groups list in AEM
Export User list in AEM

Step 2: Your Page will now look like this(below screenshot). From here you may add or remove the user profile properties, which you want to export and get appended in your exported CSV file.

Add Custom Property will let you add user properties (Relative path from the [rep:User] node). if you don't know the path and property name then you may refer the CRXDE-Lite to get the exact path and property name.(Below is the screenshot)
Custom user properties- user list export
Custom user properties

Screenshot to get the property name from crx/de. e.g designation, familyName
Screenshot to get the property name from crx/de. e.g designation, familyName
User profile section in CRXDE

Step 3:
Now Select the group membership the way which you want to export. Using 
Only Include Users by Group Membership option.

  1. Direct Membership : Only the direct member of groups.
  2. Indirect Membership: Only Indirect member of groups, means a group which is member of another group.
  3. Direct and Indirect Membership: Both direct and indirect membership.
Only Include Users by Group Membership option
Only Include Users by Group Membership option

Step 4: Now select all those groups whose members and user you want to export using Filter by Group option.(Select none for all groups). 
Download User CSV Report in AEM
Download User CSV Report
Step 5: After selecting the all groups click on the Download User CSV Report button to download the csv file.

You may also save the configuration for later use using the save configuration button.


References: