Итак, я уже некоторое время работаю с Sitecore, и для отправки электронной почты через e-mailcampaignmanager я установил модуль, который должен загружать определенные элементы на основе полей (заполненных пользователем интересов) в свойствах настраиваемого профиля.
Получение свойств из Sitecore.Context.User.Profile
отлично работает (поэтому, когда я вхожу в систему как пользователь, это работает), но когда я пытаюсь получить его как var currentUser = Sitecore.Security.Accounts.User.FromName(Request["ec_recipient"], true);
(или заменяя Request ["ec_recipient"] на существующее имя пользователя), все мои настраиваемые свойства не имеют значения. Я пробовал currentUser.Profile.Reload()
и currentUser.Profile.Initialize("username", true)
, но ни один из них не работает.
ОБНОВИТЬ
Я забыл упомянуть, что добавил перегрузку для профиля пользователя, как показано ниже:
public class UserProfile : Sitecore.Security.UserProfile
{
/// <summary>
/// Gets or sets the interests.
/// </summary>
/// <value>
/// The interests.
/// </value>
public IList<ID> Interests
{
get
{
return string.IsNullOrWhiteSpace(this.interests)
? new List<ID>()
: this.interests
.Split(',')
.Where(ID.IsID)
.Select(g => new ID(g))
.ToList();
}
set
{
this.interests= string.Join(",", value.Select(g => g.ToString()));
}
}
/// <summary>
/// Gets or sets backingfield for the interests.
/// </summary>
/// <value>
/// The sectors.
/// </value>
private string interests
{
get
{
return this.GetCustomProperty("Interests");
}
set
{
this.SetCustomProperty("Interests", value);
}
}
}
Кроме того, я пробовал следующее (как упоминалось в комментариях, с пустой строкой в результате)
var interests = new List<ID>();
using (new SecurityEnabler())
{
var currentUser = Sitecore.Security.Accounts.User.FromName(username, true);
using (new Sitecore.Security.Accounts.UserSwitcher(currentUser))
{
var userprofile = Sitecore.Context.User.Profile as UserProfile;
interests.AddRange(userprofile.Interests);
}
}
Пользовательский профиль пользователя определен в основной базе данных в: / sitecore / templates / System / Security / Custom User. Мы будем очень благодарны за любые мысли / помощь по этой теме.
3 ответа
Итак, очевидно, даже при том, что домен пользователя в usermanager был «Emailcampaignmanager», мне нужно было использовать «extranet» - домен.
string testName = @"Emailcampaign\example_at_gmail_dot_com";
Должны были быть
string testName = @"extranet\example_at_gmail_dot_com";
Если вы выполняете свой код во время конвейера рассылки информационных бюллетеней, он не будет работать, потому что «безопасность отключена». У меня возникла та же проблема, и я объяснил это здесь
Вам необходимо снова включить безопасность, чтобы иметь возможность проводить проверки. Это могло быть что-то вроде этого:
string testName = @"Emailcampaign\example_at_gmail_dot_com";
//Request["ec_recipient"]
var currentUser = Sitecore.Security.Accounts.User.FromName(testName, true);
var interests = new List<ID>();
using (new SecurityEnabler())
{
using (new Sitecore.Security.Accounts.UserSwitcher(currentUser))
{
var w = currentUser.Profile.GetCustomProperty("Sectors");
var currentUserCustomProfile = currentUser.Profile as UserProfile;
currentUserCustomProfile.Initialize(testName, true);
currentUserCustomProfile.Reload();
interests.AddRange(currentUserCustomProfile.Interests);
}
}
Я пробовал лайкать, и у меня работает:
string domainUser = @"domain\user";
if (Sitecore.Security.Accounts.User.Exists(domainUser))
{
Sitecore.Security.Accounts.User user =
Sitecore.Security.Accounts.User.FromName(domainUser,false);
using (new Sitecore.Security.Accounts.UserSwitcher(user))
{
var property=user.Profile.GetCustomProperty("propertyname);
}
}
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.