How to test getVisitNum | Community
Skip to main content
Level 3
August 22, 2024
Solved

How to test getVisitNum

  • August 22, 2024
  • 2 replies
  • 2373 views

Need to store getVisitNum in an event for this i followed below steps

 

1. copied getVisitNum plug-in code and pasted in adobe analytics extension -> custom code editor

2. created new data element (Session count)--> custom code --> add code return getVisitNum()

3. in Rule --> event8 = Session count

 

testing - 

 

event8 = undefined

 

guid me how to impliment and test getVisitNum

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by bjoern__koth

is your analytics / AppMeasurement "s" instance globally accessible?

 

The problem you are likely facing is that throwing the function in the Analytics custom code will not necessarily attach it to the "s" object.

 

https://experienceleague.adobe.com/en/docs/analytics/implementation/vars/plugins/getvisitnum

 

If you take the code from there, you can see

 

Since you are trying to access the function from a custom code javascript data element, this will be unreachable unless

a) you define it as function on the "s" object OR

 

 

s.getVisitNum = function(rp,erp){...

 

 

and call is through s.getVisitNum()

b) define it as window scoped function (this case does not need a globally accesible "s" tracker object)

 

window.getVisitNum = function(rp,erp){...

 

and call it through window.getVisitNum()

 

If you really do not want to use the extension (which I would recommend), I would likely go for option b)

2 replies

bjoern__koth
Community Advisor and Adobe Champion
Community Advisor and Adobe Champion
August 22, 2024

Hi @reddy_y-11 

are you using Adobe Launch? If so, you do not need to copy the plugin code, but can use "Common Analytics Plugins" extension. This will make sure to always keep the plugin versions up to date (as long as you keep the extension up to date).

Note: You must initialize the right plugin in a rule that loads as soon as the library is loaded

 

After that, you will be able to get the visit number through the data element

 

Hope that helps

 

 

Cheers from Switzerland!
Level 3
August 22, 2024

Thanks! @bjoern__koth  for the reply

 

Note - not using the extension.

 

Adobe launch - Implimented through custom code in adobe analytics.

 

How can impliment?

 

 

bjoern__koth
Community Advisor and Adobe Champion
bjoern__kothCommunity Advisor and Adobe ChampionAccepted solution
Community Advisor and Adobe Champion
August 22, 2024

is your analytics / AppMeasurement "s" instance globally accessible?

 

The problem you are likely facing is that throwing the function in the Analytics custom code will not necessarily attach it to the "s" object.

 

https://experienceleague.adobe.com/en/docs/analytics/implementation/vars/plugins/getvisitnum

 

If you take the code from there, you can see

 

Since you are trying to access the function from a custom code javascript data element, this will be unreachable unless

a) you define it as function on the "s" object OR

 

 

s.getVisitNum = function(rp,erp){...

 

 

and call is through s.getVisitNum()

b) define it as window scoped function (this case does not need a globally accesible "s" tracker object)

 

window.getVisitNum = function(rp,erp){...

 

and call it through window.getVisitNum()

 

If you really do not want to use the extension (which I would recommend), I would likely go for option b)

Cheers from Switzerland!
Jennifer_Dungan
Community Advisor and Adobe Champion
Community Advisor and Adobe Champion
August 22, 2024

I don't believe that Data Elements can interact with the s object...

 

I believe that both the extension code, and the setting of your event must be done in the custom code area using the "Do Plugins".

 

 

