我一直在查询经理的所有直接报告:
var users = activeDirectoryClient.Users
.Expand(x => x.DirectReports)
.Where(d => d.ObjectId == objectId);
var foundUsers = users.ExecuteAsync().Result;
foreach (var foundUser in foundUsers.CurrentPage)
{
IUser user = foundUser as User;
int directReportsCount = user.DirectReports.CurrentPage.Count; // 19
// ...
Console.WriteLine(user.DirectReports.MorePagesAvailable); // false
}
我刚刚发现这些结果不完整。我看到一个Manager有31个直接报告的情况,但我的代码只返回19.此外,DirectReports.MorePagesAvailable
是false
。
如果我单独查询未包含在直接报告集合中的其他用户并展开其管理器,我可以看到管理器是预期的管理器,因此Azure AD图中存在正确的关系。
然后,我尝试使用我关心的经理查询所有用户,但以下代码无效:
var users = activeDirectoryClient.Users
.Where(d => d.Manager.ObjectId == objectId);
我收到以下错误:
System.ArgumentNullException:'值不能为null。 参数名称:key'
使用 Microsoft.Azure.ActiveDirectory.GraphClient 查询用户的所有直接下属报告的正确方法是什么?
答案 0 :(得分:1)
我看到一个Manager有31个直接报告的情况,但我的代码只返回19.
根据代码,您从ObjectId等于objectId
的用户检索直接下属。请确保用户是您提到的经理。
使用Microsoft.Azure.ActiveDirectory.GraphClient查询用户的所有直接报告的正确方法是什么?
Azure AD Graph使用分页功能也是如此。与上面的代码一样,我们应该检查MorePagesAvailable
属性并使用GetNextPageAsync()
获取下一页。
这是一段代码,通过分页结果打印来自经理的直接报告。您可以将managerId
替换为该经理的objectId:
public void PrintDirectReports()
{
String managerId="";
int pageSize=2;
ActiveDirectoryClient client = GraphHelper.CreateGraphClient();
int pageIndex = 1;
var directoryRecports = client.Users[managerId].DirectReports.Take(pageSize).ExecuteAsync().Result;
Console.WriteLine($"Page{pageIndex++}:");
foreach (var report in directoryRecports.CurrentPage)
{
Console.WriteLine(report.ObjectId);
}
while (directoryRecports.MorePagesAvailable)
{
Console.WriteLine($"Page{pageIndex++}:");
directoryRecports = directoryRecports.GetNextPageAsync().Result;
foreach (var report in directoryRecports.CurrentPage)
{
Console.WriteLine(report.ObjectId);
}
}
}