3

我对 Sitecore Analytics 和用户配置文件密钥有疑问。我需要能够获得单个页面的配置文件密钥的分数。例如,如果我有一个名为“traveler”的配置文件键,它在给定页面上的值可能为 1-10,我需要能够获取内容作者分配的该键的值。我发现通过使用以下内容:

Sitecore.Analytics.AnalyticsTracker.Current.Data.Profiles.GetProfile("Profile Name").GetProfileKeyValue("traveler")

我可以获得用户在整个会话期间累积的总分,但我似乎无法找到仅针对当前页面获取分数的方法。

任何人都可以提供的任何见解将不胜感激。谢谢。

4

2 回答 2

2

经过一番研究,我发现这是作为 XML 字符串存储__Tracking在每个项目上调用的字段中的。它可以像任何其他数据字段一样使用Fields集合进行访问。例如:

Item itemToCheck = Sitecore.Context.Database.GetItem("/path to item/");
string trackingXml = itemToCheck.Fields["__Tracking"].ToString();

字符串中的 XML 结构如下:

<tracking>
    <profile name="profile1">
        <key name="key1" value="1" />
        <key name="key2" value="10" />
    </profile>
    <profile name="profile2">
        <key name="key3" value="12" />
        <key name="key4" value="4" />
    </profile>
</tracking>

可以将此字符串转换为XmlDocument并使用SelectNodes正常处理

于 2010-10-20T14:44:30.533 回答
2

我知道这篇文章相当陈旧,但为了将来的参考,Sitecore 已经发生了很大变化。我不知道这在 2010 年是否可行,但至少在 2013 年有用于提取页面跟踪值的 API 方法。

我绝不建议手动解析 __Tracking 字段中的原始数据。

以下是使用 Sitecore Analytics API 读取 Persona Profile 跟踪数据的方法:

public static string ProfileValues(this Item item)
{
        StringBuilder sb = new StringBuilder();

        TrackingField trackingField = new TrackingField(item.Fields[Constants.Sitecore.FieldIDs.Tracking]);
        ContentProfile profile = trackingField.Profiles.FirstOrDefault(profileData =>
                                profileData.Name.Equals("Persona") && profileData.IsSavedInField);

        ContentProfileKeyData[] profileKeys = profile.Keys;

        foreach (ContentProfileKeyData profileKey in profileKeys)
        {
            sb.AppendLine(string.Format("{0}:{1};", profileKey.Name, profileKey.Value));
        }
        return sb.ToString();
    }

最好的问候 Lasse Rasch

于 2013-12-28T20:34:12.403 回答