Generate reports for a users last log-in in AEM

There are cases where we need to generate reports for a users last log-in in AEM. 

I have seen many help blogs but none of them worked for me. Below given an approach which worked for me.

Approach

Utilising 'AuthenticationInfoPostProcessor' service in combination with ACS commons, its going to be easy to generate such reports. This is tested on AEM 6.5 version.

Step1: Deploy below Java code which will capture lastLogin information.
    

Java class which captures the users last login and update the user node

Note: Modify the conditions as per your project requirement. 

--Java class START ---

package yourpackage.core.services;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.jcr.Session;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.jackrabbit.api.security.user.Authorizable;
import org.apache.jackrabbit.api.security.user.UserManager;
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.auth.core.spi.AuthenticationInfo;
import org.apache.sling.auth.core.spi.AuthenticationInfoPostProcessor;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component(name = "UserProfileService", service = AuthenticationInfoPostProcessor.class, immediate = true)
    
public class UserProfileService implements AuthenticationInfoPostProcessor {
    
    /**
     * This class generate Last login property of any user profile
     *
     * @param authenticationinfo
     * @param servletrequest
     * @param servletresponse
     */
    
    private static final Logger LOGGER = LoggerFactory.getLogger(UserProfileService.class);
    @Reference
    private ResourceResolverFactory resourceResolverFactory;

