我有Sitecore.Analytics的问题
从我的xslt,我使用jQuery对web服务进行ajax调用.
在我的网络服务中,我需要注册/保存一些Sitecore.Analytics数据.
问题是我无法使用Sitecore.Analytics.AnalyticsTracker.Current.
那我该怎么做TriggerProfile和TriggerEvent呢?
我想知道Sitecore.Analytics.AnalyticsManager是否可以提供任何帮助.
解决方法
我最近遇到了类似的情况,必须跟踪Web服务中的分析事件.如您所述,问题是AnalyticsTracker.Current在Web服务的上下文中为空.
这样做的原因是在trackAnalytics管道期间填充了AnalytisTracker.Current,而后者又在renderLayout管道中调用,只有在上下文项不为null并且上下文项具有已定义的演示设置时才会调用此管道.
话虽如此,有一个解决方法:)
您可以手动启动AnalyticsTracker,如下所示:
if (!AnalyticsTracker.IsActive) { AnalyticsTracker.StartTracking(); }
然后,您可以检索AnalyticsTracker实例,如下所示:
AnalyticsTracker tracker = AnalyticsTracker.Current; if (tracker == null) return;
最后,您可以创建并触发您的事件,个人资料等…下面的示例会触发一个PageEvent.注意:为了获取Timestamp属性,需要特别考虑PageEvent(以及很可能是其他事件).请参阅以下代码中的注释.
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();
希望这可以帮助!