在 SharePoint 中使用 JavaScript 对象模型检索用户配置文件属性
了解如何通过 SharePoint JavaScript 对象模型以编程模式检索用户属性和用户配置文件属性。
什么是 SharePoint 中的用户属性和用户配置文件属性?
用户属性和用户配置文件属性提供有关 SharePoint 用户的信息,如显示名称、电子邮件、职位及其他业务和个人信息。 在客户端 API 中,您可以从 PersonProperties 对象及其 userProfileProperties 属性访问这些属性。 userProfileProperties 属性包含所有用户配置文件属性,但 PersonProperties 对象包含更容易访问的常用属性(例如,accountName、displayName 和 email)。
PeopleManager 对象包括以下方法,可用于通过使用 JavaScript 对象模型检索用户属性和用户配置文件属性:
getMyProperties 方法和 getPropertiesFor 方法返回 PersonProperties 对象。
getUserProfilePropertiesFor 方法和 getUserProfilePropertyFor 方法返回您指定的用户配置文件属性值。
来自客户端 API 的用户配置文件属性是只读的(配置文件图片除外,您可以使用 PeopleManager.setMyProfilePicture 方法对该图片进行更改)。 如果您希望更改其他用户配置文件属性,则必须使用服务器对象模型。 有关使用用户配置文件的详细信息,请参阅 在 SharePoint 中使用用户配置文件。
注意
与服务器端版本不同,客户端 UserProfile 对象不包含所有的用户属性。 但是,客户端版本确实提供了为当前用户创建个人网站的方法。 若要检索它,请使用 ProfileLoader.getUserProfile 方法。
将开发环境设置为使用 SharePoint JavaScript 对象模型检索用户属性的先决条件
若要创建使用 JavaScript 对象模型检索用户属性的应用页,需要满足以下条件:
为当前用户和目标用户创建了配置文件的 SharePoint
Visual Studio 2012
Visual Studio 2013 Office 开发人员工具
访问当前用户的 User Profile Service 应用程序的"完全控制"连接权限
在 Visual Studio 2008 中创建应用程序页
在运行 SharePoint 的服务器上,打开 Visual Studio,再依次选择“文件”、“新建”和“项目”。
在“新建项目”对话框顶部的下拉列表中,选择“.NET Framework 4.5”。
在"模版"列表中,展开"Office/SharePoint",选择"SharePoint 解决方案"类别,然后选择"SharePoint 项目"模板。
将项目命名为 UserProfilesJSOM,然后选择"确定"按钮。
在"SharePoint 自定义向导"对话框中,输入目标 SharePoint 网站的 URL,选择"部署为场解决方案",然后选择"完成"按钮。
在"解决方案资源管理器"中,打开 UserProfilesJSOM 项目的快捷菜单,然后添加"SharePoint 的'Layouts'映射文件夹"。
在“布局”文件夹中,打开“UserProfilesJSOM”文件夹的快捷菜单,再添加名为“UserProfiles.aspx”的新 SharePoint 应用页。
注意:本文中的代码示例在页面标记中定义了自定义代码,但没有使用 Visual Studio 为页面创建的代码隐藏类。
打开“UserProfiles.aspx”页的快捷菜单,再选择“设置为启动项”。
在 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>
- 若要添加逻辑以检索用户配置文件属性,请将 script 标记之间的注释替换为以下某一方案中的代码示例:
- 从 PersonProperties 对象及其 userProfileProperties 属性检索用户配置文件属性
- 通过使用 getUserProfilePropertiesFor 方法检索用户配置文件属性集
- 若要测试应用程序页,请在菜单栏上选择"调试"和"启动调试"。 如果系统提示您修改 web.config 文件,请选择"确定"按钮。
代码示例:在 SharePoint JavaScript 对象模型中从 PersonProperties 对象及其 userProfileProperties 属性检索用户配置文件属性
以下代码示例演示了如何通过查询 PersonProperties 对象及其 userProfileProperties 属性获取目标用户的用户配置文件属性。 它演示了如何执行以下操作:
使用 getPropertiesFor 方法获取表示目标用户的 PersonProperties 对象。 (若要获取当前用户的 PersonProperties 对象,请使用 getMyProperties 方法.)
直接从 PersonProperties 对象获取一种属性。 该示例获取 displayName 属性。
从 PersonProperties 对象的 userProfileProperties 属性获取一种属性。 该示例获取 Department 属性。
注意
在通过创建应用页过程添加到 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 方法检索目标用户指定用户配置文件属性集的值。 它演示了如何执行以下操作:
创建指定目标用户和要检索的用户配置文件属性的 UserProfilePropertiesForUser 对象。 该示例获取 PreferredName 属性和 Department 属性。
通过使用 getUserProfilePropertiesFor 方法并传入 UserProfilePropertiesForUser 对象,获取指定属性的值。 (若要仅检索一个用户配置文件属性的值,请使用 getUserProfilePropertyFor 方法.)
从返回的一组属性值中获取值。
注意
在通过创建应用页过程添加到 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();
}