Sharepoint 2013 Utility.SearchPrincipals不返回任何结果

Sharepoint 2013 Utility.SearchPrincipals不返回任何结果,sharepoint-2013,Sharepoint 2013,我正在编写一个提供商托管的SharePoint 2013应用程序。我正在使用SharePoint online 因为在这个场景中不支持人员选择器,所以我需要构建自己的。我找到了方法。这似乎正是我要寻找的,但无论我尝试什么,该方法返回的结果都是0 我在这个方法中发现的少量信息表明,问题通常是权限问题,但我作为网站集管理员登录的用户(ClientContext.Web.CurrentUser.IsSiteAdmin为true),所以我不应该这样 我尝试了传递PrincipalType和Princip

我正在编写一个提供商托管的SharePoint 2013应用程序。我正在使用SharePoint online

因为在这个场景中不支持人员选择器,所以我需要构建自己的。我找到了方法。这似乎正是我要寻找的,但无论我尝试什么,该方法返回的结果都是0

我在这个方法中发现的少量信息表明,问题通常是权限问题,但我作为网站集管理员登录的用户(
ClientContext.Web.CurrentUser.IsSiteAdmin
true
),所以我不应该这样

我尝试了传递
PrincipalType
PrincipalSource
的几乎所有组合,即使是没有意义的组合。我还尝试为作用域传入
ClientContext.Web.SiteUsers
,以及
null
,我在搜索中看到了这两种方法,但也没有找到任何结果


任何帮助都将不胜感激

我明白了。CSOM(客户端对象模型)的
ClientContext
允许开发人员进行多个不相关的查询。它对这些查询进行排队,并在调用
ExecuteQuery
之前不执行它们。即使
SearchPrincipals
实用程序
类之外的静态方法,它仍然将方法调用转换为查询并将其排队。该方法将始终返回一个空集合,但一旦在
ClientContext
上调用
ExecuteQuery
,该集合将被搜索结果填充

另外,我随后立即遇到的另一个问题是,当我调用
ExecuteQuery
时,我遇到了一个似乎与我的查询完全无关的错误。事实证明,以前执行的代码将一些查询排入队列,但它从未执行过这些查询,因此当我调用
ExecuteQuery
时,它也执行了这些查询,其中之一就是出错。如果遇到意外错误,最好查看是否还有其他排队查询尚未执行。您可以检查布尔属性
HasPendingRequest
,以帮助确定这一点

希望这个答案能为其他人节省很多时间