    @Override
    public void postProcess(AuthenticationInfo info, HttpServletRequest request, HttpServletResponse response)
            throws LoginException {

    /**
         * Users last logged in will be his last active time in AEM
         * Executed only when it is a logout operation to ensure the last active time is captured
         * Ensure to update the code with relevant condition
         */
        if ((info != null && info.getAuthType() == null) || (request != null && request.getServletPath() != null
                && (*Your condition 1*))) {
            LOGGER.debug("AuthenticationInfo is null. " + "we can skip post processing this request.");
            return;
        }
        
        ResourceResolver resourceResolver = null;        
        Session session = null;
        UserManager userManager = null;
        Authorizable auth = null;

        try {
            resourceResolver = resourceResolverFactory.getResourceResolver(info);
            session = resourceResolver.adaptTo(Session.class);
            userManager = resourceResolver.adaptTo(UserManager.class);
            auth = userManager.getAuthorizable(session.getUserID());
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
                //Anonymous users need not be checked
                if (auth.getID() != null && (*Your condition 2*)) {
                    LOGGER.info("Logged in Users log in");
                    //Profile will have a new property
                    auth.setProperty("profile/lastLoggedIn", session.getValueFactory().createValue(sdf.format(new Date())));
                    session.save();
                    session.logout();
                }

        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
}

--Java class END---

 
In my case I had used below conditions.
(*Your condition 1*) - !request.getServletPath().equals("/system/sling/logout.html")
(*Your condition 2*) - !auth.getID().equals("anonymous")
  

Step 2: ACS Commons Report
Now in ACS common reports create a new report with query of type JCRSQL2



SELECT * FROM  [rep:User] as nodes WHERE  ISDESCENDANTNODE("/home/users")
AND nodes.[profile/lastLoggedIn] IS NOT NULL
AND NOT ISDESCENDANTNODE([/home/users/community])
AND NOT ISDESCENDANTNODE([/home/users/mac])
AND NOT ISDESCENDANTNODE([/home/users/rep:policy])
AND NOT ISDESCENDANTNODE([/home/users/screens])
AND NOT ISDESCENDANTNODE([/home/users/system])

And configure the report column as below.



Now you will be able to Generate the final report as shown below.





 Demo Video

Tuesday, 9 November 2021

AEM Asset Upload Size restriction - How to overcome?

By default, AEM supports Assets that are smaller than 2 GB because of a file size limit. However, you can overwrite this limit by going into CRXDE Lite and creating a node under the /apps directory detailed in URL.



Refer URL : RAW Assets Size More info: 


https://experienceleague.adobe.com/docs/experience-manager-65/assets/managing/managing-video-assets.html?lang=en#configuration-to-upload-assets-that-are-larger-than-gb


Is there any limit to upload an asset?

It can be configured to 30 GB also. AEM doesnt define a size limit.

What we need to ensure while changing the default behavior?


  • When we make this changes, ensure you take care of the time out limit on OSGi and Dispatcher idle time so that AEM keep listening the asset upload.
  • Also major point; consider the AEM's default asset processing, and hardware configurations while making this changes. 

Demo Video

How to fix traversal index issue in AEM

 Recently I got an email from my AEM Admin about the indexing issue. The email had some content as shown below.

"WARN* [qtp1832135175-163] org.apache.jackrabbit.oak.spi.query.Cursors$TraversingCursor Traversed 10,000 nodes with filter Filter(query=select * from [nt:base] where foo = 'bar', path=*, property=[foo=[bar]]); consider creating an index "

Some times while working on AEM, we may face traversal warnings. The latest AEM doesn't index the nodes by default. So to ensure our content gets indexed well within AEM, we will have to create indexing nodes and get them indexed.

Below given steps to fix index issues

  • Use the Oak index generation tool - generate index definition.
  • Add the indexing under node oak:index.
  • Trigger the re-index.

 
When we find an issue with a query(traversal warning !), we can use below tool to analyze the query.
 

Query Performance tool URL

http://[AEM URL]:[PORT]/libs/granite/operations/content/diagnosistools/queryPerformance.html

If the analysis recommends to index the nodes, we can use below Oak Index tool to generate the index definitions. 


Oak Index Definition Generator in AEM


http://oakutils.appspot.com/generate/index

 
How to validate the index operation is done?

The indexing property becomes 'false' once the indexing has been completed.

Also, in the console we can go and validate it from index diagnosis tool > index manager
http://[AEM URL]:[PORT]/libs/granite/operations/content/diagnosistools/indexManager.html

Notes:

  • We can even use Synonym file to index the synonyms in AEM.
  • We can define multiple indexes together and trigger them parallel without any issues.

Demo Video

Monday, 8 November 2021

Fix package upload issue in AEM - use CURL command for package upload

While working on AEM, some times we get package upload issue in some of the browsers . 




There could be multiple reasons for this. Now a days companies are doing stringent checks when we try to upload anything via browser. We have faced issue of package upload on AEM during the remote work situations.

Below given an alternate option to upload packages in AEM using CURL command.

CURL Command
curl -u admin:admin -F package=@"name_of_package.zip" http://localhost:4502/crx/packmgr/service/.json/?cmd=upload

Where admin:admin is the local instance user credential.


name_of_package.zip - Change the package name according to your case.

 


 Demo Video

How to raise a product issue with Adobe

To open a support ticket in Adobe, you should have the relevant product assigned as an administrator.

Login to Admin console of Adobe and select the organization from drop down as shown.




Click on support tab. Once you land on this, you can see various options like a Support summary page which gives various options for creating an adobe ticket, start a chat or get the Adobe customer care number.

You have a lot more help topics linked from this page too.

To create a support ticket , click on 'Create Case'



Next step select whether it is a user and license related or using the experience cloud product issue.



And fill in the additional details to complete the request. Once the ticket has been raised Adobe team will contact back for more clarifications.




Saturday, 3 July 2021

How to update JDK version of Cloud Manager within your program as part of the build

 AEM AS CLOUD SERVICE VIDEO TUTORIAL SERIES

What are the available JDK versions with cloud manager?

Java versions installed are Oracle JDK 8u202 and 11.0.2.

Some times, when we deploy our code, people complaint java version is not matching (for e.g. we are using a JDK 11 specific API and this Java class is giving error in cloud manager) We will see how to set the relevant java version now.

How to update the Java version of project build environment in AEM As Cloud Manager

By default, projects are built using Java 8. Customers who want to use Java 11 in their projects can do this using the Apache Maven Toolchains Plugin.

In the pom.xml file, add a <plugin> entry that looks like this:

<!-- START -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-toolchains-plugin</artifactId>
            <version>1.1</version>
            <executions>
                <execution>
                    <goals>
                        <goal>toolchain</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <toolchains>
                    <jdk>
                        <version>11</version>
                        <vendor>oracle</vendor>
                    </jdk>
                </toolchains>
            </configuration>
        </plugin>
<!-- END -->


A few FAQs about AEM As Cloud Service build environment are given below

What is the OS used for AEM as CLoud service?

Build environment is Linux-based, derived from Ubuntu 18.04.

At present what is the maven version?

The installed maven is - Apache Maven 3.6.0 version.

Which java versions are supported by AEM as cloud service?
Java versions installed are Oracle JDK 8u202 and 11.0.2.

Which repository is configured as part of Maven Build ?
adobe-public

Any other tools or packages available in AEM As Cloud environment?
unzip, bzip2, libpng, imagemagick, graphicsmagick

My code has some script with Python or ruby script and I need to trigger it as part of my code build. Is this possible?

For this we need an appropriate language interpreter installed. This can be done by calling the 'exec-maven-plugin' to invoke APT. See an example below,

<!-- START -->
        <profile>
            <id>install-Ruby</id>
            <activation>
                <property>
                        <name>env.CM_BUILD</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>exec-maven-plugin</artifactId>
                        <version>1.6.0</version>
                        <executions>
                            <execution>
                                <id>apt-get-update</id>
                                <phase>validate</phase>
                                <goals>
                                    <goal>exec</goal>
                                </goals>
                                <configuration>
                                    <executable>apt-get</executable>
                                    <arguments>
                                        <argument>update</argument>
                                    </arguments>
                                </configuration>
                            </execution>
                            <execution>
                                <id>install-ruby</id>
                                <phase>validate</phase>
                                <goals>
                                    <goal>exec</goal>
                                </goals>
                                <configuration>
                                    <executable>apt-get</executable>
                                    <arguments>
                                        <argument>install</argument>
                                        <argument>-y</argument>
                                        <argument>--no-install-recommends</argument>
                                        <argument>ruby</argument>
                                    </arguments>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
<!-- END -->

Monday, 28 June 2021

Difference between Brand portal, Asset Share commons & Dynamic Media

People usually gets confused with various asset management tools from Adobe. Since each product has its relevancy, here we will try to compare those tools.

What is the difference between Brand Portal & Asset Share Commons?

Functionally, Brand Portal and Asset Share Commons both does similar things, provide assets stored in your AEM Assets to users without allowing them access to items that should be protected. These two tools options are simple in setup, configure so that the implementations are minimal.

Brand Portal(This one is Licensed by Adobe) has been described as a secure, cloud enabled service for on-demand asset distribution to internal teams, external partners, agencies, and resellers for marketing purpose. The customizations are very limited in case of Brand Portal.

Where in Asset Share Commons is a technical reference implementation(a reference for AEM developers when developing asset sharing functionality) of 'asset share' functionality built using Adobe Experience Manager best practices. The source code is available in Github project page(Non licensed and no warranty product). Since it is an open-source project, contributions and enhancements can be done on this.

What are all the difference between Dynamic media & Brand portal

Dynamic Media combines the power of asset management with rich media delivery ( create, adjust, brand, and deploy interactive viewers using the WYSIWYG Viewer Designer). Basically Dynamic Media is an evolution of Scene7 (Dynamic Media Classic). Scene7 was a stand alone product and Adobe bought scene7 and now it is re branding it to dynamic media by adding more features to it.

The feature list consists of:

Single user interface and platform for managing images and video, Seamless integration with Adobe Experience Manager, Innovative merchandising features, Powered by the robust and proven delivery platform.

Where in Brand portal(cloud-based SAAS offering) helps you easily acquire, control, and securely distribute approved creative assets to external parties and internal business users across devices. It helps improve the efficiency of asset sharing, accelerates the time-to-market for assets, and reduces the risk of non-compliance and unauthorized access. We can easily integrate Brand Portal with AEM.

Final Verdict

Dynamic media is for Collaboration and shared file sync with Adobe Creative Cloud applications, where in Brand portal/asset share commons is to share to external people.
Both support asset operations and approval workflows. So chose the prouct after understanding the proper requirements.

WATCH THIS >> AEM AS CLOUD SERVICE VIDEO TUTORIAL SERIES 

 

 Difference between  Brand portal, Asset Share commons & Dynamic Media

Friday, 25 June 2021

Working with Adobe IO Command line interface

Some times we need to work with AEM as cloud without accessing the AEM AS Cloud environment directly.

WATCH THIS >> AEM AS CLOUD SERVICE VIDEO TUTORIAL SERIES 
So to work with Adobe I/O CLI we need to install Node JS first. Then follow through the steps.

Step 1: Install Adobe I/O
npm install -g @adobe/aio-cli

Step 2: Install Adobe I/O Cloud Manager Plugin
aio plugins:install @adobe/aio-cli-plugin-cloudmanager

Step 3: Update the plugins
aio plugins:update


Above diagram gives an overview on environment provisioning in AEM as cloud
 

Step 4: First List the organizations tagged
aio cloudmanager:org:list

Step 5: Then select the Organization from above list
aio cloudmanager:org:select [Your org id from above list]@AdobeOrg

Step 6: aio cloudmanager:list-programs

Step 7: Then set a program
aio config:set cloudmanager_programid [Your prog id from above list]

Step 8: List all environments
aio cloudmanager:list-environments

Now based on requirements, you can execute the commands. Some examples are given below,


To Download logs:
aio cloudmanager:download-logs [env id] author aemerror 1

To list log options
aio cloudmanager:environment:list-available-log-options [env id]

To list OSGi Environment varriables
aio cloudmanager:list-environment-variables [env id]

To List Pipelines
aio cloudmanager:program:list-pipelines

To list a specific pipeline status
aio cloudmanager:pipeline:list-executions  [pipeline id]

OSGi Commands

-----------
To Set OSGI parameters
aio cloudmanager:set-environment-variables ENVIRONMENT_ID --variable MY_VAR1 "plaintext value" --secret MY_VAR2 "some secret value"

To List environment variables
aio cloudmanager:list-environment-variables ENVIRONMENT_ID

To Delete any variables.
aio cloudmanager:set-environment-variables ENVIRONMENT_ID --delete MY_VAR1 MY_VAR2

Ref URL:
https://github.com/adobe/aio-cli-plugin-cloudmanager#aio-cloudmanagerenvironmentdownload-logs-environmentid-service-name-days
https://github.com/adobe/aio-cli-plugin-auth#aio-authlogin
https://github.com/adobe/aio-cli

 

Watch Video Here

Assets Essentials Vs AEM Assets As Cloud

 Recently Adobe launched Assets Essentials. Let us take a look at the difference between Assets Essentials and AEM Assets and find out which suits customers.

Assets Essentials is a lightweight version of Adobe Experience Manager Assets with a simplified user experience for marketing and creative pros to store, discover, and distribute digital assets across teams. This is designed to help brands connect more agile users with the digital assets they need to deliver rich customer experiences.

Assets Essentials is cloud-based and enables customers to start with essential asset management capabilities and seamlessly upgrade to the advanced enterprise DAM, AEM Assets, as their business needs grow.

Assets Essentials is the new default asset management UI for Experience Cloud. Assets Essentials will serve as the default asset management experience across Experience Cloud apps, starting with the new Adobe Journey Optimizer and later this year with Adobe Workfront.

Some of the features of Experience Manager Assets Essentials are given below

  • Collaborative workspace unites teams
  • Simplified asset management
  • Creative Cloud and Experience Cloud integrations
  • Cloud-based peace of mind
  • AI-powered search, discovery, and management
  • Quick and easy, intuitive user interface
  • Find the assets you need to assemble and personalize messages across the customer journey using workflows
  • Unify work and asset management to personalized experiences at scale

AEM Assets As Cloud
Experience Manager Assets offers a cloud-native solution with an AI and machine learning backbone. It provides wings to creatives and marketers & Supports enhanced asset management integrations (solution specific)

Some of the differences

Assets Essentials - User Experience - Configurable
Adobe Experience Manager Assets - User Experience – Customizable

Assets Essentials - (Basic) Asset Management & Library Services

Adobe Experience Manager Assets - (Advanced) Asset Management & Library Services

Assets Essentials - (Basic) Security & Rights Management

Adobe Experience Manager Assets - (Advanced) Security & Rights Management

Assets Essentials - Supports Experience Cloud Connections
Adobe Experience Manager Assets -  can integrate with Dynamic Media, Asset Portals (Brand Portal, Asset Share)

The verdict

Always start with essential DAM capabilities and grow to Enterprise DAM as business needs growth.
Customers with heavy weight asset management requirements should consider AEM Assets Cloud Service over Assets Essentials. The emphasis should be on the customer’s requirements to determine the right solution.

Assets Essentials creates an entry path for customers to start with the essential DAM capabilities to extend access to content to more users within a larger enterprise and seamlessly upgrade them to AEM Assets Cloud Service as their business expands(i.e. need more features, analytics, campaign integration etc.).

WATCH THIS >> AEM AS CLOUD SERVICE VIDEO TUTORIAL SERIES

Wednesday, 9 June 2021

AEM As Cloud deployment fails with dispatcher image issue

During my initial POCs with sample WKND code, I have noticed a behavior on AEM As Cloud service.

When ever I go for the pipeline and trigger it, the deployment fails with reason - dispatcher image failed. Some analysis was done around it from the logs and was able to resolve it as below.

I was doing my code checkout on windows and while unzipping I was using a software which was breaking the symlinks within dispatcher package. I got some warning during the unzip which I did not give much attention that point of time

To debug this, first I have commented out the dispatcher section in parent pom and deployed and tested the build. It worked on cloud.



Next I used another unzip tool (I remember Winzip was the tool which helped me. 7 Zip was removing symlinks. If it doesn't work, try other way around).

This time the symlink warning did not come durng my unzip and I have redeployed the code again. It worked perfectly.

Another option to fix this, may be, we can change those symlinks to real links if you know how to do that.

As a final option, still if you are unable to find out the reason, my recommendation is to reach out to spp help of Adobe, so that they can verify whether the envirnment was setup correctly.

 

Video Tutorial on AEM Cloud Deployment 

WATCH THIS >> AEM AS CLOUD SERVICE VIDEO TUTORIAL SERIES



Friday, 4 June 2021

Site Template in AEM FAQ

 Site Template in AEM FAQ

What is Site template (known as Sites 30)?

Site template is a predefined template which can be the starting point of any website creation. It contains basic theming, page templates, configurations and sample content. Instead of going to the archetype way of creating step by step approach of developing a website, Site template helps to utilize the out of the box components and templates and setup a website in shorter period of time. Once the site is up, the developers parallely work towards achieving the brand styles and customization (utilizing CSS, JS)

This is the new recommended Adobe way of developing an AEM site

Can I get it installed on my local AEM instance?
As of now the Site Template is enabled as part of AEM as A Cloud Service ONLY. We will have to contact Adobe to get this feature enabled in our AEM AS CLOUD.

Where I can get the templates?
This is an open-sourced project like Core Components. It can be downloaded from Basic Site Template project on GitHub, but always ensure you use the latest release.
https://github.com/adobe/aem-site-template-basic

What is themes in Sites?

Themes used to depict styles. We can modify theme sources of an Adobe Experience Manager Site to apply brand specific styles.

Where I can find more details?

We can always get demo and tutorials on below link.
https://experienceleague.adobe.com/docs/experience-manager-learn/getting-started-wknd-tutorial-develop/site-template/overview.html?lang=en

Wednesday, 31 March 2021

Crx2Oak Migration tool Concepts and Demo

 Crx2Oak helps migrate data from older CQ versions based on Apache Jackrabbit 2 to Oak, and it can also be used to copy data between Oak repositories.


 

You may also read: AEM As A Cloud Video Tutorials

The tool can be used for:

  • Migrating from older CQ 5 versions to AEM 6
  • Copying data between multiple Oak repositories
  • Converting data between different Oak MicroKernel implementations. (S3DataStore to FileDataStore)


Some of its features are

  • The migration can be interrupted at any time, with the possibility to resume it afterwards.
  • Custom Java logic can also be implemented using CommitHooks.
  • CRX2Oak also supports memory mapped operations by default. Memory mapping greatly improves performance


Parameters
Node Store Options
--cache: Cache size in MB (default is 256)

--mmap: Enable memory mapped file access for Segment Store

--src-password: Password for the source RDB database

--src-user: User for the source RDB

--user: User for the targed RDB

--password: Password for the target RDB.

Version Store Options
--copy-orphaned-versions: Skips copying orphaned versions. Parameters supported are: true, false and yyyy-mm-dd. Defaults to true.

--copy-versions: Copies the version storage. Parameters: true, false, yyyy-mm-dd. Defaults to true.

WATCH THIS >> AEM AS CLOUD SERVICE VIDEO TUTORIAL SERIES

Path Options
--include-paths: Comma-separated list of paths to include during copy
--merge-paths: Comma-separated list of paths to merge during copy
--exclude-paths: Comma-separated list of paths to exclude during copy.


Source Blob Store Options
--src-datastore: The datastore directory to be used as a source FileDataStore

--src-fileblobstore: The datastore directory to be used as a source FileBlobStore

--src-s3datastore: The datastore directory to be used for the source S3DataStore

--src-s3config: The configuration file for the source S3DataStore.


Destination BlobStore Options
--datastore: The datastore directory to be used as a target FileDataStore

--fileblobstore: The datastore directory to be used as a target FileBlobStore

--s3datastore: The datastore directory to be used for the target S3DataStore

--s3config: The configuration file for the target S3DataStore.

Help Options
-?, -h, --help: Shows help information.

Debugging
--log-level TRACE or --log-level DEBUG 

Demo Video Series

What are the option for asset migration between AEM instances?


There are cases where we need to move assets across AEM instances. This may occur when we have multiple asset repositories and as part of merging assets we may have to move them into one single instance. While moving assets we have to consider various factors like asset metadata, asset versions, Tags w.r.t assets all moved and validated.

The overall size of asset is another consideration while selecting any tools to migrate assets. Below given few tools which can be included in our consideration while we go for asset migration.


-Replication Agent
By configuring replication agent, we can migrate assets across AEM Instances

-Vault Remote Copy

Jackrabbit vault offers a simple method to copy nodes between repositories.

This can be used for bulk assets.

References:
https://jackrabbit.apache.org/filevault/rcp.html
https://experienceleague.adobe.com/docs/experience-manager-65/assets/administer/assets-migration-guide.html?lang=en#migrating-between-aem-instances
License: Jackrabbit Oak and any of its parts are licensed according to the terms listed in the Apache License, Version 2.0

-Grabbit

Grabbit provides a fast and reliable way of copying content from one Sling (specifically Adobe AEM) instance to another.
Grabbit creates a stream of data using Google’s Protocol Buffers aka "ProtoBuf". Protocol Buffers are an extremely efficient (in terms of CPU, memory and wire size) binary protocol that includes compression.

This is one of the Adobe recommended solution & can be considered for bulk assets movement.

Ref:
https://github.com/TWCable/grabbit
https://relevancelab.com/2019/07/04/get-moving-with-aem-and-grabbit/
License: Licensed under the Apache License, Version 2.0 https://github.com/TWCable/grabbit/blob/master/docs/LicenseInfo.adoc


-Recap

Crx sync option based on vlt rcp

Ref:
http://adamcin.net/net.adamcin.recap/

-Crx2Oak

Crx sync option  - tools provided by Adobe while upgrading AEM or for migration of crx data.
This is one of the Adobe recommended & can be used for bulk Assets

-S3 Asset Ingestor

This is part of ACS AEM Commons .It pulls files from an Amazon S3 bucket instead of the local file system. You can load a directory of assets into AEM very easily with this tool. Because of the ability to overload a server with assets, this tool only appears for the “admin” user right now.

Ref:
https://adobe-consulting-services.github.io/acs-aem-commons/features/mcp-tools/asset-ingestion/s3-asset-ingestor/index.html





What is AEP? Adobe Experience Platform FAQ



What is AEP(Adobe Experience Platform)
AEP helps to capture the customer journey. In AEP, data from various sources are stitched together using a schema. Thus an identity graph is built which is unique to a customer. AEP has a data lake where data from various sources are streamlined and fed into. This will be used to create profile data for a customer.




AEP is basically a combination of Real time customer profile + AI & machine Learning + Open Ecosystem

What are all the various data sets defined in AEP?
AEP has various data sets like,
Attributes: Characters like customer name, email, gender etc.
Identities: Unique identity info like ECID(experience cloud id), Email, membership id, phone no etc.
Segments : Categories like  online shoppers, gender, Location. [one such use case is, these segments can be exported to utilize in an email campaign]
Behaviors: Like login to the website, installed appication, added an item to cart etc.

What AEP Solves?
AEP solves below concerns.

  1. Disconnected identities.
  2. Slow and vulnerable data transfer.
  3. AI & ML operates in silos usually. Extraction of data is tough in such cases.
  4. Data governance is not enforced usually(CCPA, GDPR etc)
  5. Centralization of multiple features.


Capabilities or major AEP Features:

  • Create Actionable, real time intelligent customer profiles.
  • Enrich data and derive more insights with AI & ML & Data queries(SQL).
  • Innovate with open & composable components (Open APIS etc.)
  • Enhance delivery
  • Privacy and data protection(Privacy framework, consent offering, security )


AEP integration into other Adobe Cloud Applications
Adobe Experince cloud applications (Marketing cloud, Analytics cloud, Advertising cloud, commerce cloud) can be easily integrated to  AEP.

All customer attributes are fed into AEP from different applications.
For eg.
Adobe Analytics send data(when ever a data point is captured, immediately it goes into AEP), Adobe Target send data(decision made, content presented kind of data), Audience (send trace and audience), Campaign(profile and event data) can be easily fed into AEP via launch.

AEP uses Launch & websdk to import data directly into AEP from various applications.

How AEM or Forms utilizes AEP?
AEM can use this AEP data to personalize content on pages or forms.

Various AEP Implementation Phases & Roles responsible for.

Plan - (Leads and an enterprise architect will plan referring business goals and document it by defining KPIs)
Implement - (Data architects and engineers create data lakes(create model, schemas) and make available), ensure data integrity by query services.
Use - Marketrs, data analysts, data scientists(uses query service), application developer interacts with UI & start working towards integrating with other adobe applications(campaign,target, analytics)
Grow - People highlights the growth to the initial set of team (Enterprise architects, company lead etc)

Basic architecture of AEP

Through data ingestion (either third party ETL, ERP, Sales or Adobe applications via launch), we can ingest data into AEP data lake. The data resides as batches and files. Any data getting pushed also placed in Experience platform pipeline. Any data gets into AEP traverse to identity graph and profile store quickly.

The controls native to AEP are
Access control: specific permission rights to data & users
Data governance: to ensure data integrity
Experience data model systems: common data model, which cn be extended based on needs
Query service: SQL way of accessing data - it has connectors, so other sql tools can connect to this query service
Data science workspace: allows data scientists to create data models build train and deploy.
Intelligent services: like Attribution AI or customer AI - prebuild models can be configured to operate on data
Segmentation capabilities: for categorization. it includes streams and batches

Application Services
-Customer journey analytics - Combine all data from every channel. It has analysis workspace/ interface on top of AEP, helps visualize and explore all data from data lake.
-Real time customer data platform(CDP) - rich real time customer profiles, actionable insights, data governance. CDP has segmentation capabilities.
-Journey orchestration -  enables orchestration of triggered interactions like registration confirmations, location based information
-Intelligent Services -  Utilizing the AI & ML Capabilities to intelligently predict customer behavior.
-Offer decisioning - Build offer, apply decisioning & then deploy the right offer.

Use cases of AEP

1) Real time customer data platform - Stitch known and unknown data to activate customer profiles
2) Customer journey intelligence - Utilize the data driven methodologies, best practices AI & ML to enable real time decisions and actions
3) Delivery and cross channel experience - capability to deliver consistent and personalized experiences across all channels with the combination of platform and experience cloud products.
4) Customer experience application development - AEP gives an open and extensible platform for low latency access to profiles decisions and insights to create new customer experience applications.


