如何在sharepoint 2013中获取大量用户的个人资料

时间:2015-06-28 07:26:06

标签: rest sharepoint sharepoint-2013

我需要通过电子邮件地址,个人资料图片以及可能的电话号码获取用户列表。

最佳选择是将Lists.GetListItemChangesSinceToken请求作为其中一部分,或者在其后面添加一个帐户名称/电子邮件列表的请求。

我尝试了什么:

  • <ExpandUserField>TRUE</ExpandUserField>作为Lists.GetListItemChangesSinceToken的一部分我只获得了一些额外的数据:
    ows_Author="1;#Admin AdminName,#login\name,#emailaddress,#sipaddress,#Admin AdminName" 没有找到任何其他方法来扩展作者字段。
  • 使用搜索API,我可以通过查询得到一个专业用户:
    _api/search/query?sourceid='b09a7990-05ea-4af9-81ef-edfab16c4e31'&querytext='accountname:i:0#.f|membership|admin@company.com'
    我尝试了很多方法来获得多个用户,但我不能:

    • querytext='accountname:or(i:0#.f|membership|admin@company.com i:0#.f|membership|admin2@company.com)'
    • querytext='accountname:any("i:0#.f|membership|admin@company.com", "i:0#.f|membership|admin2@company.com")'
    • querytext='accountname:or(i:0#.f|membership|admin@company.com i:0#.f|membership|admin2@company.com)'&enablefql=true
    • querytext='accountname:or(i:0#.f|membership|admin@company.com i:0#.f|membership|admin2@company.com)'&enablefql=true&enablequeryrules=true

  • 使用带有过滤器的rest api /_api/web/siteusers我有几个用户它返回的数据不够。没有电话号码或个人资料照片。

谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

看起来你在网络服务中找到了答案,但这里有一种替代方法(基于之前的项目在记事本中快速组合在一起,所以可能需要一些改进,但它应该给你一般的想法):

var siteName = "";

using (var site = new SPSite(siteName))
{
    using (var web = site.OpenWeb())
    {
        var serviceContext = SPServiceContext.GetContext(site);
        var userProfileManager = new UserProfileManager(serviceContext);

        var profiles = new List<SPUsersEntity>();

        foreach (UserProfile profile in userProfileManager)
        {
                            profiles.Add(LoadItems( profile.DisplayName,
                                                    profile.AccountName,
                                                    Convert.ToString(currentProfile[PropertyConstants.Title].Value),
                                                    Convert.ToString(currentProfile[PropertyConstants.Department].Value),
                                                    Convert.ToString(currentProfile[PropertyConstants.PictureUrl].Value),
                                                    Convert.ToString(currentProfile[PropertyConstants.Manager].Value),
                                                    Convert.ToString(currentProfile[PropertyConstants.SPSDepartment].Value),
                                                    Convert.ToString(currentProfile[PropertyConstants.WorkEmail].Value) ,
                                                    Convert.ToString(currentProfile[PropertyConstants.WorkPhone].Value)));
    }
    }
}

public SPUsersEntity LoadItems(string name, string username, string title, string department, string pictureURL, string manager, string team, string email, string phone)
{
    var usersEntity = new SPUsersEntity
    {
        Name = name ,
        Username = username ,
        Title = title ,
        Department = department ,
        Picture = pictureURL ,
        Manager = manager ,
        Team = team ,
        Email = email ,
        WorkPhone = phone
    };

    return usersEntity;
}

public class SPUsersEntity
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Username { get; set; }
    public string Manager { get; set; }
    public string Picture { get; set; }
    public string WorkPhone { get; set; }
    public DateTime HireDate { get; set; }
    public DateTime Birthday { get; set; }
    public string Title { get; set; }
    public string Department { get; set; }
    public string Team { get; set; }
    public string Email { get; set; }

}

答案 1 :(得分:0)

好的,所以我尝试了很多选项,完全错过了正确的选择:

_api/search/query?
sourceid='b09a7990-05ea-4af9-81ef-edfab16c4e31'&
querytext='ac‌​‌​countname:i:0#.f|membership|admin@company.com accountname:i:0#.f|membership|admin2@company.com'