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

DTM '_satellite.getQueryParam()' is not safe to use, so is there any alternative for DataElement custom code.

Avatar

Level 3

I need to get query param value in Data Element custom JS, I found the following answers.

Adobe DTM Tool library not loaded

Adobe DTM to set query string in eVar and sProp

But the _satellite.getQueryParam() and _satellite.getQueryParamCaseInsensitive() are not safe to use (https://marketing.adobe.com/resources/help/en_US/dtm/object_reference.html), is there any alternative way in DTM to handle this?

1 Accepted Solution

Avatar

Correct answer by
Level 9

Firstly a note. Data Element of type URL Parameter internally uses _satellite.getQueryParam() and _satellite.getQueryParamCaseInsensitive() to look for query parameters. They are "not safe" to use because they aren't officially listed in the documentation for public use. Technically Adobe could make changes to them in the future that may break your code if you use them, and that's on you.

Having said that... code for getting URL parameters are extremely common and straight forward, and in practice, it is unlikely Adobe will ever change them. On top of that, I have heard Adobe has stated that, while they will continue to support DTM in the foreseeable future, they have no intention of doing any more major development on DTM outside of fixing critical bugs if found, in favor of working on Launch.

So, between those two things.. in practice, it's probably okay for you to use them without risk of them getting changed in the future. But if you want to be super safe about it, then follow the link I posted above and put your own function in DTM to use.

.josh

View solution in original post

6 Replies

Avatar

Level 5

Why do you need custom JS for your data element? Can you accomplish this another way?

You could create a simple URL Parameter data element. Then you could use this element in the custom page code of the Adobe Analytics tool itself.

This way you can still use custom JS with the URL query param, without any extra server calls, and without using _satellite.getQueryParam() or _satellite.getQueryParamCaseInsensitive().

If you don't mind additional server calls, or need the data element for something other than Adobe Analytics, you could also use the data element in a page load rule.

Avatar

Level 3

We need to track the external campaign ids. The external campaign ids includes cid, cmp_id,campaign_id etc..

So the query param value should be generated based on any above param name, in this case the simple URL parameter won't work.

Do you have any option to handle this?

Avatar

Level 5

Why are there so many query params for campaign? How many do you have total? If possible I recommend you use only one.

If that's not possible, you could create a unique URL parameter data element for each param name you use. Then use those to populate s.campaign.

Avatar

Level 3

The query param names are configurable depends upon the customer request, it is not possible to create each data element for each query param.

Avatar

Correct answer by
Level 9

Firstly a note. Data Element of type URL Parameter internally uses _satellite.getQueryParam() and _satellite.getQueryParamCaseInsensitive() to look for query parameters. They are "not safe" to use because they aren't officially listed in the documentation for public use. Technically Adobe could make changes to them in the future that may break your code if you use them, and that's on you.

Having said that... code for getting URL parameters are extremely common and straight forward, and in practice, it is unlikely Adobe will ever change them. On top of that, I have heard Adobe has stated that, while they will continue to support DTM in the foreseeable future, they have no intention of doing any more major development on DTM outside of fixing critical bugs if found, in favor of working on Launch.

So, between those two things.. in practice, it's probably okay for you to use them without risk of them getting changed in the future. But if you want to be super safe about it, then follow the link I posted above and put your own function in DTM to use.

.josh

Avatar

Level 5

Do you manage your own AppMeasurement library or is it managed by Adobe?

If you manage it on your end, you may already have s.Util.getQueryParam in there, and it would be safe to use, as you are the one managing this library.