Saturday, 2 January 2021

All you need to know about Adobe Client Data Layer

What is Adobe Client Data Layer

A data layer in general consists of a JavaScript client side event driven data store that can be used on webpages, to collect data about what the visitors experience on the web page & to communicate this data to digital analytics and reporting servers(e.g. Adobe analytics or Adobe target)

What does it do?

The Adobe client data layer is a java script store for data and events happening on a page within the scope of a request. It reduce the effort to instrument websites by providing a standardized method to expose and access any kind of data for any script. 

It provides API to,

1) Register data that is to be merged into the data layer state
2) Trigger events that relate to the data stored in the data layer
3) Get the current data layer state of all merged data
4) Register listeners that are called for specific events or data changes

Steps to set up a data layer

1) Loading the data layer script
2) Declare the adobeDatalayer array

Once above steps has been configred, we can work on various push menthods(  Push the Data object/ Push Event Object/Push functions) Events (registering & unregistering)

The AEM Core Components are availed with Adobe Client Data Layer(Disabled by default - we need to enable it if we have plans to use it).

To push the data from website to Analytics, we need Adobe Client Data Layer extension & Adobe Analytics, Core Extensions to be configured.

Some of the use cases
1) Retrieving Analytics data & using it for Personalization
2) Trigger an update event on page when the stock market value changes

 Reference URLs:

 Adobe client data layer - https://github.com/adobe/adobe-client-data-layer

