I have a problem with Sitecore.Analytics
From my xslt, I do an ajax call to a webservice using jQuery.
In my webservice I need to register/save some Sitecore.Analytics
data.
The problem is that I can't use Sitecore.Analytics.AnalyticsTracker.Current
.
So how do I do TriggerProfile
and TriggerEvent
?
I wonder if Sitecore.Analytics.AnalyticsManager
could be to any help.
I recently encountered a similar scenario in having to track an analytics event within a webservice. As you noted, the problem is that
AnalyticsTracker.Current
is null within the context of a webservice.The reason for this is that
AnalytisTracker.Current
is populated during thetrackAnalytics
pipeline, which in turn is invoked during therenderLayout
pipeline, which is only invoked if the context item is not null and the context item has presentation settings defined.With that said, there is a workaround :)
You can start the
AnalyticsTracker
manually like so:You can then retrieve an
AnalyticsTracker
instance like so:And finally, you can create and trigger your event, profile, etc... The example below triggers a
PageEvent
. Note: there is a special consideration to be made for aPageEvent
(and most likely other events) in order to get theTimestamp
property populated. See the comments in the code below.Hope this helps!
If you want to register page event/goal and you use your custom handler to get data from ajax/jquery request, please be sure if your location for the handler an appropriate for the analytic. It means, if your handler is located, for example in /mylocation/myhandlers/myhandler.ashx you need to implement next, add this string to your config file:
It should help. As you can see, in this case, your analytic is enabled.
I just like to add an extra comment to share my experience. In case you have a POST RESTful service call in which you implement the method to register Page Events, make sure to use Simple REST client extension of Chrome instead of Fiddler for sending the POST request . I ran into a situation where I was using Fiddler to call POST RESTful service, the code was executing fine, but I did not see any entry in the Page Events Table (Problem I think could have been associated to the browser session maybe).
For DMS 2.0, I followed similar article on StackOverflow and wrote the following to register the event.
Make sure to include the attribute/value
[WebMethod(EnableSession = true)]
to yourWebMethod
, and this will work correctly.