在 SharePoint 中使用 JavaScript 对象模型检索用户配置文件属性

了解如何通过 SharePoint JavaScript 对象模型以编程模式检索用户属性和用户配置文件属性。

什么是 SharePoint 中的用户属性和用户配置文件属性?

用户属性和用户配置文件属性提供有关 SharePoint 用户的信息,如显示名称、电子邮件、职位及其他业务和个人信息。 在客户端 API 中,您可以从 PersonProperties 对象及其 userProfileProperties 属性访问这些属性。 userProfileProperties 属性包含所有用户配置文件属性,但 PersonProperties 对象包含更容易访问的常用属性(例如,accountNamedisplayNameemail)。

PeopleManager 对象包括以下方法,可用于通过使用 JavaScript 对象模型检索用户属性和用户配置文件属性:

来自客户端 API 的用户配置文件属性是只读的(配置文件图片除外,您可以使用 PeopleManager.setMyProfilePicture 方法对该图片进行更改)。 如果您希望更改其他用户配置文件属性,则必须使用服务器对象模型。 有关使用用户配置文件的详细信息,请参阅 在 SharePoint 中使用用户配置文件

注意

与服务器端版本不同,客户端 UserProfile 对象不包含所有的用户属性。 但是,客户端版本确实提供了为当前用户创建个人网站的方法。 若要检索它,请使用 ProfileLoader.getUserProfile 方法。

将开发环境设置为使用 SharePoint JavaScript 对象模型检索用户属性的先决条件

若要创建使用 JavaScript 对象模型检索用户属性的应用页,需要满足以下条件:

  • 为当前用户和目标用户创建了配置文件的 SharePoint

  • Visual Studio 2012

  • Visual Studio 2013 Office 开发人员工具

  • 访问当前用户的 User Profile Service 应用程序的"完全控制"连接权限

在 Visual Studio 2008 中创建应用程序页

  1. 在运行 SharePoint 的服务器上,打开 Visual Studio,再依次选择“文件”、“新建”和“项目”

  2. 在“新建项目”对话框顶部的下拉列表中,选择“.NET Framework 4.5”

  3. 在"模版"列表中,展开"Office/SharePoint",选择"SharePoint 解决方案"类别,然后选择"SharePoint 项目"模板。

  4. 将项目命名为 UserProfilesJSOM,然后选择"确定"按钮。

  5. 在"SharePoint 自定义向导"对话框中,输入目标 SharePoint 网站的 URL,选择"部署为场解决方案",然后选择"完成"按钮。

  6. 在"解决方案资源管理器"中,打开 UserProfilesJSOM 项目的快捷菜单,然后添加"SharePoint 的'Layouts'映射文件夹"。

  7. 在“布局”文件夹中,打开“UserProfilesJSOM”文件夹的快捷菜单,再添加名为“UserProfiles.aspx”的新 SharePoint 应用页。

    注意:本文中的代码示例在页面标记中定义了自定义代码,但没有使用 Visual Studio 为页面创建的代码隐藏类。

  8. 打开“UserProfiles.aspx”页的快捷菜单,再选择“设置为启动项”

  9. 在 UserProfiles.aspx 页的标记中,将以下代码粘贴到"主" asp:Content 标记中。 该代码会添加显示查询结果的 span 控件、引用 SharePoint JavaScript 类库文件的 SharePoint:ScriptLink 控件,以及 script 标记,以包含您的自定义逻辑。

<span id="results"></span><br />
<SharePoint:ScriptLink ID="ScriptLink1" name="SP.js" runat="server"
    ondemand="false" localizable="false" loadafterui="true" />
<SharePoint:ScriptLink ID="ScriptLink2" name="SP.UserProfiles.js" runat="server"
    ondemand="false" localizable="false" loadafterui="true" />
<script type="text/javascript">
    // Replace this comment with the code for your scenario.
</script>
  1. 若要添加逻辑以检索用户配置文件属性,请将 script 标记之间的注释替换为以下某一方案中的代码示例:
  1. 若要测试应用程序页,请在菜单栏上选择"调试"和"启动调试"。 如果系统提示您修改 web.config 文件,请选择"确定"按钮。

代码示例:在 SharePoint JavaScript 对象模型中从 PersonProperties 对象及其 userProfileProperties 属性检索用户配置文件属性