Wiki - https://github.com/adobe/adobe-client-data-layer/wiki

All you need to know about Project Firefly

 What is Project Firefly? 

Project Firefly is a run time framework for building 3rd party cloud native applications that extend the functionality of Adobe experience Platform(AEP) and Adobe experience cloud.

It provides everything we need to develop an application, even this is extendable - which grows with the needs.

What it contains?

  • Adobe I/O runtime - which is a server-less foundation for running 3rd party custom code on Adobe infra. It provides scaling in /out etc.
  • CLI & SDK - Enables local development, CI/CD. Streamlined way for developers to interact with core Adobe services and automated process.
  • Spectrum(Adobes design language) UI Framework - A React based UI framework for creating experiences that feels native comfort
  • Custom events - Publish and consume custom events with support for webhooks and journaling
  • Cloud services - a range of services for running managing and optimizing custom digital experiences.(Cloud storage, blob storage,CDN etc)
  • Set of Developer tools - Has UX modeling tools, IDE plugins(code completion) and other tools to aid in testing, debugging  and deploying custom experiences.


Whom it will be helpful?

  • System integration developers - who are typically specialized on integrating and extending Adobe enterprise solutions(AEM, Campaign, Marketo, Magento etc)
  • Enterprise developers - who works with enterprise customers to create business sue case demos etc.


