2015-09-29 2 views
5

Я надеюсь, что здесь я не получил неправильный конец палочки (как всегда, документация на сидячие места горькая!)Могу ли я получить доступ к граничной стороне ситцера после разрыва сеанса?

Мне нужен способ хранения информации против посетителя, я достаточно новичок в сиквете , но решение contact facets seemed the ideal, в значительной степени реализовано слово в слово по ссылке выше, пока оно не попало в производство, я был очень доволен им. Когда я сохранил информацию, она сохранилась, я мог бы ее прочитать:

public IMpmVisitorFacet GetMpmVisitorFacet() 
{ 
    return _contact.GetFacet<IMpmVisitorFacet>(_MPMVisitorConfigName); 
} 

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

Проблема заключается в том, что данные просто не сохраняются долго. Если я помещу некоторую информацию в фасет, она будет стоять около часа или около того (я могу закрыть браузер, посмотреть на другие сайты и т. Д. И т. Д.), И я смогу получить к нему доступ, но после «количества время "это просто все уходит.

После пересматривал документы (есть я уже говорил, что они не очень хорошо) я заметил нюанс в предложении, что я не видел раньше:

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

Держись, я думал, что это постоянное хранилище ?! Таким образом, в примере показан некоторый код для чтения «facet».

var contact = Tracker.Current.Contact; 
var data = contact.GetFacet<IEmployeeData>("Employee Data"); 
data.EmployeeId = "ABC123"; 
..... 
<p>Employee data contact facet updated.</p> 
<p>Contact ID: <b><%=contact.ContactId.ToString()%></b></p> 
<p>Employee #: <b><%=data.EmployeeId%></b></p> 

Но этот грань, кажется, существует только на короткий период времени. Затем он продолжает:

Из соображений производительности Sitecore только записывает контактные данные в XDB, когда сеанс ends.This означает, что, если я смотрю в MongoDB ...

тогда продолжает показывать данные в новой блестящей модной реализации mongoDb. Но что использовать в монго, если я не могу на самом деле получить доступ к этой информации и использовать ее!

Таким образом возникает вопрос, как мне получить доступ к этой контактной информации после прекращения сеанса?

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

Есть несколько других документов, которые поговорите о доступе к этим данным в experience profile, до index into Lucene и in the Experience platform (почему есть два продукта с почти одинаковым именем ?!), но нечего сказать, как получить доступ к этой информации на самом веб-сайте в коде.


Чтобы добавить к комментариям по Dmytro Shevchenko:

  • Я могу видеть мой пользователь в «профиле опыта» и я могу видеть мои посещения на сайт.
  • Я знаю, что у этого пользователя была моя дополнительная информация о фасете, потому что он вызвал некоторый код.
  • я могу найти пользователь (от идентификаторов вынимают из строки запроса в странице профиля опыта) в Монго Db
  • Но когда я смотрю на пользователе в MongoDB дополнительной информация не существует.
  • некоторые из контактных записей имеют эти данные, но другие не

Так что, как представляется, проблема с написанием новой информации в Монго ... Кто-нибудь есть какая-либо помощь или подобный опыт это?

+1

* «Как получить доступ к этой контактной информации после завершения сеанса?» * - вам нужно получить доступ к контакту со своими гранями * вне * веб-сессии (например, из фоновой службы)? Или вам нужно получить доступ к грани контакта в новом веб-сеансе одного и того же контакта? –

+0

Новая веб-сессия того же контакта – Liam

+3

В этом случае данные должны быть там. Вы уверены, что это тот же самый точный контакт, с которым вы работаете в другой веб-сессии? Проверьте «ContactID». –

ответ

2

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

Документация sitecore кажется (как обычно) полностью пропустить довольно фундаментальную часть работы. Около трети way down the docs it states:

public EmployeeData() 
{ 
    base.EnsureAttribute<string>(FIELD_EMPLOYEE_ID); 
} 

Метод «EnsureAttribute» является эквивалентом объявления переменного в значении типа.


Хорошо, это вводит в заблуждение. Кажется, что это EnsureAttribute загружает данные для фасета в текущий класс из mongo. Если вы не делаете этого для , то каждое свойство в вашем фасете, то оно не устанавливает значение из mongoDb! Это была моя ошибка, я не «обеспечил» каждую собственность в классе.

Так что происходит это,

  • Я положил данные в фаской
  • данные фаска сохраняется в сессии, и я могу видеть, доступ к нему изменить его, и т.д..
  • Данные в конечном счете сбрасываться на Монго (XDB, если вы должны)
  • возвращается пользователем, система распознает их правильно (нет необходимости идентифицировать пользователя, то SC_ANALYTICS_GLOBAL_COOKIE делает это для вас)
  • Но он не загружает данные (из монго и обратно в сеанс), если вы не «обеспечите» его.

Так EnsureAttribute не «объявить тип значения» (это просто совершенно неправильно, на мой взгляд) он загружает данные из MongoDB и в текущий Session.

0

Я думаю, что здесь вам не хватает шага, так как метод Tracker.Current.Session.Identify() идентифицирует известный контакт. Данные в Tracker api продолжаются только для текущего сеанса, и вам нужно загрузить контакт в сеанс.

Реализация xDB основана на контакте, идентифицирующем себя при посещении сайта, путем входа в систему или регистрации, например.

После того как вы вошли в систему, вы можете использовать уникальный идентификатор, например адрес электронной почты, и передать его методу идентификации - Tracker.Current.Session.Identify("Email Address of the visitor").

Как только вы вызвали этот метод, если пользователь идентифицировал себя ранее, контактные данные будут загружены в текущий сеанс, и любая существующая информация фасета будет доступна в Tracker Api.

+0

Но у меня нет ни одного пользователя info на данный момент, они анонимный пользователь. Данные существуют, но, похоже, не смываются в экземпляр mongo. Я не понимаю, как это помогает? – Liam

+0

Можете ли вы объяснить * Реализация xDB зависит от контакта, идентифицирующего себя при посещении сайта *? Где в документации это сказано? Это, похоже, не связано с комментариями от @Dmytro (выше) или всего, что я читал об этом на веб-сайте sitecore? – Liam

0

Ваша проблема связана с тем, как вы потянете контакт: Если вы находитесь в запросе страницы, вы должны получить доступ к текущему контакту через Tracker.Current.Contact. Ваш код не находится в запросе страницы, но у пользователя может быть живая сессия, используйте ContactManager с описанными выше методами. Если контакт сейчас не в прямом эфире, вы должны использовать ContactRepository. См. Пример использования здесь. Код со значением https://sitecore.stackexchange.com/questions/3319/why-are-custom-xdb-facets-being-overwritten-on-session-end ответил (а) Дмитрий Шевченко.

 Смежные вопросы

  • Нет связанных вопросов^_^