Получите ключевую оценку профиля для отдельной страницы в Sitecore

У меня есть вопрос относительно Sitecore Analytics и ключей профилей пользователей. Мне нужно иметь возможность получить оценку ключа профиля для отдельной страницы. Например, если у меня есть ключ профиля под названием «путешественник», который может иметь значение от 1 до 10 на данной странице, мне нужно иметь возможность получить значение для этого ключа, назначенное автором контента. Я обнаружил это, используя следующее:

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

Я могу получить общую оценку, которую пользователь набрал за сеанс, но не могу найти способ получить оценку только для текущей страницы.

Любое понимание, которое кто-либо мог бы предложить, было бы очень признательно. Спасибо.


person Jimmy    schedule 15.10.2010    source источник


Ответы (2)


Я знаю, что этот пост довольно старый, но для будущих ссылок в Sitecore многое изменилось. Я не знаю, было ли это возможно в 2010 году, но по крайней мере в 2013 году есть методы API для извлечения значений отслеживания страницы.

Я бы никогда не рекомендовал вручную анализировать необработанные данные в поле __Tracking.

Вот как можно прочитать данные отслеживания для профиля пользователя с помощью API Sitecore Analytics:

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

С наилучшими пожеланиями Лассе Раш

person Lasse Rasch    schedule 28.12.2013
comment
Согласитесь с этим, когда вы смотрите на поле __Tracking одного элемента или ограниченного набора. Однако бывают случаи, когда я считаю, что ручной анализ необходим. Недавно мне нужно было перебрать более 50 элементов и работать с полем __Tracking каждого. Время загрузки страницы значительно увеличилось (6 или 7 секунд). Небольшое профилирование показало, что виновником было создание экземпляра класса TrackingField. Ручной разбор поля сократил время загрузки до ~300 мс. Кажется, у TrackingField довольно много накладных расходов. Тем не менее, я бы выступал за ручной разбор только в случае крайней необходимости. - person Martin Davies; 29.12.2013

После некоторых исследований я обнаружил, что это хранится в виде строки 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 как обычно.

person Jimmy    schedule 20.10.2010