Expand my Community achievements bar.

Join us for the next Community Q&A Coffee Break on Tuesday April 23, 2024 with Eric Matisoff, Principal Evangelist, Analytics & Data Science, who will join us to discuss all the big news and announcements from Summit 2024!
SOLVED

ACDL and EDDL - difference and implementation steps.

Avatar

Community Advisor

Hi,

Can you help me understand the difference between ACDL and EDDL.

Also, does anybody has a step by step guide to implement ACDL and EDDL through Adobe Launch. (screenshots/video for each step will be more helpful)

Thanks.

1 Accepted Solution

Avatar

Correct answer by
Level 3

Hey there.  The short answer to your question has to do with AEM.

ACDL is an event driven data layer that is managed and created by AEM 6.5+, 

Meaning, if you're using an AEM CMS, the 'adobeDataLayer' JS Object will automatically be available.  It will list out all the AEM components that make up the web page AND it will include 'events', like cmp:show and cmp:click to tell Adobe Data Collection when to fire and what rules to fire.

 

EDDL is pretty much the same thing, but it is independent from AEM.  It's when your website developers add event listeners to the user experience and trigger 'events' when appropriate.  Each event must be added manually by the dev team, which is why ACDL is so appealing, in my opinion.

 

As for integrating ACDL with Adobe Data Collection & Adobe Analytics... there are two approaches.  Adobe's documented approach - https://experienceleague.adobe.com/docs/experience-manager-learn/sites/integrations/analytics/collec... - does work.  But it requires you to add 'custom code' to your rule events / triggers.  Not the end of the world, but not the best.

The 2nd approach is to use the ACDL Extension, by Adobe Consulting services.  This enables you to use the GUI to trigger your rule events.  You simply have to identify which AEM event you want to trigger your rule (e.g., cmp:show, cmp:loaded or cmp:click).  

You should know, that neither case supports the AA Extension.  Meaning the Global Variables will not work at all.  You'll have to add all your global variables to your individual rules.  Plus the AA extension custom code section has NO access to the 'event payload' coming in from AEM.  This means if you want to use the AA Extension custom code section you'll have to either reference a Data Element or reference the adobeDataLayer specifically.  PLUS you'll have to add your custom code to the 'doPlugins' section otherwise you'll get inconsistent results in your props and evars.

 

I recommend you use the ACDL extension, as I did find that easier to use.  But unfortunately I was never able to figure out how to use the ACDL Extension to create Data Elements.  I just used custom code to do all that.  For example, to capture the 'dc:title' on a 'cmp:show' event (aka page load event), I used this script

 

try {
if( event && event.message && event.message.eventInfo.path ){
var a = adobeDataLayer.getState(event.message.eventInfo.path);
return a['dc:title'];
}
} catch(err) {}

 

the event - refers to the payload event coming from AEM

the event.message is an object given to you when you implement the ACDL extension

the eventInfo.path is the unique identifier for the AEM component that was associated with the event, in the case of a page load it would be the page component id, in the case of a button click it would be the link component id.

then using the getState method, you can pass the 'eventInfo.path' into the method to access the information about that specific component at that moment in time.

 

As I mentioned earlier and per my own testing, the 'event' data is only available to the rule that gets triggered and the data elements called in that rule.  This is different than other installs.  Normally data elements are refreshed on a page load and don't have to be used to get updated.  With the ACDL, the data elements will NOT update unless they are included in your rule.  I'm still assessing the implications of that for my specific scenarios.

 

I don't have any screenshots and I've just started working with this myself, but I hope that gives you some direction to start with.

View solution in original post

4 Replies

Avatar

Correct answer by
Level 3

Hey there.  The short answer to your question has to do with AEM.

ACDL is an event driven data layer that is managed and created by AEM 6.5+, 

Meaning, if you're using an AEM CMS, the 'adobeDataLayer' JS Object will automatically be available.  It will list out all the AEM components that make up the web page AND it will include 'events', like cmp:show and cmp:click to tell Adobe Data Collection when to fire and what rules to fire.

 

EDDL is pretty much the same thing, but it is independent from AEM.  It's when your website developers add event listeners to the user experience and trigger 'events' when appropriate.  Each event must be added manually by the dev team, which is why ACDL is so appealing, in my opinion.

 

As for integrating ACDL with Adobe Data Collection & Adobe Analytics... there are two approaches.  Adobe's documented approach - https://experienceleague.adobe.com/docs/experience-manager-learn/sites/integrations/analytics/collec... - does work.  But it requires you to add 'custom code' to your rule events / triggers.  Not the end of the world, but not the best.

The 2nd approach is to use the ACDL Extension, by Adobe Consulting services.  This enables you to use the GUI to trigger your rule events.  You simply have to identify which AEM event you want to trigger your rule (e.g., cmp:show, cmp:loaded or cmp:click).  

