2015-03-10 6 views
0

Итак, я уже давно работаю в Sitecore и для отправки электронной почты через e-mailcampaignmanager я создал модуль, который должен загружать определенные элементы на основе полей (заполненных пользователем интересов) в свойствах пользовательского профиля.Получить пользовательские свойства профиля Sitecore

Получение свойств из 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), но ни один из них не работает.

UPDATE

Я забыл упомянуть, что я добавил перегрузку для UserProfile, как показано ниже:

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/шаблоны/система/Безопасность/пользовательский пользователя Любые мысли/помощь по этой теме были бы весьма признательны.

ответ

0

Так Apparantly, даже если домен пользователя в usermanager был «Emailcampaignmanager», мне нужно использовать «экстранет \» - домен.

string testName = @"Emailcampaign\example_at_gmail_dot_com"; 

должен был

string testName = @"extranet\example_at_gmail_dot_com"; 
1

Я пытался, как и это работает для меня:

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); 
    } 
} 
+0

Спасибо за быстрый ответ. Я попробовал это, но это не сработало для меня. Я обновил вопрос, потому что понял, что он не завершен. – Ronald

0

Если вы выполнение кода во время трубопровода отправки бюллетеня, он не будет работать, потому что «безопасность отключена». Я столкнулся с одной и той же проблемой и объяснил ее. here

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

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); 
       } 
      } 
+0

Замечательная заметка! Это будет идея в конце концов, но пока что, чтобы проверить мой код, я хочу получить пользователя на основе имени пользователя, но это тоже не работает. Странно, что мой пользовательский профиль не заполнен. var currentUserCustomProfile = currentUser.Profile как UserProfile; не имеет значений, но когда я проверяю его с тем же пользователем, но из файла Sitecore.Context.User.Profile, он работает. Любые мысли о том, как это возможно. – Ronald

+0

Перемещение var currentuser = ... в использование нового securityenabler возможно? –

+0

Не работает. Как-то мои пользовательские свойства не загружаются (повторно). :( – Ronald

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