SharePoint用户个人资料搜索

时间:2010-01-08 21:25:14

标签: sharepoint-2007 profiles

有没有办法从对象模型中搜索MOSS中的配置文件?我需要搜索在其配置文件中设置了特定值的配置文件,然后为它们执行某些操作。

我需要编写一些可以搜索配置文件数据库并返回匹配配置文件的c#代码。基本上,

配置文件列表=从配置文件存储中选择配置文件属性值= SomeValue

我试图避免以下情况:

 private IEnumerable<UserProfile> SearchProfiles(string value) {
        ServerContext serverContext = ServerContext.GetContext(SPContext.Current.Site);
        UserProfileManager profileManager = new UserProfileManager(serverContext);
        foreach (UserProfile profile in profileManager) {
            if ((string)profile["MyProp"].Value == value) {
                yield return profile;
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

使用FullTextSqlQuery类可以实现:

FullTextSqlQuery q = new FullTextSqlQuery(ServerContext.Current);
q.ResultTypes = ResultType.RelevantResults;
q.QueryText = "SELECT UserName, Email, PreferredName FROM SCOPE() WHERE \"scope\" = 'People' AND Department = 'IT'";

ResultTableCollection tables = q.Execute();
ResultTable results = tables[ResultType.RelevantResults];

此类允许您查询特定范围(即人员)并使用WHERE子句根据属性对其进行过滤,该子句看起来与常规Sql查询基本相同。

为了能够搜索和过滤(自定义)用户配置文件属性,配置文件属性需要在共享服务提供商的元数据设置中具有映射。大多数开箱即用的用户配置文件属性已经具有您必须自己添加的这些自定义属性。

有关托管属性的更多信息here

答案 1 :(得分:0)

两件事:

  1. 使用提升的权限运行时,我们需要在调用中创建一个新的SPSite对象,并从那里加载安全上下文。请勿使用使用SPContext.Current.Site获得的上下文。

    因此:

    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
     using (SPSite site = new SPSite("<your site url>"))
     {
      ServerContext context = ServerContext.GetContext(site);
    
      UserProfileManager profileManager = new
    
      UserProfileManager(context);
    
      foreach (UserProfile profile in profileManager)
      {
       // your code
      }
     }
    }
    
  2. 确保应用程序池帐户在SSP中具有适当的用户权限。即(使用个人功能,管理用户个人资料)