What is the difference between I/O Runtime & project Firefly

Project Firefly is a complete app framework to build custom cloud native Adobe Apps, where in Adobe I/O runtime is a server-less platform for running custom code.

Project Firefly is built on top of Adobe I/O Runtime.

What are all the features of Project Firefly?

  • Storage services - We get all relevant storage services to work with a 3rd party app
  • Debugging - Provides various debugging options
  • Logging - Provides evident logging mechanisms
  • Action templates - Project starter templates
  • UI templates - React spectrum templates to help developers
  • Security - Firefly is highly secured


Some of the typical use cases of Firefly
1) Asset migration in AEM(External DAM to AEM) which are in Gigabytes(bulk uploads) - the task can be offloaded to a headless firefly app that uses content fragment API, so  that normal AEM tasks run without issues.

2) Offloading analytics data to Firefly - Firefly can pull the data from Adobe analytics and save it into DB or make it available for Target

3) Data ingestion monitoring - There are cases where we need to import Huge data into AEP and there could be errors in the process. We can use Firefly to monitor the Adobe i/O events and trigger the other system when something goes wrong to take corrective actions

4) Campaign stand dashboard for monitoring- unlike campaign classic, campaign standard doesnt provide a dashboard to monitor workflows. Using Firefly, we can create SPA that display the status of all workflows in Campaign standard - which helps marketers