2011-02-25 65 views
7

触发器的配置文件和事件我有Sitecore.AnalyticsSitecore的分析:从web服务

从我的XSLT一个问题,我做使用jQuery一个Web服务调用Ajax。

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

那么我该怎么做TriggerProfileTriggerEvent? 我不知道Sitecore.Analytics.AnalyticsManager可以帮到你。

回答

9

我最近遇到类似的情况,需要跟踪web服务中的分析事件。如您所述,问题是AnalyticsTracker.Current在web服务的上下文中为空。

这样做的原因是,AnalytisTracker.CurrenttrackAnalytics管道,这又将renderLayout管道,这如果上下文项不为空,并从上下文项目具有定义演示设置时才会激活过程中被调用时填充。

随着中说,有一种变通方法:)

您可以手动启动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(); 

希望这会有所帮助!

+0

谢谢你。你是救世主:-) – gorhal 2011-03-10 14:35:40

+0

好的回答亚当:) – 2011-12-05 17:47:13

3

我只是想添加额外的评论来分享我的经验。如果您有一个POST RESTful服务调用,其中您实现了注册页面事件的方法请确保使用Chrome的简单REST客户端扩展而不是Fiddler发送POST请求。我遇到了使用Fiddler调用POST RESTful服务的情况,代码运行正常,但我在页面事件表中看不到任何条目(问题我认为可能与浏览器会话关联)。

对于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(); 
} 
1

如果你想注册页面事件/目标,你用你的自定义处理程序来获取阿贾克斯/ 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']" /> 

它应该帮助。如您所见,在这种情况下,您的分析功能已启用。

1

确保将属性/值[WebMethod(EnableSession = true)]添加到您的WebMethod,这将正常工作。