Пользовательский Профиль пользователя Sitecore - где это хранится, как это может быть запрошено

Я создал пользовательский шаблон Профиля пользователя и объект в базовой базе данных в Sitecore (согласно Поваренной книге API безопасности).

Я могу выбрать это программно (согласно Поваренной книге API безопасности) так, чтобы у моих пользователей экстранет был расширенный профиль, который покрывает всех обычных подозреваемых (Адрес, телефон, почтовый формат и т.д.)

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

Типичное требование для членской системы экстранет состоит в том, чтобы извлечь список пользователей для контакта или в электронном письме или в кампании типа телефона. Это может быть сделано с системой членства в Sitecore?

ОБНОВЛЕНИЕ> я собираюсь взять предположение и сказать, что данные профиля хранятся в aspnet_Profile. PropertyValuesBinary.. который сделал бы его почти на невозможном для запросов и не подходящий для моей цели. Это неудачно. Таким образом для расширения моего вопроса, если это так, действительно ли возможно заставить Sitecore хранить те значения в текстовом поле, таким образом, они доступны для поиска?

13
задан misteraidan 23 February 2010 в 03:09
поделиться

2 ответа

Стандартная реализация Microsoft SqlProfileProvider (которая по умолчанию используется в Sitecore) сохраняет информацию профиля пользователя в таблице aspnet_Profile. Все свойства сериализованы в столбцы PropertyNames / PropertyValuesString. PropertyValuesBinary используется для хранения двоичных данных (изображений). Вы можете найти более подробную информацию, если посмотрите код метода System.Web.Profile.SqlProfileProvider, SetPropertyValues.

Затем все настраиваемые свойства, которые вы определяете в профиле пользователя, сериализуются в свойство SerializedData класса Profile, и оно снова сериализуется в столбцы PropertyNames / PropertyValuesString, как любое другое свойство.

Кроме того, несколько свойств хранятся в таблице aspnet_Membership (по какой-то причине) - электронная почта и комментарий.

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

Надеюсь, это поможет.

11
ответ дан 2 December 2019 в 00:03
поделиться

Я столкнулся с этой конкретной проблемой на прошлой неделе, не нашел постоянного решения, но для решения моей конкретной проблемы я написал небольшую вспомогательную страницу и добавил ее как приложение Sitecore для доступа из интерфейса CMS. Все, что он делал, это опрашивал всех пользователей и определял, назначены ли им какие-либо из 5-6 свойств профиля.

var userList = Sitecore.Security.Accounts.UserManager.GetUsers();

Это соответствующая строка для захвата пользователей, она возвращает Sitecore.Common.IFilterable

Поэтому, если вам нужно сделать что-то, где вы собираете информацию профиля от всех пользователей, вы можете сделать что-то вроде этого:

foreach (Sitecore.Security.Accounts.User user in userList)
{
    Sitecore.Security.UserProfile profile = user.Profile;
    string whatever = profile["Whatever"];
    //add whatever to a list or something
}

Это сработало очень хорошо для моих целей, но я не знаю, насколько это возможно в вашей ситуации.

5
ответ дан 2 December 2019 в 00:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: