【问题标题】:Sharepoint Client - list all usersSharepoint 客户端 - 列出所有用户
【发布时间】:2021-03-28 00:02:06
【问题描述】:

我需要在 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;
        }
    }
}

这是我的代码的输出。你可以看到“Engineer 10”没有列出来

【问题讨论】:

    标签: sharepoint csom


    【解决方案1】:

    在您的代码中,您从网站集中获取用户。如果用户未添加到网站集中,则无法检索。

    实际上,用户来自AD。如果您配置了用户配置文件服务,则用户信息将存储在 UPS 中。因此,您可以尝试从 UPS 获取所有用户。

    【讨论】:

    • 你能给我更多的细节吗?我必须使用 Microsoft.SharePoint.Client.UserProfile 和 peoplemanager 吗?这不需要每个用户的凭据吗?
    猜你喜欢
    • 2012-11-12
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 2014-02-28
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多