Итак, я уже некоторое время работаю с 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. Мы будем очень благодарны за любые мысли / помощь по этой теме.

0
Ronald 10 Мар 2015 в 09:49

3 ответа

Лучший ответ

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

string testName = @"Emailcampaign\example_at_gmail_dot_com";

Должны были быть

string testName = @"extranet\example_at_gmail_dot_com";
0
Ronald 11 Мар 2015 в 10:02

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

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

 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
Vicent Galiana 10 Мар 2015 в 11:15

Я пробовал лайкать, и у меня работает:

 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);
     } 
} 
1
Vlad Iobagiu 10 Мар 2015 в 07:36