我遇到Sitecore.Analytics
从我的xslt,我使用jQuery对web服务进行ajax调用。
在我的网络服务中,我需要注册/保存一些Sitecore.Analytics
数据。
问题是我无法使用Sitecore.Analytics.AnalyticsTracker.Current
。
那我该怎么做TriggerProfile
和TriggerEvent
?
我想知道Sitecore.Analytics.AnalyticsManager
是否有任何帮助。
答案 0 :(得分:9)
我最近在网络服务中跟踪分析事件时遇到了类似的情况。如您所述,问题是AnalyticsTracker.Current
在Web服务的上下文中为空。
原因是在AnalytisTracker.Current
管道期间填充trackAnalytics
,而renderLayout
管道又在AnalyticsTracker
管道中调用,仅在上下文项不为空时才会调用并且上下文项定义了演示设置。
据说,有一种解决方法:)
您可以手动启动if (!AnalyticsTracker.IsActive)
{
AnalyticsTracker.StartTracking();
}
:
AnalyticsTracker
然后您可以检索AnalyticsTracker tracker = AnalyticsTracker.Current;
if (tracker == null)
return;
实例,如下所示:
PageEvent
最后,您可以创建并触发您的活动,个人资料等...以下示例会触发PageEvent
。注意:为了填充Timestamp
属性,需要特别考虑if (!AnalyticsTracker.IsActive)
{
AnalyticsTracker.StartTracking();
}
AnalyticsTracker tracker = AnalyticsTracker.Current;
if (tracker == null)
return;
string data = HttpContext.Current.Request.UrlReferrer != null
? HttpContext.Current.Request.UrlReferrer.PathAndQuery
: string.Empty;
//Need to set a context item in order for the AnalyticsPageEvent.Timestamp property to
//be set. As a hack, just set the context item to a known item before declaring the event,
//then set the context item to null afterwards.
Sitecore.Context.Item = Sitecore.Context.Database.GetItem("/sitecore");
AnalyticsPageEvent pageEvent = new AnalyticsPageEvent();
pageEvent.Name = "Download Registration Form Submitted";
pageEvent.Key = HttpContext.Current.Request.RawUrl;
pageEvent.Text = HttpContext.Current.Request.RawUrl;
pageEvent.Data = data;
//Set the AnalyticsPageEvent.Item property to null and the context item to null.
//This way the PageEvent isn't tied to the item you specified as the context item.
pageEvent.Item = null;
Sitecore.Context.Item = null;
tracker.CurrentPage.TriggerEvent(pageEvent);
tracker.Submit();
(以及很可能是其他事件)。请参阅以下代码中的注释。
{{1}}
希望这有帮助!
答案 1 :(得分:3)
我只想添加一条额外的评论来分享我的经验。如果您有一个POST RESTful服务调用,您在其中实现注册Page Events的方法,确保使用Chrome的简单REST客户端扩展而不是Fiddler来发送POST请求。我遇到了一个使用Fiddler来调用POST RESTful服务的情况,代码执行正常,但我没有在页面事件表中看到任何条目(问题我认为可能与浏览器会话有关)。< / p>
对于DMS 2.0,我在StackOverflow上发表了类似的文章并编写了以下内容来注册该事件。
void TriggerPageEvent(string eventName)
{
if (!Tracker.IsActive)
{
Tracker.StartTracking();
}
Sitecore.Data.Database db = Sitecore.Configuration.Factory.GetDatabase("web");
Sitecore.Context.Item = db.GetItem("/sitecore");
PageEventData pageEventData = new PageEventData(eventName);
pageEventData.Text = "Value is here";
pageEventData.DataKey = String.Empty;
pageEventData.Data = " Data is here";
pageEventData.ItemId = new Guid(Cms.Context.Item.ID.ToString());
Tracker.CurrentPage.Register(pageEventData);
Tracker.Submit();
}
答案 2 :(得分:1)
如果要注册页面事件/目标并使用自定义处理程序从ajax / jquery请求获取数据,请确保您的处理程序的位置是否适合分析。这意味着,如果您的处理程序位于,例如在/mylocation/myhandlers/myhandler.ashx中,您需要实现下一步,将此字符串添加到您的配置文件中:
<site name="your_name" virtualFolder="/mylocation/myhandlers" physicalFolder="/mylocation/myhandlers" enableAnalytics="true" domain="sitecore" database="master" patch:before="site[@name='website']" />
应该有所帮助。如您所见,在这种情况下,您的分析已启用。
答案 3 :(得分:1)
确保将属性/值[WebMethod(EnableSession = true)]
包含在WebMethod
中,这样可以正常使用。