以下代码示例演示了如何通过查询 PersonProperties 对象及其 userProfileProperties 属性获取目标用户的用户配置文件属性。 它演示了如何执行以下操作:

注意

在通过创建应用页过程添加到 UserProfiles.aspx 文件的 script 标记间粘贴下面的代码。 运行代码前,请务必先替换 domainName\\userName 占位符值。 (此代码示例不使用代码隐藏类文件。)


var personProperties;

// Ensure that the SP.UserProfiles.js file is loaded before the custom code runs.
SP.SOD.executeOrDelayUntilScriptLoaded(getUserProperties, 'SP.UserProfiles.js');

function getUserProperties() {

    // Replace the placeholder value with the target user's credentials.
    var targetUser = "domainName\\userName";

    // Get the current client context and PeopleManager instance.
    var clientContext = new SP.ClientContext.get_current();
    var peopleManager = new SP.UserProfiles.PeopleManager(clientContext);

    // Get user properties for the target user.
    // To get the PersonProperties object for the current user, use the
    // getMyProperties method.
    personProperties = peopleManager.getPropertiesFor(targetUser);

    // Load the PersonProperties object and send the request.
    clientContext.load(personProperties);
    clientContext.executeQueryAsync(onRequestSuccess, onRequestFail);
}

// This function runs if the executeQueryAsync call succeeds.
function onRequestSuccess() {

    // Get a property directly from the PersonProperties object.
    var messageText = " \\"DisplayName\\" property is "
        + personProperties.get_displayName();

    // Get a property from the UserProfileProperties property.
    messageText += "<br />\\"Department\\" property is "
        + personProperties.get_userProfileProperties()['Department'];
    $get("results").innerHTML = messageText;
}

// This function runs if the executeQueryAsync call fails.
function onRequestFail(sender, args) {
    $get("results").innerHTML = "Error: " + args.get_message();
}

代码示例:使用 SharePoint JavaScript 对象模型中的 getUserProfilePropertiesFor 方法检索一组用户配置文件属性

以下代码示例通过使用 getUserProfilePropertiesFor 方法检索目标用户指定用户配置文件属性集的值。 它演示了如何执行以下操作:

注意

在通过创建应用页过程添加到 UserProfiles.aspx 文件的 script 标记间粘贴下面的代码。 运行代码前,请务必先替换 domainName\\\\userName 占位符值。 (此代码示例不使用代码隐藏类文件。)


var userProfileProperties;

// Ensure that the SP.UserProfiles.js file is loaded before the custom code runs.
SP.SOD.executeOrDelayUntilScriptLoaded(getUserProperties, 'SP.UserProfiles.js');

function getUserProperties() {

    // Replace the placeholder value with the target user's credentials.
    var targetUser = "domainName\\\\userName";

    // Get the current client context and PeopleManager instance.
    var clientContext = new SP.ClientContext.get_current();
    var peopleManager = new SP.UserProfiles.PeopleManager(clientContext);

    // Specify the properties to retrieve and target user for the 
    // UserProfilePropertiesForUser object.
    var profilePropertyNames = ["PreferredName", "Department"];
    var userProfilePropertiesForUser = 
        new SP.UserProfiles.UserProfilePropertiesForUser(
            clientContext,
            targetUser,
            profilePropertyNames);

    // Get user profile properties for the target user.
    // To get the value for only one user profile property, use the
    // getUserProfilePropertyFor method.
    userProfileProperties = peopleManager.getUserProfilePropertiesFor(
        userProfilePropertiesForUser);

    // Load the UserProfilePropertiesForUser object and send the request.
    clientContext.load(userProfilePropertiesForUser);
    clientContext.executeQueryAsync(onRequestSuccess, onRequestFail);
}

// This function runs if the executeQueryAsync call succeeds.
function onRequestSuccess() {
    var messageText = "\\"PreferredName\\" property is " 
        + userProfileProperties[0];
    messageText += "<br />\\"Department\\" property is " 
        + userProfileProperties[1];
    $get("results").innerHTML = messageText;
}

// This function runs if the executeQueryAsync call fails.
function onRequestFail(sender, args) {
    $get("results").innerHTML = "Error: " + args.get_message();
}

另请参阅