Expand my Community achievements bar.

SOLVED

How to use two plugins in single rule (or) single data element from Adobe Launch (Data Collection)

Avatar

Level 2

Hi Everyone,

Just want to check with you guys, I was wondering how to use two plugins with the single rule via custom script (or) Data element via (custom) to track both the campaign (getQueryParam) and Get Value Once (getValOnce).

For Example: Let say I am running a campaign where user reach to my page with "cid?=test" for the first time after that on the subsequent call if user reach to the same campaign within 30 days I don't want to track and get/pushthe value to any variables. If the user visit on the same campaign within 30 days, then we use getValOnce plugin to block the track for the specific duration.

Hope you understand my case.

Kindly help me if you have any reference links to fix this.

Vijay

 

 

1 Accepted Solution

Avatar

Correct answer by
Community Advisor

Ok so once thing to understand is that when Adobe first introduced Adobe Analytics or SiteCatalyst as it used to be known there were no tag management system or event common utility functions across Adobe products. In order to palliate this issue, Adobe Consulting created several utility plugins that relied on method used in core Adobe analytics library to write and read cookies for example. That is why in most instances the plugins were scoped to s object.

 

Having said that, it is a misconception that you need  to use Adobe plugins to do what you need. You can write it yourself or you can also use Adobe Launch functionalities to do the same.

 

The default data element functionalities should allow you to do same outcome as some of the plugins:

 

For the plugin getQueryParam you can simply use this data element type:

Query string parameter

Specify a single URL parameter in the URL Parameter field.

Only the name section is necessary and any special designators like “?” or “=” should be omitted

 

Now for getValOnce you can use the latest version of plugin. I checked it and there is one reference to c_r from Adobe Analytics that creates an issue but replacing it by cookieRead function fixes it just fine. Will report the issue to Adobe for a fix.

 

So in code you will see: 

return e&&(k=k||"s_gvo",l=l||0,m="m"===m?6E4:864E5,e!==this.c_r(k))?(c=new Date,c.setTime(c.getTime()+l*m),cookieWrite(k,e,0===l?0:m),e):""};

 

replace this by

 

return e&&(k=k||"s_gvo",l=l||0,m="m"===m?6E4:864E5,e!==cookieRead(k))?(c=new Date,c.setTime(c.getTime()+l*m),cookieWrite(k,e,0===l?0:m),e):""};

 

And that should work without Adobe Analytics core library, I tested on a site without Adobe Launch and analytics and it works just fine.

 

 

Spoiler
What I want to highlight is that plugins should not be scoped to one of your adobe or third party product. It should be written in a way that it is usable by all.

So to use this solution what I would do it as follow:

 

  1. Create one data element to return query params
    • Create a data element with Extension Core and Data Element type Query String Parameter
    • Now for URL Query String parameter field add cin
  2. Create a data element which will deploy modified plugin code and return the value
    • Create a data element with Extension Core and Data Element type Custom Code
    • Paste the modified plugin code.
    • After the plugin code add line return getValOnce(event.value, event.name, event.duration)
  3. Either create another data element to return your campaign value or use it directly in custom code as follow:
//we consider that campaign query param data element is name paramCid
//we consider that custom getValOnce is named getOnce
_satellite.getVar('getOnce', {value: _satellite.getVar('paramCid'), name: "test", duration: 30})

//On first run it should return query param if exist
//On second run with same query param value in next 30 days it should not return anything

Here you have a solution that does not depend on adobe analytics AppMeasurement and you can reuse getOnce data element to get value once for other values. Hope this helps

 

Warning: 

I have noticed that getValOnce will return the value each time if the value is a number. The current plugin does exact evaluation to value and type needs to be the same and as cookie always return a string when it does let say 123 !== '123' it returns false... so 123 will always be returned.

View solution in original post

7 Replies

Avatar

Community Advisor

Hi @Vijayakumar_Raju_CBE 

For this scenario - I would suggest to use custom code approach in the actions part of the rule and with using the Analytics extensions set variable action type that allows you to set additional variables on the tracker. In custom code you can use doPlugins function which contains both getQueryParam and getValOnce plugins like below. 

 

s.usePlugins = true; 

s.doPlugins = function () {
/* Desired code */ 
s.campaign = getQueryParam("cmp")
s.campaign = getValOnce(s.campaign,"cmp",30); 
} 

/* Plugin Section - Add plugin code here*/ 
s.getValOnce = function ()
s.getQueryParam = function()

 

Just for your info

If you only have simple query string parameter needs, Adobe recommends using the URL parameter features using tags in Adobe Experience Platform or the Util.getQueryParam() method included in AppMeasurement.

 

The doPluginsvariable acts as a ‘last call’ to set values in your implementation. If usePlugins is enabled, it automatically runs just before any type of image request is compiled and sent to Adobe, including:

  • All page view (t()) calls
  • All link tracking (tl()) calls, including automatic download links and exit links

Use the doPlugins variable to call plug-in code and set final variable values just before an image request is compiled and sent to Adobe.

 

Hope this helps. 

