如何:通过 JavaScript 使用用户和组

上次修改时间: 2011年6月20日

适用范围: SharePoint Foundation 2010

本文内容
使用 ECMAScript(JavaScript、JScript)检索 SharePoint 组中的所有用户
使用 JavaScript 检索用户的特定属性
使用 JavaScript 检索网站集的所有组中的全部用户
使用 JavaScript 向 SharePoint 组中添加用户

适用于 JavaScript: SP 命名空间中网站、列表和列表项的数据检索逻辑同样适用于用户和组。与该命名空间中的其他对象一样,您可以使用 CreationInformation 对象创建用户或组对象。

使用 ECMAScript(JavaScript、JScript)检索 SharePoint 组中的所有用户

Web 对象的 get_siteGroups 函数可获取网站集内所有网站中的全部组。如以下示例所示,您可以使用 getById(id) 函数返回组集合中的特定组。Group 对象的 get_users 函数获取该组中的所有用户。由于以下示例加载指定组中的用户,因此每个用户对象的所有属性均可用。

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

使用 JavaScript 检索用户的特定属性

以下示例对上一示例进行了修改,以便只返回特定组中每个用户的职位和电子邮件地址。该示例使用 Include 语句指定只有 titleemail 属性可用于每个用户对象,并且调用其他属性将返回 PropertyOrFieldNotInitializedException

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

使用 JavaScript 检索网站集的所有组中的全部用户

上面的示例演示如何返回指定组中的所有用户。若要返回网站集内所有组中的全部用户,您可以使用两次 load(clientObject) 函数来同时加载组集合和每个组中的用户集合,从而使每个用户和组的所有属性均可用。可使用 LINQ 查询方法语法包括每个组的每个用户集合,如以下示例所示。

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(clientObject) 函数并修改查询表达式,以使其只包括特定属性,如以下示例所示。

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

使用 JavaScript 向 SharePoint 组中添加用户

如果网站集中已包含要添加到某个组中的用户对象,则可以使用 addUser(user) 函数将该用户添加到该组的用户集合中。但是,如果该用户不存在,则应该使用 UserCreationInformation 对象定义一个新用户,然后通过 add(parameters) 函数将该新用户添加到组的用户集合中,如以下代码示例所示。该示例使用 getById(id) 函数从网站集内的组集合返回特定组,然后定义一个新用户对象,并将其添加到组的用户集合中。

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

请参阅

概念

如何:通过 JavaScript 使用角色

如何:使用 JavaScript 打破角色分配继承关系

数据检索概述

创建客户端对象

客户端对象模型准则

JavaScript 对象模型中的常见编程任务

其他资源

ECMAScript 类库