Практическое руководство. Работа с пользователями и группами
Дата последнего изменения: 29 апреля 2011 г.
Применимо к: SharePoint Foundation 2010
В этой статье
Извлечение всех пользователей из группы SharePoint
Извлечение определенных свойств пользователей
Извлечение всех пользователей во всех группах в семействе веб-сайтов
Добавление пользователя в группу SharePoint
Доступно на сайте SharePoint Online
Логическая схема, применяемая к веб-сайтам, спискам и элементам списков в пространстве имен Microsoft.SharePoint.Client (JavaScript: SP), используется и для пользователей и групп. Объект CreationInformation, как и другие объекты в данном пространстве имен, можно использовать для создания объекта пользователя или группы.
Извлечение всех пользователей из группы SharePoint
Свойство SiteGroups (JavaScript: siteGroups) класса Web (JavaScript: Web) возвращает все группы со всех веб-сайтов в семействе веб-сайтов. Как показано в следующем примере, метод GetById(Int32) (JavaScript: getById(id)) можно использовать для возвращения определенной группы из коллекции групп. Свойство Users (JavaScript: users) класса Group (JavaScript: Group) возвращает всех пользователей в группе. Поскольку в следующем примере пользователи загружаются в определенную группу, доступны все свойства каждого из объектов пользователя.
using System;
using Microsoft.SharePoint.Client;
namespace Microsoft.SDK.SharePointServices.Samples
{
class RetrieveAllUsersInGroup
{
static void Main()
{
ClientContext clientContext = new ClientContext("http://MyServer/sites/MySiteCollection");
GroupCollection collGroup = clientContext.Web.SiteGroups;
Group oGroup = collGroup.GetById(7);
UserCollection collUser = oGroup.Users;
clientContext.Load(collUser);
clientContext.ExecuteQuery();
foreach (User oUser in collUser)
{
Console.WriteLine("User: {0} ID: {1} Email: {2} Login Name: {3}",
oUser.Title, oUser.Id, oUser.Email, oUser.LoginName);
}
}
}
}
Imports System
Imports Microsoft.SharePoint.Client
Namespace Microsoft.SDK.SharePointServices.Samples
Class RetrieveAllUsersInGroup
Shared Sub Main()
Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"
Dim collGroup As GroupCollection = clientContext.Web.SiteGroups
Dim oGroup As Group = collGroup.GetById(7)
Dim collUser As UserCollection = oGroup.Users
clientContext.Load(collUser)
clientContext.ExecuteQuery()
Dim oUser As User
For Each oUser In collUser
Console.WriteLine("User: {0} ID: {1} Email: {2} Login Name: {3}", _
oUser.Title, oUser.Id, oUser.Email, oUser.LoginName)
Next oUser
End Sub
End Class
End Namespace
var siteUrl = '/sites/MySiteCollection ';
function retrieveAllUsersInGroup() {
var clientContext = new SP.ClientContext(siteUrl);
var collGroup = clientContext.get_web().get_siteGroups();
var oGroup = collGroup.getById(7);
this.collUser = oGroup.get_users();
clientContext.load(collUser);
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded() {
var userInfo = '';
var userEnumerator = collUser.getEnumerator();
while (userEnumerator.moveNext()) {
var oUser = userEnumerator.get_current();
this.userInfo += '\nUser: ' + oUser.get_title() +
'\nID: ' + oUser.get_id() +
'\nEmail: ' + oUser.get_email() +
'\nLogin Name: ' + oUser.get_loginName();
}
alert(userInfo);
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
Извлечение определенных свойств пользователей
В следующем примере выполняется изменение предыдущего примера, чтобы возвратить только заголовок и адрес электронной почты каждого из пользователей в определенной группе. В этом примере метод Include<TSource>(IQueryable<TSource>, []) (JavaScript: оператор Include) позволяет указать, что для каждого объекта пользователя доступны только свойства Title (JavaScript: title) и Email (JavaScript: email), а при вызове других свойств возвращается PropertyOrFieldNotInitializedException.
using System;
using Microsoft.SharePoint.Client;
namespace Microsoft.SDK.SharePointServices.Samples
{
class RetrieveSpecificUserProperties
{
static void Main()
{
ClientContext clientContext = new ClientContext("http://MyServer/sites/MySiteCollection");
GroupCollection collGroup = clientContext.Web.SiteGroups;
Group oGroup = collGroup.GetById(7);
UserCollection collUser = oGroup.Users;
clientContext.Load(collUser,
users => users.Include(
user => user.Title,
user => user.LoginName,
user => user.Email));
clientContext.ExecuteQuery();
foreach (User oUser in collUser)
{
Console.WriteLine("User: {0} Login name: {1} Email: {2}",
oUser.Title, oUser.LoginName, oUser.Email);
}
}
}
Imports System
Imports Microsoft.SharePoint.Client
Namespace Microsoft.SDK.SharePointServices.Samples
Class RetrieveSpecificUserProperties
Shared Sub Main()
Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"
Dim collGroup As GroupCollection = clientContext.Web.SiteGroups
Dim oGroup As Group = collGroup.GetById(7)
Dim collUser As UserCollection = oGroup.Users
clientContext.Load(collUser, Function(users) users.Include( _
Function(user) user.Title, _
Function(user) user.LoginName, _
Function(user) user.Email))
clientContext.ExecuteQuery()
Dim oUser As User
For Each oUser In collUser
Console.WriteLine("User: {0} Login name: {1} Email: {2}", _
oUser.Title, oUser.LoginName, oUser.Email)
Next oUser
End Sub
End Class
End Namespace
var siteUrl = '/sites/MySiteCollection ';
function retrieveSpecificUserProperties() {
var clientContext = new SP.ClientContext(siteUrl);
var collGroup = clientContext.get_web().get_siteGroups();
var oGroup = collGroup.getById(7);
this.collUser = oGroup.get_users();
clientContext.load(collUser, 'Include(Title, LoginName, Email)');
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded() {
var userInfo = '';
var userEnumerator = collUser.getEnumerator();
while (userEnumerator.moveNext()) {
var oUser = userEnumerator.get_current();
this.userInfo += '\nUser: ' + oUser.get_title() +
'\nEmail: ' + oUser.get_email() +
'\vLogin Name: ' + oUser.get_loginName();
}
alert(userInfo);
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
Извлечение всех пользователей во всех группах в семействе веб-сайтов
В предыдущем примере показано, как возвратить всех пользователей из определенной группы. Если требуется возвратить всех пользователей из всех групп в семействе веб-сайтов, можно дважды воспользоваться методом Load<T>(T, []) (JavaScript: load(clientObject)) для загрузки коллекции групп и коллекции пользователей в каждую группу, чтобы сделать доступными все свойства каждого пользователя и группы. Используйте синтаксис метода запросов LINQ, чтобы включить каждую коллекцию пользователей каждой из групп, как показано в следующем примере.
using System;
using Microsoft.SharePoint.Client;
namespace Microsoft.SDK.SharePointServices.Samples
{
class RetrieveAllUsersAllGroups
{
static void Main()
{
ClientContext clientContext = new ClientContext("http://MyServer/sites/MySiteCollection");
GroupCollection collGroup = clientContext.Web.SiteGroups;
clientContext.Load(collGroup);
clientContext.Load(collGroup,
groups => groups.Include(
group => group.Users));
clientContext.ExecuteQuery();
foreach (Group oGroup in collGroup)
{
UserCollection collUser = oGroup.Users;
foreach (User oUser in collUser)
{
Console.WriteLine("Group ID: {0} Group Title: {1} User: {2} Login Name: {3}",
oGroup.Id, oGroup.Title, oUser.Title, oUser.LoginName);
}
}
}
}
}
Imports System
Imports Microsoft.SharePoint.Client
Namespace Microsoft.SDK.SharePointServices.Samples
Class RetrieveAllUsersAllGroups
Shared Sub Main()
Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"
Dim collGroup As GroupCollection = clientContext.Web.SiteGroups
clientContext.Load(collGroup)
clientContext.Load(collGroup, Function(groups) groups.Include( _
Function(group) group.Users))
clientContext.ExecuteQuery()
Dim oGroup As Group
For Each oGroup In collGroup
Dim collUser As UserCollection = oGroup.Users
Dim oUser As User
For Each oUser In collUser
Console.WriteLine("Group ID: {0} Group Title: {1} User: {2} Login Name: {3}", _
oGroup.Id, oGroup.Title, oUser.Title, oUser.LoginName)
Next oUser
Next oGroup
End Sub
End Class
End Namespace
var siteUrl = '/sites/MySiteCollection ';
function retrieveAllUsersAllGroups() {
var clientContext = new SP.ClientContext(siteUrl);
this.collGroup = clientContext.get_web().get_siteGroups();
clientContext.load(collGroup);
clientContext.load(collGroup, 'Include(Users)');
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded() {
var userInfo = '';
var groupEnumerator = collGroup.getEnumerator();
while (groupEnumerator.moveNext()) {
var oGroup = groupEnumerator.get_current();
var collUser = oGroup.get_users();
var userEnumerator = collUser.getEnumerator();
while (userEnumerator.moveNext()) {
var oUser = userEnumerator.get_current();
this.userInfo += '\nGroup ID: ' + oGroup.get_id() +
'\nGroup Title: ' + oGroup.get_title() +
'\nUser: ' + oUser.get_title() +
'\nLogin Name: ' + oUser.get_loginName();
}
}
alert(userInfo);
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
Для повышения эффективности можно один раз вызвать метод Load<T>(T, []) (JavaScript: load(clientObject)) и изменить выражение запроса, чтобы оно включало только определенные свойства, как показано в следующем примере.
using System;
using Microsoft.SharePoint.Client;
namespace Microsoft.SDK.SharePointServices.Samples
{
class RetrieveAllUsersAllGroupsSpecificProperties
{
static void Main()
{
ClientContext clientContext = new ClientContext("http://MyServer/sites/MySiteCollection");
GroupCollection collGroup = clientContext.Web.SiteGroups;
clientContext.Load(collGroup,
groups => groups.Include(
group => group.Title,
group => group.Id,
group => group.Users.Include(
user => user.Title,
user => user.LoginName)));
clientContext.ExecuteQuery();
foreach (Group oGroup in collGroup)
{
UserCollection collUser = oGroup.Users;
foreach (User oUser in oGroup.Users)
{
Console.WriteLine("Group: {0} Group ID: {1} User: {2} Login Name: {3}",
oGroup.Title, oGroup.Id, oUser.Title, oUser.LoginName);
}
}
}
}
}
Imports System
Imports Microsoft.SharePoint.Client
Namespace Microsoft.SDK.SharePointServices.Samples
Class RetrieveAllUsersAllGroupsSpecificProperties
Shared Sub Main()
Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"
Dim collGroup As GroupCollection = clientContext.Web.SiteGroups
clientContext.Load(collGroup, Function(groups) groups.Include( _
Function(group) group.Title, _
Function(group) group.Id, _
Function(group) group.Users.Include( _
Function(user) user.Title, _
Function(user) user.LoginName)))
clientContext.ExecuteQuery()
Dim oGroup As Group
For Each oGroup In collGroup
Dim collUser As UserCollection = oGroup.Users
Dim oUser As User
For Each oUser In oGroup.Users
Console.WriteLine("Group: {0} Group ID: {1} User: {2} Login Name: {3}", _
oGroup.Title, oGroup.Id, oUser.Title, oUser.LoginName)
Next oUser
Next oGroup
End Sub
End Class
End Namespace
var siteUrl = '/sites/MySiteCollection ';
function retrieveAllUsersAllGroupsSpecificProperties() {
var clientContext = new SP.ClientContext(siteUrl);
this.collGroup = clientContext.get_web().get_siteGroups();
clientContext.load(collGroup, 'Include(Title,Id,Users.Include(Title,LoginName))');
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded() {
var userInfo = '';
var groupEnumerator = collGroup.getEnumerator();
while (groupEnumerator.moveNext()) {
var oGroup = groupEnumerator.get_current();
var collUser = oGroup.get_users();
var userEnumerator = collUser.getEnumerator();
while (userEnumerator.moveNext()) {
var oUser = userEnumerator.get_current();
this.userInfo += '\nGroup ID: ' + oGroup.get_id() +
'\nGroup Title: ' + oGroup.get_title() +
'\nUser: ' + oUser.get_title() +
'\nLogin Name: ' + oUser.get_loginName();
}
}
alert(userInfo);
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
Добавление пользователя в группу SharePoint
Если объект пользователя, который необходимо добавить в группу, уже существует в семействе веб-сайтов, можно использовать метод AddUser(User) (JavaScript: addUser(user)) для добавления пользователя в коллекцию пользователей группы. Однако если пользователь еще не существует, как показано в следующем примере кода, используйте класс UserCreationInformation (JavaScript: UserCreationInformation) для задания нового пользователя, а затем добавьте этого нового пользователя в коллекцию пользователей группы с помощью метода Add(UserCreationInformation) (JavaScript: add(parameters)). В данном примере используется метод GetById(Int32) (JavaScript: getById(id)) для возвращения определенной группы из коллекции групп в семействе веб-сайтов, затем задается новый объект пользователя, который добавляется в коллекцию пользователей группы.
using System;
using Microsoft.SharePoint.Client;
namespace Microsoft.SDK.SharePointServices.Samples
{
class AddUserToSharePointGroup
{
static void Main()
{
ClientContext clientContext = new ClientContext("http://MyServer/sites/MySiteCollection ");
GroupCollection collGroup = clientContext.Web.SiteGroups;
Group oGroup = collGroup.GetById(6);
UserCreationInformation userCreationInfo = new UserCreationInformation();
userCreationInfo.Email = "alias@somewhere.com";
userCreationInfo.LoginName = @"DOMAIN\alias";
userCreationInfo.Title = "John";
User oUser = oGroup.Users.Add(userCreationInfo);
clientContext.ExecuteQuery();
}
}
}
Imports System
Imports Microsoft.SharePoint.Client
Namespace Microsoft.SDK.SharePointServices.Samples
Class AddUserToSharePointGroup
Shared Sub Main()
Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"
Dim collGroup As GroupCollection = clientContext.Web.SiteGroups
Dim oGroup As Group = collGroup.GetById(7)
Dim userCreationInfo As New UserCreationInformation()
userCreationInfo.Email = "alias@somewhere.com"
userCreationInfo.LoginName = "DOMAIN\alias"
userCreationInfo.Title = "John"
Dim oUser As User = oGroup.Users.Add(userCreationInfo)
clientContext.ExecuteQuery()
End Sub
End Class
End Namespace
var siteUrl = '/sites/MySiteCollection ';
function addUserToSharePointGroup() {
var clientContext = new SP.ClientContext(siteUrl);
var collGroup = clientContext.get_web().get_siteGroups();
var oGroup = collGroup.getById(7);
var userCreationInfo = new SP.UserCreationInformation();
userCreationInfo.set_email('alias@somewhere.com');
userCreationInfo.set_loginName('DOMAIN\alias');
userCreationInfo.set_title('John');
this.oUser = oGroup.get_users().add(userCreationInfo);
clientContext.load(oUser);
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded() {
alert(this.oUser.get_title() + " added.");
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
Дополнительные сведения и примеры работы с клиентскими объектами в контексте объектной модели Microsoft SharePoint Foundation 2010 Silverlight см. в статье Использование объектной модели Silverlight.
См. также
Концепции
Нарушение наследования назначения роли
Авторизация, пользователи и группы
Инструкции по использованию клиентской объектной модели