s.usePlugins = true; function s_doPlugins(s) { // typically this is collected as a dimension: s.prop1 = getVisitNum(); // but if you need to track as a numeric event, which I think is not going to work quite right, since your event count will just keep grow exponentially, you would have to append it to the end of your existing event list, so you don't overwrite it.... s.events = s.events ? s.events + ",event8=" + getVisitNum() : "event8=" + getVisitNum(); } /******************************************* BEGIN CODE TO DEPLOY *******************************************/ /* Adobe Consulting Plugin: getVisitNum v4.2 */ function getVisitNum(rp,erp){var a=rp,l=erp;function m(c){return isNaN(c)?!1:(parseFloat(c)|0)===parseFloat(c)}function n(c){var b=new Date,e=isNaN(c)?0:Math.floor(c);b.setHours(23);b.setMinutes(59);b.setSeconds(59);"w"===c&&(e=6-b.getDay());if("m"===c){e=b.getMonth()+1;var a=b.getFullYear();e=(new Date(a?a:1970,e?e:1,0)).getDate()-b.getDate()}b.setDate(b.getDate()+e);"y"===c&&(b.setMonth(11),b.setDate(31));return b}if("-v"===a)return{plugin:"getVisitNum",version:"4.2"};var f=function(){if("undefined"!==typeof window.s_c_il)for(var c=0,b;c<window.s_c_il.length;c++)if(b=window.s_c_il[c],b._c&&"s_c"===b._c)return b}();"undefined"!==typeof f&&(f.contextData.getVisitNum="4.2");window.cookieWrite=window.cookieWrite||function(c,b,e){if("string"===typeof c){var a=window.location.hostname,d=window.location.hostname.split(".").length-1;if(a&&!/^[0-9.]+$/.test(a)){d=2<d?d:2;var h=a.lastIndexOf(".");if(0<=h){for(;0<=h&&1<d;)h=a.lastIndexOf(".",h-1),d--;h=0<h?a.substring(h):a}}g=h;b="undefined"!==typeof b?""+b:"";if(e||""===b)if(""===b&&(e=-60),"number"===typeof e){var f=new Date;f.setTime(f.getTime()+6E4*e)}else f=e;return c&&(document.cookie=encodeURIComponent(c)+"="+encodeURIComponent(b)+"; path=/;"+(e?" expires="+f.toUTCString()+";":"")+(g?" domain="+g+";":""),"undefined"!==typeof window.cookieRead)?window.cookieRead(c)===b:!1}};window.cookieRead=window.cookieRead||function(c){if("string"===typeof c)c=encodeURIComponent(c);else return"";var b=" "+document.cookie,a=b.indexOf(" "+c+"="),d=0>a?a:b.indexOf(";",a);return(c=0>a?"":decodeURIComponent(b.substring(a+2+c.length,0>d?b.length:d)))?c:""};a=a?a:365;l="undefined"!==typeof l?!!l:m(a)?!0:!1;var p=(new Date).getTime();f=n(a);if(window.cookieRead("s_vnc"+a))var d=window.cookieRead("s_vnc"+a).split("&vn="),k=d[1];if(window.cookieRead("s_ivc"))return k?(window.cookieWrite("s_ivc",!0,30),k):"unknown visit number";if("undefined"!==typeof k)return k++,d=l&&m(a)?p+864E5*a:d[0],f.setTime(d),window.cookieWrite("s_vnc"+a,d+"&vn="+k,f),window.cookieWrite("s_ivc",!0,30),k;d=m(a)?p+864E5*a:n(a).getTime();window.cookieWrite("s_vnc"+a,d+"&vn=1",f);window.cookieWrite("s_ivc",!0,30);return"1"}; /******************************************** END CODE TO DEPLOY ********************************************/

(Note: the event code checks if there is anything in events, if so it will append event8 to the end of that list, if there is nothing, then it will set s.events (without the separation comma)

 

Keep in mind, that this won't get the user's full Visit Number, this is merely code that sets a cookie and tracks the visits as of that cookie... if the cookie is removed, the values will reset... and right now, JS cookies like this tend to be flaky with all the "anti-cookie" stuff that browsers are doing... particularly JS set cookies vs cookies set by a server (which still have a little more authority....).

Jennifer_Dungan
Community Advisor and Adobe Champion
Community Advisor and Adobe Champion
August 22, 2024

You can also access the s object within the Set Variables action, so if you don't want to use Do Plugins, you can set your event in your Rule, in the custom code area of your AA Set Variables....

bjoern__koth
Community Advisor and Adobe Champion
Community Advisor and Adobe Champion
August 22, 2024

It really depends on how it is approached and where you place the code.
I would definitely go for the extension and included data element type, then there is no discussion 😂

Cheers from Switzerland!