3

更新:所以问题是我的应用程序 Global.asax.cs 不是从 Sitecore.Web.Application 派生的。

所以我刚刚安装了带有 MongoDB 2.6.11 的 Sitecore 8。

出于测试目的,我将下面的代码放在页面加载事件中,以激活我之前在 sitecore 中创建的目标。

通过部署和发布成功创建了目标。我还确认了目标的项目 ID 是正确的。

    if (Sitecore.Analytics.Tracker.IsActive && Sitecore.Analytics.Tracker.Current.CurrentPage != null)
    {
       Sitecore.Data.Items.Item GoaltoTrigger = Sitecore.Context.Database.GetItem("{EDA8EA2C-7AF5-4D0F-AF76-A9C4E6BD7169}");
       if (GoaltoTrigger != null)
       {
           Sitecore.Analytics.Data.Items.PageEventItem registerthegoal = new Sitecore.Analytics.Data.Items.PageEventItem(GoaltoTrigger);
           Sitecore.Analytics.Model.PageEventData eventData = Sitecore.Analytics.Tracker.Current.CurrentPage.Register(registerthegoal);
           eventData.Data = GoaltoTrigger["Description"];
           Sitecore.Analytics.Tracker.Current.Interaction.AcceptModifications();
       }
    }
    Session.Abandon();

遗憾的是,这不起作用,我在交互下看不到 xDB 中的目标。

我调查的其他事情是我的布局肯定有标签

<sc:VisitorIdentification runat="server" />

我的 Global.asax 实现 Sitecore.Web.Application

public class Global : Sitecore.Web.Application

然而没有运气。在 Mongo 中找不到交互(使用 mongo shell 和 roboMongo 查找集合)。我还缺少其他东西吗?

在此处输入图像描述

在此处输入图像描述

Sitecore 错误

ManagedPoolThread #3 16:43:00 INFO  Job ended: Sitecore.ListManagement.Analytics.UnlockContactListsAgent (units processed: )
12980 16:43:05 INFO  Cache created: '[no name]' (max size: 976KB, running total: 2918MB)
12980 16:43:05 INFO  Cache created: '[no name]' (max size: 976KB, running total: 2919MB)
12980 16:43:05 INFO  Cache created: '[no name]' (max size: 976KB, running total: 2920MB)
12980 16:43:05 INFO  Cache created: '[no name]' (max size: 976KB, running total: 2921MB)
12980 16:43:05 INFO  Cache created: '[no name]' (max size: 976KB, running total: 2922MB)
ManagedPoolThread #5 16:43:06 ERROR Failed to perform MaxMind lookup
ManagedPoolThread #5 16:43:06 ERROR Failed to perform GeoIp lookup for 127.0.0.1
Exception: Sitecore.Analytics.Lookups.CannotParseResponseException
Message: Unexpected format. Cannot parse the MaxMind response for IP address: 127.0.0.1

Source: Sitecore.Analytics
   at Sitecore.Analytics.Lookups.MaxMindProvider.GetInformationByIp(String ip)
   at Sitecore.Analytics.Lookups.GeoIpManager.GetDataFromLookupProvider(GeoIpHandle geoIpHandle)

12980 16:43:08 INFO  Cache created: 'WebUtil.QueryStringCache' (max size: 19KB, running total: 2922MB)
2700 16:43:08 INFO  HttpModule is being initialized
12360 16:43:08 INFO  HttpModule is being initialized
7068 16:43:08 INFO  HttpModule is being initialized
9940 16:43:10 INFO  [Experience Analytics]: Reduce agent found zero segments to process
ManagedPoolThread #1 16:43:10 INFO  Job started: Sitecore.ListManagement.Analytics.UnlockContactListsAgent
ManagedPoolThread #1 16:43:10 INFO  Job ended: Sitecore.ListManagement.Analytics.UnlockContactListsAgent (units processed: )
4

1 回答 1

11

触发目标

首先,这是触发目标的正确方法:

if (Sitecore.Analytics.Tracker.IsActive)
{
    if (Sitecore.Analytics.Tracker.Current.CurrentPage != null)
    {
        var goalId = new Sitecore.Data.ID("{EDA8EA2C-7AF5-4D0F-AF76-A9C4E6BD7169}");

        Sitecore.Analytics.Data.Items.PageEventItem goalToTrigger =
            Sitecore.Analytics.Tracker.DefinitionItems.PageEvents[goalId];

        if (goalToTrigger != null)
        {
            Sitecore.Analytics.Model.PageEventData eventData =
                Sitecore.Analytics.Tracker.Current.CurrentPage.Register(goalToTrigger);
        }
        else
        {
            Sitecore.Diagnostics.Log.Error("Goal with ID " + goalId + " does not exist", this);
        }
    }
    else
    {
        Sitecore.Diagnostics.Log.Error("Tracker.Current.CurrentPage is null", this);
    }
}
else
{
    Sitecore.Diagnostics.Log.Warn("The tracker is not active. Unable to register the goal.", this);
}

您不应在注册后尝试更改事件数据。

此外,您不应该调用Interaction.AcceptModifications(),因为此方法是 xDB 在某些时候在内部使用的方法。

CurrentPage.Register()是您唯一需要做的事情。

结束会话

我不建议使用Session.Abandon(). 它可能会导致将您的交互保存到集合数据库,但这样会破坏 Sitecore 会话的正常流程。这可能导致的问题之一是交互的联系人将保持锁定 21 分钟(或任何会话超时设置为 + 1 分钟)。

相反,出于测试目的,我建议您将会话超时设置为 1 分钟,然后在最后一个页面请求后等待 1 分钟。此设置位于Web.config中,作为<sessionState>.

交互保存问题疑难解答

  1. 确保analytics连接字符串设置正确。
  2. 确保您拥有 xDB 的许可证。您可以在 Sitecore 控制面板 -> 管理 -> 已安装的许可证中查看可用许可证列表。
    a) 在 Sitecore 8.0 或更低版本中,许可证名称为Sitecore.OMS.
    b) 在 Sitecore 8.1 中,它是Sitecore.xDB.base.
  3. 确保已启用 xDB 及其跟踪子系统。
    a) 在 Sitecore 8.0 或更低版本中,Analytics.EnabledtrueSitecore.Analytics.config中设置为。
    b) 在 Sitecore 8.1 中,两者Xdb.EnabledXdb.Tracking.Enabled都应trueSitecore.Xdb.config中设置为。
  4. 还应在站点定义上启用跟踪。
    a) 在 Sitecore 8.0 或更低版本中,转到Web.config<sites>中的部分检查未设置为on或您正在使用的任何站点。 b) 在 Sitecore 8.1 中,您应确保在 Sitecore.config为您的站点设置为。enableAnalyticsfalse<site name="website">
    enableTrackingtrue
  5. 在让会话过期之前尝试发出多个页面请求,而不是只发出一个请求。
  6. 尝试通过在Sitecore.Analytics.Tracking.configAnalytics.Robots.IgnoreRobots中同时设置和Analytics.AutoDetectBots来禁用机器人检测。如果在此之后保存了交互,我将使用进一步的说明更新我的答案。false
  7. 如果没有任何帮助,请执行文章对 xDB 数据问题进行故障排除中列出的步骤。
于 2015-12-04T09:40:48.380 回答