Hi @Gokul_Agiwal,

Thanks for your quick response, sorry for not mentioned earlier query but this (s.usePlugins = true;) which is from AppMeasurement.

Since we moving to use AEP extension without using the legacy (AppMeasurement) or Adobe Analytics extension in the launch. In this case probably we use to go with custom code to map both the plugins in a single element to accommodate the above mentioned requirement. I would like to understand more on how to use those two new plugins (not legacy one) to get the values as expected.

Thanks again for all your information.

Regards,

Vijay

Avatar

Community Advisor

@Vijayakumar_Raju_CBE , not sure what you mean by "legacy" plugins, but @Gokul_Agiwal's answer is the way to go. One suggestion I'd make is to use his code inside your Adobe Analytics extension's custom code, not inside a "Set Variables" action's custom code. By setting it in the extension's custom code, then the code will run with every beacon, so you're guaranteed to get the expected output regardless of which Rule got fired.

Avatar

Level 2

Hi @yuhuisg,

Legacy means (Old Plugins s.getValOnce/s.getQueryParam) which we usually used in AppMeasurement.js (or) Adobe Analytics extension (custom code) . Now we are using the new syntax without "s" from the beginning of the code (getValOnce/getQueryParam) . As I already described, I am not going to use Adobe Analytics Extension (custom code) or AppMeasurement.js file. Since we are going to use only AEP approach extension, where we use to combine those two plugin into one data element and mapped to XDM schema.

But I am still wondering it is not working as expected especially for this two plugins combined case/scenario . Anyway thanks for you information, let me create a ticket with adobe support team to sort out this issue then.

Regards,

Vijay

Avatar

Community Advisor

It is not working as expected because those plugins are meant to be used with Adobe Analytics only, either with its extension or AppMeasurement.js.

If you want to use AEP's Web SDK with XDM schema, then you will need to "rewrite" these plugins by yourself to make them work.

Avatar

Community Advisor

Hi @Vijayakumar_Raju_CBE 

 

Agree with @yuhuisg what he said. If you're using AEP web sdk extension then you need to write your own. 

Avatar

Correct answer by
Community Advisor

Ok so once thing to understand is that when Adobe first introduced Adobe Analytics or SiteCatalyst as it used to be known there were no tag management system or event common utility functions across Adobe products. In order to palliate this issue, Adobe Consulting created several utility plugins that relied on method used in core Adobe analytics library to write and read cookies for example. That is why in most instances the plugins were scoped to s object.

 

Having said that, it is a misconception that you need  to use Adobe plugins to do what you need. You can write it yourself or you can also use Adobe Launch functionalities to do the same.

 

The default data element functionalities should allow you to do same outcome as some of the plugins:

 

For the plugin getQueryParam you can simply use this data element type:

Query string parameter

Specify a single URL parameter in the URL Parameter field.

Only the name section is necessary and any special designators like “?” or “=” should be omitted

 

Now for getValOnce you can use the latest version of plugin. I checked it and there is one reference to c_r from Adobe Analytics that creates an issue but replacing it by cookieRead function fixes it just fine. Will report the issue to Adobe for a fix.

 

So in code you will see: 

return e&&(k=k||"s_gvo",l=l||0,m="m"===m?6E4:864E5,e!==this.c_r(k))?(c=new Date,c.setTime(c.getTime()+l*m),cookieWrite(k,e,0===l?0:m),e):""};

 

replace this by

 

return e&&(k=k||"s_gvo",l=l||0,m="m"===m?6E4:864E5,e!==cookieRead(k))?(c=new Date,c.setTime(c.getTime()+l*m),cookieWrite(k,e,0===l?0:m),e):""};

 

And that should work without Adobe Analytics core library, I tested on a site without Adobe Launch and analytics and it works just fine.

 

 

Spoiler
What I want to highlight is that plugins should not be scoped to one of your adobe or third party product. It should be written in a way that it is usable by all.

So to use this solution what I would do it as follow:

 

  1. Create one data element to return query params
    • Create a data element with Extension Core and Data Element type Query String Parameter
    • Now for URL Query String parameter field add cin
  2. Create a data element which will deploy modified plugin code and return the value
    • Create a data element with Extension Core and Data Element type Custom Code
    • Paste the modified plugin code.
    • After the plugin code add line return getValOnce(event.value, event.name, event.duration)
  3. Either create another data element to return your campaign value or use it directly in custom code as follow:
//we consider that campaign query param data element is name paramCid
//we consider that custom getValOnce is named getOnce
_satellite.getVar('getOnce', {value: _satellite.getVar('paramCid'), name: "test", duration: 30})

//On first run it should return query param if exist
//On second run with same query param value in next 30 days it should not return anything

Here you have a solution that does not depend on adobe analytics AppMeasurement and you can reuse getOnce data element to get value once for other values. Hope this helps

 

Warning: 

I have noticed that getValOnce will return the value each time if the value is a number. The current plugin does exact evaluation to value and type needs to be the same and as cookie always return a string when it does let say 123 !== '123' it returns false... so 123 will always be returned.