Procedimiento para trabajar con usuarios y grupos

Última modificación: viernes, 29 de abril de 2011

Hace referencia a: SharePoint Foundation 2010

En este artículo
Recuperación de todos los usuarios de un grupo de SharePoint
Recuperación de propiedades específicas de usuarios
Recuperación de todos los usuarios de todos los grupos de una colección de sitios
Agregar un usuario a un grupo de SharePoint

Disponible en SharePoint Online

La misma lógica de recuperación de datos que se aplica a sitios web, listas y elementos de lista en el espacio de nombres Microsoft.SharePoint.Client (JavaScript: SP) se aplica a usuarios y grupos. Al igual que otros objetos en este espacio de nombres, puede usar un objeto CreationInformation para crear un objeto de usuario o grupo.

Recuperación de todos los usuarios de un grupo de SharePoint

La propiedad SiteGroups (JavaScript: siteGroups) de la clase Web (JavaScript: Web) obtiene todos los grupos de todos los sitios web dentro de una colección de sitios. Como se muestra en el siguiente ejemplo, puede usar el método GetById(Int32) (JavaScript: getById(id)) para devolver un grupo específico de la colección de grupos. La propiedad Users (JavaScript: users) de la clase Group (JavaScript: Group) obtiene todos los usuarios del grupo. Debido a que el siguiente ejemplo carga los usuarios en el grupo que se especificó, todas las propiedades de todos los objetos de usuario están disponibles.

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());
}

Recuperación de propiedades específicas de usuarios

El siguiente ejemplo modifica el ejemplo anterior para que devuelva solo el título y la dirección de correo electrónico de todos los usuarios de un grupo en particular. El ejemplo usa el método Include<TSource>(IQueryable<TSource>, []) (instrucción JavaScript: Include) para especificar que solo las propiedades Title (JavaScript: title) y Email (JavaScript: email) están disponibles en cada objeto; si se llama a otras propiedades se devolverá una 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());
}

Recuperación de todos los usuarios de todos los grupos de una colección de sitios

Los ejemplos anteriores muestran cómo devolver todos los usuarios de un grupo específico. Para devolver todos los usuarios de todos los grupos de una colección de sitios, puede usar el método Load<T>(T, []) (JavaScript: load(clientObject)) dos veces para cargar tanto la colección de grupos, como la colección de usuarios de cada grupo, para que todas las propiedades de todos los usuarios y grupos estén disponibles. Use la sintaxis del método de consulta de LINQ para incluir cada grupo, como se muestra en el siguiente ejemplo.

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());
}

Para mejorar la eficacia, puede llamar al método Load<T>(T, []) (JavaScript: load(clientObject)) una vez y modificar la expresión de consulta para que incluya solo propiedades específicas, como se muestra en el siguiente ejemplo.

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());
}

Agregar un usuario a un grupo de SharePoint

Si el objeto de usuario que desea agregar ya existe en la colección de sitios, puede usar el método AddUser(User) (JavaScript: addUser(user)) para agregar el usuario a la colección de usuarios del grupo. Pero si el usuario no existe, como en el siguiente código de ejemplo, use la clase UserCreationInformation (JavaScript: UserCreationInformation) para definir un nuevo usuario y, a continuación, agregarlo a la colección de usuarios del grupo a través del método Add(UserCreationInformation) (JavaScript: add(parameters)). En este ejemplo se usa el método GetById(Int32) (JavaScript: getById(id)) para devolver un grupo específico de la colección de grupos dentro de la colección de sitios; luego se define un nuevo objeto de usuario y se lo agrega a la colección de usuarios del grupo.

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());
}

Para obtener más información y ejemplos sobre el trabajo con objetos de cliente dentro del contexto del modelo de objetos Silverlight de Microsoft SharePoint Foundation 2010, vea Uso del modelo de objetos Silverlight.

Vea también

Conceptos

Procedimiento para trabajar con roles

Procedimiento para interrumpir la herencia de asignación de roles

Autorización, usuarios y grupos

Introducción a la recuperación de datos

Creación de objetos cliente

Instrucciones del modelo de objetos cliente

Tareas comunes de programación

Otros recursos

Biblioteca de clases de cliente

Biblioteca de clases de ECMAScript