问题描述
我需要在 WPF 网格中列出 SharePoint 2019 域的所有用户。 我知道如何列出给定网站集的用户,但如何列出所有用户?
例如,用户“工程师 10”不是“销售”网站集的用户,但是,我希望能够列出他在 SharePoint“邀请人员”窗口中显示的内容
这是我的代码
XAML
<Window xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp7"
xmlns:System="clr-namespace:System;assembly=mscorlib" x:Class="MainWindow"
mc:Ignorable="d"
Title="MainWindow" Height="800" Width="250" WindowStartupLocation="CenterScreen" WindowStyle="ToolWindow">
<Grid>
<DataGrid x:Name="Grid" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn x:Name="COL_ID" Header="ID" Width="*" Binding="{Binding [0]}"/>
<DataGridTextColumn x:Name="COL_NAME" Header="USER" Width="*" Binding="{Binding [1]}"/>
<DataGridTextColumn x:Name="COL_EMAIL" Header="E-mail" Width="*" Binding="{Binding [2]}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
C#
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualBasic;
using SP = Microsoft.SharePoint.Client;
class MainWindow
{
public void LoadGrid()
{
List<object[]> Userlist = new List<object[]>();
Userlist.Clear();
Grid.ItemsSource = null;
Grid.Items.Clear();
SP.ClientContext ClientContext = new SP.ClientContext("http://dc/Sites/Sales/");
SP.Web Website = ClientContext.Web;
SP.UserCollection Users = ClientContext.Site.RootWeb.SiteUsers;
SP.Web root = ClientContext.Site.RootWeb;
ClientContext.Load(root);
ClientContext.Load(Users);
ClientContext.ExecuteQuery();
foreach (var us in Users)
{
ClientContext.Load(us);
ClientContext.ExecuteQuery();
Userlist.Add(new User(us.Id,us.Title,us.Email).Fields);
}
Grid.ItemsSource = Userlist;
ClientContext.dispose();
}
private void MainWindow_Loaded(object sender,RoutedEventArgs e)
{
LoadGrid();
}
}
public class User
{
public User(idin,namein,Emailin)
{
Values(0) = idin;
Values(1) = namein;
Values(2) = Emailin;
}
public object[] Fields = new object[4];
public object Values
{
get
{
return Fields[test_number];
}
set
{
Fields[test_number] = Value;
}
}
}
解决方法
在您的代码中,您从网站集中获取用户。如果用户未添加到网站集中,则无法检索它们。
实际上,用户来自AD。如果您配置了用户配置文件服务,则用户信息将存储在 UPS 中。因此,您可以尝试从 UPS 获取所有用户。