获取 Sitecore 自定义配置文件属性
Get Sitecore Custom Profile Properties
所以我已经使用 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用户
任何关于此主题的 thoughts/help 都将不胜感激。
我试过了,它对我有用:
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);
}
}
如果您在发送时事通讯管道期间执行您的代码,它将无法工作,因为 "security is disabled"。我遇到了同样的问题并解释了它 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);
}
}
很明显,即使用户管理器中的用户域是 "Emailcampaignmanager",我也需要使用 "extranet\" 域。
string testName = @"Emailcampaign\example_at_gmail_dot_com";
应该是
string testName = @"extranet\example_at_gmail_dot_com";
所以我已经使用 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用户 任何关于此主题的 thoughts/help 都将不胜感激。
我试过了,它对我有用:
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);
}
}
如果您在发送时事通讯管道期间执行您的代码,它将无法工作,因为 "security is disabled"。我遇到了同样的问题并解释了它 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);
}
}
很明显,即使用户管理器中的用户域是 "Emailcampaignmanager",我也需要使用 "extranet\" 域。
string testName = @"Emailcampaign\example_at_gmail_dot_com";
应该是
string testName = @"extranet\example_at_gmail_dot_com";