Хранение пользовательских временных данных в Sitecore xDB

Я использую Sitecore 8.1 с включенной xDB (MongoDB). Я хотел бы хранить пользовательские роли посещающих пользователей в xDB, чтобы я мог агрегировать эти данные в своих отчетах. Эти роли могут меняться со временем, поэтому у одного пользователя может быть один набор ролей в какой-то момент времени, а другой набор ролей — позднее.

Я мог бы сохранить эти пользовательские роли как настраиваемые фасеты в объекте Contact, но поскольку они могут меняться для пользователя от посещения к посещению, я потеряю исторические данные, если буду обновлять данные в фасете каждый раз, когда пользователь входит в систему ( fx. Я не смогу сказать, какие роли были у данного пользователя при каком-то заданном посещении).

Вместо этого я мог бы создать пользовательский IElement для своих данных фасета и сохранить роли вместе с отметкой времени, указывающей, когда данные роли были зарегистрированы, но эта модель может быть сложной для обработки на этапе отчетности, когда мне нужно будет подключить взаимодействие данные с ролевыми данными на основе временных меток каждый раз, когда я создаю отчет.

Можно ли хранить эти пользовательские данные в xDB в чем-то еще, кроме коллекции контактов? Могу ли я хранить пользовательские данные в коллекции взаимодействий? Существует свойство под названием Tracker.Current.Session.Interaction.CustomValues, которое звучит как то, что мне нужно, но если я буду хранить данные здесь, смогу ли я выполнить правильную агрегацию/отчетность по данным? Любые другие подходы, о которых я не думал?


person ebug    schedule 27.06.2016    source источник
comment
Дайте мне немного времени, и я рассмотрю, можете ли вы расширить коллекцию взаимодействий и насколько это близко к расширению коллекции контактов.   -  person Jonathan Robbins    schedule 27.06.2016
comment
@ebug Итак, вы пробовали использовать CustomValues вместе с советами из моего ответа?   -  person Dmytro Shevchenko    schedule 29.06.2016
comment
Нет, извините, не было времени проверить. Но похоже вы правы. Я обязательно отдам свой голос, когда он будет протестирован   -  person ebug    schedule 29.06.2016
comment
@ebug Мне просто интересно - вы пришли к какому-нибудь решению, которое будет работать на вас?   -  person Dmytro Shevchenko    schedule 12.09.2016
comment
@DmytroShevchenko Требование, из которого возник мой вопрос, было отклонено нашим клиентом, поэтому у меня не было времени реализовать какие-либо возможные решения. Ваш подход кажется правильным, но у меня нет возможности подтвердить это в данный момент - возможно, когда-нибудь в будущем   -  person ebug    schedule 19.09.2016


Ответы (1)


Пользовательские значения

Да, в вашем случае я бы использовал словарь CustomValues. Этот словарь будет сериализован в MongoDB как вложенный документ каждого взаимодействия (если только словарь не пуст).

Также обратите внимание, что, поскольку CustomValues является членом базового класса Sitecore.Analytics.Model.Entity, этот словарь доступен во многих других классах данных xDB. Например, вы можете хранить пользовательские значения в объектах PageData и PageEventData.

Поскольку CustomValues принимает объект любого класса, вашему пользовательскому классу данных потребуются некоторые дополнительные вещи для его успешного сохранения и последующей загрузки из MongoDB:

  1. Он должен быть помечен как [Serializable].
  2. Его нужно зарегистрировать в драйвере MongoDB следующим образом:

    using Sitecore.Analytics.Data.DataAccess.MongoDb;
    
    // [...]
    
    MongoDbObjectMapper.Instance.RegisterModelExtension<YourCustomClassName>();
    

    Это необходимо сделать только один раз за время жизни приложения — например, в конвейерном процессоре initialize.

Ваше собственное хранилище

Конечно, вам не нужно использовать API Sitecore для хранения ваших пользовательских данных. Таким образом, альтернативой может быть ручное сохранение данных в настраиваемой коллекции MongoDB или в таблице SQL. Затем вы можете прочитать эти данные в своем обработчике агрегации, найдя их по идентификатору обрабатываемого в данный момент взаимодействия.

Преимущество этого подхода заключается в том, что вы сами решаете, где и как хранить ваши данные. Недостатком является дополнительная работа по внедрению и обслуживанию этого хранилища данных.

person Dmytro Shevchenko    schedule 28.06.2016