Approaches to customize AEM
I would like to raise a topic for which not even to this day I don’t have a clear straight forward concrete answer to give to someone that encounters the type of situations explained below.
The challenge is when one needs to customize something OOTB from AEM. Number of situations are enormous. Imagine just few that one may face:
- To customize how Content Fragment behaves in terms of auto-saving
- Customize renditions display or availability to download in left panel of an assets
- Tap in into the steps of copy-paste of a piece of content
- Alter functionality of a specific AEM page, like /security/permissions.html, or /projects.html, /assets.html
- Add a new custom column in the /sites.html/content
- Find an AEM endpoint implementation, conclude if it can be modified, change then its behaviour and control the response
- Enhance an RTE or a dialog
And the list can go on and on forever.
I am not interested in how to tackle exactly each of these few examples from above. I am interested in the general reasoning and approach in debunking a similar situation. So that when I do my research, me, as a developer, I will be sure I am on the right path to find the stuff inside AEM, understand and be confident that I landed in the right files, know how the entire internal execution flow works, what pages/endpoints/servlets are involved, what clientlibs and categories are used and so on.
I want to see different flavours of how each is used to approach such scenarios. I would like to find out if there is a common way/steps to dig into AEM. What are the basic rules that AEM is based on so that it can help anyone without indepth knowledge navigate through the solution and discover the unspoken or undocumented internal gears of AEM.
I believe few questions that usually I end up asking myself when needing to customize something in AEM, would be:
- Is there a documentation on all the OOTB clientlibs, what they do, where are they used etc ? I know we have this /libs/granite/ui/content/dumplibs.html or this /libs/granite/ui/content/dumplibs.rebuild.html or this /libs/granite/ui/content/dumplibs.test.html. But I am looking for something more explanatory.
- Is there a documentation on all event listeners ? Like the cq-* ones (cq-close-toolbar), or dialog-* ones (dialog-beforeclose), or foundation-* one (foundation-contentloaded). We can’t just do guessings based on its name.
- Is there a documentation on all available tools, including those not visible or easy accessible via Touch UI ? Like /libs/cq/i18n/translator.html, or those regarding clientlibs mentioned above.
I know at some point few of these clientlibs, or event listeners, or internal tools, are mentioned, directly or tangential, in some Adobe documentation. But would be nice to have also a documentation centered around them (extracted maybe from existing Adobe documentations and centralized in one place, maybe using AI ... hmmmm ... maybe this can be submitted as an idea proposal ?)
So in conclusion, I am interested in an unified-generic-like way to handle such situations.
Teach me how to fish, don’t give me the fish !
