我在Sitecore的核心数据库中创建了一个自定义用户个人资料模板和对象(根据安全API手册)。
我可以通过编程方式选择(根据安全API手册),以便我的外联网用户拥有扩展的个人资料,涵盖所有常见的嫌疑人(地址,电话,电子邮件格式等)。
但是,这些数据存储在哪里?如果我想查询数据库以根据此配置文件数据返回用户子集,我该如何访问它。
外联网成员系统的典型要求是提取要在电子邮件或电话类型广告系列中联系的用户列表。这可以通过Sitecore会员系统完成吗?
UPDATE> 我将猜测并说配置文件数据存储在aspnet_Profile.PropertyValuesBinary ..这将使它几乎不可能查询,不适合我的目的。那是不幸的。那么为了扩展我的问题,如果是这样的话,是否可以让Sitecore将这些值存储在文本字段中以便可以搜索?
答案 0 :(得分:11)
SqlProfileProvider的标准Microsoft实现(默认情况下在Sitecore中使用)将用户配置文件信息存储在aspnet_Profile表中。所有属性都被序列化到PropertyNames / PropertyValuesString列中。 PropertyValuesBinary用于存储二进制数据(图像)。如果查看System.Web.Profile.SqlProfileProvider,SetPropertyValues方法的代码,可以找到更多详细信息。
接下来,您在用户配置文件中定义的所有自定义属性都被序列化为Profile类的SerializedData属性,并且它再次像其他任何属性一样被序列化到PropertyNames / PropertyValuesString列。
此外,一些属性存储在aspnet_Membership表中(出于某种原因) - 电子邮件和评论。
因此,如果您要通过电子邮件查询用户,则可以使用MembershipProvider的FindUsersByEmail方法。否则,如果您打算按其他属性值进行过滤,我想,您必须获取所有用户并过滤获得的集合。
希望这有帮助。
答案 1 :(得分:5)
上周我遇到了这个确切的问题,没有提出永久解决方案,但为了解决我的特定问题,我写了一个小帮助页面,并将其添加为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
}
这对我的目的来说非常好,但我不知道在你的情况下它会有多可行。