You should know, that neither case supports the AA Extension.  Meaning the Global Variables will not work at all.  You'll have to add all your global variables to your individual rules.  Plus the AA extension custom code section has NO access to the 'event payload' coming in from AEM.  This means if you want to use the AA Extension custom code section you'll have to either reference a Data Element or reference the adobeDataLayer specifically.  PLUS you'll have to add your custom code to the 'doPlugins' section otherwise you'll get inconsistent results in your props and evars.

 

I recommend you use the ACDL extension, as I did find that easier to use.  But unfortunately I was never able to figure out how to use the ACDL Extension to create Data Elements.  I just used custom code to do all that.  For example, to capture the 'dc:title' on a 'cmp:show' event (aka page load event), I used this script

 

try {
if( event && event.message && event.message.eventInfo.path ){
var a = adobeDataLayer.getState(event.message.eventInfo.path);
return a['dc:title'];
}
} catch(err) {}

 

the event - refers to the payload event coming from AEM

the event.message is an object given to you when you implement the ACDL extension

the eventInfo.path is the unique identifier for the AEM component that was associated with the event, in the case of a page load it would be the page component id, in the case of a button click it would be the link component id.

then using the getState method, you can pass the 'eventInfo.path' into the method to access the information about that specific component at that moment in time.

 

As I mentioned earlier and per my own testing, the 'event' data is only available to the rule that gets triggered and the data elements called in that rule.  This is different than other installs.  Normally data elements are refreshed on a page load and don't have to be used to get updated.  With the ACDL, the data elements will NOT update unless they are included in your rule.  I'm still assessing the implications of that for my specific scenarios.

 

I don't have any screenshots and I've just started working with this myself, but I hope that gives you some direction to start with.

Avatar

Community Advisor

@jlinhardt_blueAcorn has provided a good background on ACDL, but some clarifications are needed.

ACDL does not depend on AEM. You can install ACDL independently of the CMS that your website uses. See https://github.com/adobe/adobe-client-data-layer/wiki.

You can create data elements from ACDL data directly in Adobe Launch using the ACDL extension's Data Layer Computed State data element type. The exception is with data that is stored in "eventInfo". In that case, ACDL treats the "eventInfo" object as transient, and so the values in there are not available in the computed state. I.e. if you push this:

adobeDataLayer.push({
  event: "my event",
  eventInfo: {
    category: "foo",
    label: "bar",
  },
  page: {
    name: "my page",
  },
});

Then you can use the ACDL extension's Data Layer Computed State data element type with the page "page.name" and the data element will return "my page". But you cannot create a similar data element for "eventInfo.category", because "eventInfo" is not available in the computed state. If you do need to get "eventInfo.category", then you will need to reference it in the way that @jlinhardt_blueAcorn described, i.e. as %event.message.eventInfo.category% or, if using custom code, then "event.message.eventInfo.category" (don't need to use _satellite.getVar() here).

s.eVar13 = event.message.eventInfo.category;
// don't use _satellite.getVar(), i.e. don't do the following:
// s.eVar13 = _satellite.getVar("event.message.eventInfo.category");

Having said that, if you are using AEM with its ACDL integration, then you'll need to write a lot of your own custom code, because for some reason, that integration makes a lot of use of custom functions that negate the benefits of using the ACDL extension's Data Layer Computed State data element type. (Thanks, Adobe.)

Also, regarding EDDL:

EDDL, or Event-Driven Data Layer, is more like a general term for a data layer (usually a JavaScript array) that responds to pushes to store data, normally for tracking purposes. ACDL is a kind of EDDL, Google Tag Manger's dataLayer is another kind of EDDL.

I had written an answer on a similar topic at https://experienceleaguecommunities.adobe.com/t5/adobe-analytics-questions/hi-can-any-one-help-me-to....

Avatar

Level 3

@yuhuisg 

Thanks so much for adding those clarifications.  Could you also provide an example of how to use the ACDL Extension to create a computed state Data Element for an AEM Core Component?  The examples on the WKND site for example show the component name variable is 'dc:title' for the page.page-2eee4f8914 page component.  

 

I've tried several iterations and I've not been able to figure that out.  What is the correct syntax in the ACDL Extension Computed State input box or the page name?  same goes for a component link name (also referred to as dc:title within the clicked component)?

 

Avatar

Community Advisor

As I had mentioned, the AEM integration is kinda screwed up in that you have to rely on custom code. So you can't take advantage of the ACDL extension's capabilities if you go down that route, unfortunately.

Take a look at the sample code provided at https://experienceleague.adobe.com/docs/experience-manager-learn/sites/integrations/adobe-client-dat...