Sitecore Custom User Profile - где он хранится, как его можно запросить - PullRequest
13 голосов
/ 23 февраля 2010

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

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

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

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

UPDATE> Я собираюсь сделать предположение и сказать, что данные профиля хранятся в aspnet_Profile.PropertyValuesBinary .., что делает его почти невозможным для запроса и не подходит для моей цели. Это неудачно. Итак, чтобы расширить мой вопрос, если это так, возможно ли заставить Sitecore хранить эти значения в текстовом поле, чтобы они были доступны для поиска?

Ответы [ 2 ]

11 голосов
/ 23 февраля 2010

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

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

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

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

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

5 голосов
/ 23 февраля 2010

Я столкнулся с этой проблемой на прошлой неделе, не придумав постоянного решения, но для решения своей конкретной проблемы я написал небольшую вспомогательную страницу и добавил ее в качестве приложения 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
}

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

...