【问题标题】:Multiple Querys context.Load SP O365多个查询上下文。加载 SP O365
【发布时间】:2015-03-29 06:02:42
【问题描述】:

我需要检索很多 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

感谢您的宝贵时间。

【问题讨论】:

    标签: sharepoint office365 sharepoint-online


    【解决方案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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-24
      相关资源
      最近更新 更多