我对Sitecore Analytics和用户个人资料密钥有疑问。我需要能够获得单个页面的配置文件密钥的分数。例如,如果我有一个名为“traveler”的配置文件密钥,在给定页面上的值可能为1-10,我需要能够获取内容作者分配的该密钥的值。我发现使用以下内容:
Sitecore.Analytics.AnalyticsTracker.Current.Data.Profiles.GetProfile("Profile Name").GetProfileKeyValue("traveler")
我可以获得用户在整个会话期间累积的总分,但我似乎找不到只为当前页面获得分数的方法。
任何人都可以提供的任何见解将不胜感激。感谢。
答案 0 :(得分:2)
经过一些研究,我发现它在每个项目的__Tracking
字段中存储为XML字符串。使用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
进行处理,就像正常
答案 1 :(得分:2)
我知道这篇文章相当陈旧,但是对于未来的参考文献,Sitecore已经发生了很多变化。 我不知道2010年是否可行,但至少在2013年有一些API方法可以提取页面的跟踪值。
我绝不会建议手动解析__Tracking字段中的原始数据。
以下是使用Sitecore Analytics API阅读角色资料的跟踪数据的方法:
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