多个查询context.Load SP O365

时间:2015-03-27 18:22:43

标签: sharepoint office365 sharepoint-online

我需要检索很多User PersonProperties,我想知道是否可以一起加载它。

例如:

var userList = web.SiteUserInfoList.GetItems(CamlQuery.CreateAllItemsQuery());
clientContext.Load(userList);
clientContext.ExecuteQuery();

PeopleManager pm = new PeopleManager(clientContext);
List<PersonProperties> users = new List<PersonProperties>();

 foreach (ListItem u in userList)
 {
      var personProperties = pm.GetPropertiesFor(u.FieldValues["Name"].ToString());
      users.Add(personProperties);
 }

 clientContext.Load(users); //load all users[i].UserProfileProperties and PictureUrl
 clientContext.ExecuteQuery();

我的应用是ProviderHosted,适用于SharePoint Online 2013

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

由于SharePoint CSOM支持Request Batching,您可以利用此功能并考虑以下示例,演示如何向服务器提交两个请求,以便:

  • 检索网站用户
  • 检索网站用户的个人资料属性

示例:

    //1.Load site users
    var siteUsers = ctx.Web.SiteUsers;
    ctx.Load(siteUsers);
    ctx.ExecuteQuery();
    //2.Load user profile properties for site users
    var pm = new PeopleManager(ctx);
    var results = new Dictionary<string,PersonProperties>();
    foreach (var siteUser in siteUsers)
    {
         var personProperties = pm.GetPropertiesFor(siteUser.LoginName);
         ctx.Load(personProperties);
         results.Add(siteUser.LoginName,personProperties);
    }
    ctx.ExecuteQuery();

用法

foreach (var result in results)
{
     var userLoginName = result.Key;
     var userProperties = result.Value;
     Console.WriteLine("{0} ({1})",userLoginName, userProperties.Email);
}