【问题标题】:Sitecore Analytics: Trigger profiles and events from webserviceSitecore Analytics:从 Web 服务触发配置文件和事件
【发布时间】:2011-02-25 13:52:32
【问题描述】:

Sitecore.Analytics 有问题

在我的 xslt 中,我使用 jQuery 对 Web 服务进行 ajax 调用。

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

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

【问题讨论】:

    标签: sitecore


    【解决方案1】:

    我最近遇到了一个类似的情况,必须在 Web 服务中跟踪分析事件。正如您所指出的,问题在于 AnalyticsTracker.Current 在 Web 服务的上下文中为空。

    原因是AnalytisTracker.Current 是在trackAnalytics 管道期间填充的,而renderLayout 管道期间又会调用该管道,该管道仅在上下文项不为空且上下文项具有演示文稿时调用设置已定义。

    话虽如此,有一个解决方法:)

    您可以像这样手动启动AnalyticsTracker

    if (!AnalyticsTracker.IsActive)
    {
        AnalyticsTracker.StartTracking();
    }
    

    然后您可以像这样检索AnalyticsTracker 实例:

    AnalyticsTracker tracker = AnalyticsTracker.Current;
    if (tracker == null)
        return;
    

    最后,您可以创建和触发您的事件、个人资料等...下面的示例触发PageEvent。注意:为了填充Timestamp 属性,需要特别考虑PageEvent(以及最有可能的其他事件)。请参阅下面代码中的 cmets。

    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();
    

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      我只想添加一个额外的评论来分享我的经验。如果您有一个 POST RESTful 服务调用,您在其中实现了注册页面事件的方法, 确保使用 Chrome 的 Simple 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();
      }
      

      【讨论】:

        【解决方案3】:

        如果您想注册页面事件/目标并使用自定义处理程序从 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']" />
        

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

        【讨论】:

          【解决方案4】:

          确保在您的WebMethod 中包含属性/值[WebMethod(EnableSession = true)],这样可以正常工作。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-13
            • 2011-02-26
            • 1970-01-01
            • 2011-01-03
            • 1970-01-01
            相关资源
            最近更新 更多