Sitecore Analytics:从Web服务触发配置文件和事件

时间:2011-02-25 13:52:33

标签: sitecore

我遇到Sitecore.Analytics

的问题

从我的xslt,我使用jQuery对web服务进行ajax调用。

在我的网络服务中,我需要注册/保存一些Sitecore.Analytics数据。 问题是我无法使用Sitecore.Analytics.AnalyticsTracker.Current

那我该怎么做TriggerProfileTriggerEvent? 我想知道Sitecore.Analytics.AnalyticsManager是否有任何帮助。

4 个答案:

答案 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中,这样可以正常使用。