在 SharePoint 中使用 JavaScript 对象模型关注人员
了解如何通过 SharePoint JavaScript 对象模型使用关注好友功能。
为什么要在 SharePoint 中使用“关注人员”功能?
在 SharePoint 中,“关注人员”功能有助于用户彼此互动交流。 例如,如果用户关注某人,此人的帖子和活动就会显示在用户的新闻源中。 通过使用“关注人员”功能方便用户关注人员,可以提升应用或解决方案的相关性。 在 JavaScript 对象模型中,你关注的人员由 SocialActor 对象表示。 若要在 JavaScript 对象模型中执行核心“关注人员”任务,请使用 SocialFollowingManager 对象。 本文介绍了如何通过 JavaScript 对象模型使用“关注人员”功能。
注意
SocialFollowingManager 是建议用于关注好友和内容的 API。 但是,PeopleManager 对象还包含关注好友的其他功能,如可获取其他用户关注状态的 amIFollowedBy 方法。
将开发环境设置为支持通过 SharePoint JavaScript 对象模型使用“关注人员”功能的先决条件
若要创建通过 JavaScript 对象模型使用“关注人员”功能的场解决方案,需要满足以下条件:
- SharePoint 配置有“我的网站”,并为当前用户和目标用户创建了用户配置文件和个人网站
- Visual Studio 2012
- Visual Studio 2012 Office 开发人员工具
- 对登录用户的 User Profile Service 应用程序的"完全控制"访问权限
- 登录用户的本地管理员权限
在 Visual Studio 2008 中创建一个场解决方案和应用程序页面
以管理员身份运行 Visual Studio,依次选择"文件"、"新建"、"项目"。
在"新建项目"对话框中,从对话框顶部的下拉列表中选择".NET Framework 4.5"。
在"模版"列表中,展开"Office/SharePoint",选择"SharePoint 解决方案",然后选择"SharePoint - 空项目"模板。
将项目命名为 FollowPeopleJSOM,然后选择“确定”按钮。
在“SharePoint 自定义向导”对话框中,选择“部署场解决方案”,然后选择“完成”按钮。
在"解决方案资源管理器"中,打开"FollowPeopleJSOM"项目的快捷菜单,然后添加"SharePoint 的'Layouts'映射文件夹"。
在“布局”文件夹中,打开“FollowPeopleJSOM”文件夹的快捷菜单,再添加名为“FollowPeople.aspx”的新 SharePoint 应用页。
注意
本文中的代码示例在页面标记中定义了自定义代码,但没有使用 Visual Studio 为页面创建的代码隐藏类。
打开“FollowPeople.aspx”页的快捷菜单,再选择“设置为启动项”。
在 FollowPeople.aspx 文件的标记中,在“Main”
asp:Content
标记之间粘贴以下代码。 此代码定义控件和脚本引用。<span id="followResults"></span><br/><br /> <button id="sendRequest" type="button"></button><br/> <span id="message" style="color: #FF0000;"></span> <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.2.min.js" type="text/javascript"></script> <SharePoint:ScriptLink name="SP.js" runat="server" ondemand="false" localizable="false" loadafterui="true" /> <SharePoint:ScriptLink name="SP.UserProfiles.js" runat="server" ondemand="false" localizable="false" loadafterui="true" /> <SharePoint:FormDigest id="FormDigest" runat="server"/> <script type="text/javascript"> // Replace this comment with the code for your scenario. </script>
注意
“获取粉丝和被关注人”的示例中没有使用按钮控件或窗体摘要控件,它们仅在更新服务器内容的操作时才需要使用。 窗体摘要生成用于安全验证的消息摘要。
将标记之间的
script
注释替换为以下方案之一的代码示例:要测试解决方案,请在菜单栏上,依次选择"调试"、"开始调试"。
代码示例:使用 SharePoint JavaScript 对象模型开始或停止关注好友
以下代码示例使当前用户开始关注或停止关注某目标用户。 该代码示例演示如何:
- 使用 isFollowed 方法检查当前用户是否正在关注某目标用户。
- 使用 getFollowedCount 方法获得当前用户所关注好友的个数。
- 使用 follow 方法开始关注目标用户。
- 使用 stopFollowing 方法停止关注目标用户。
注意
在创建场解决方案和应用页过程中添加的 script 标记间,粘贴下面的代码。 然后在运行代码之前,请先更改 targetUser 变量的占位符值。
// Replace the placeholder value with the account name of the target user.
var targetUser = 'domain\\userName';
var clientContext;
var followingManager;
var actorInfo;
var isFollowed;
var followedCount;
// Ensure that the SP.UserProfiles.js file is loaded before running your code.
$(document).ready(function () {
SP.SOD.executeOrDelayUntilScriptLoaded(getFollowingStatus, 'SP.UserProfiles.js');
});
// Get the Following status of the current user.
function getFollowingStatus() {
// Get the current client context.
clientContext = SP.ClientContext.get_current();
// Get the SocialFeedManager instance.
followingManager = new SP.Social.SocialFollowingManager(clientContext);
// Create a SocialActorInfo object to represent the target user.
actorInfo = new SP.Social.SocialActorInfo();
actorInfo.set_accountName(targetUser);
// Find out whether the current user is following the target user.
isFollowed = followingManager.isFollowed(actorInfo);
followedCount = followingManager.getFollowedCount(1);
// Get the information from the server.
clientContext.executeQueryAsync(showFollowingStatus, requestFailed)
}
// Show the Following status of the current user.
function showFollowingStatus() {
var results = '';
results += 'Is the current user following the target user? ' + isFollowed.get_value();
results += '<br/>Total count of followed people: ' + followedCount.get_value();
$('#followResults').html(results);
// Initialize the button for this example.
$('#sendRequest').click(
function () {
$('#message').empty();
toggleFollowingStatus();
});
$('#sendRequest').text('Toggle following status');
}
// Follow or stop following the target user.
function toggleFollowingStatus() {
if (isFollowed.get_value() === false) {
followingManager.follow(actorInfo);
}
else if (isFollowed.get_value() === true) {
followingManager.stopFollowing(actorInfo);
}
clientContext.executeQueryAsync(getFollowingStatus, requestFailed);
}
// Failure callback.
function requestFailed(sender, args) {
$('#message').html('Error: ' + args.get_message());
}
代码示例:使用 SharePoint JavaScript 对象模型获取关注者和被关注者
以下代码示例获取当前用户关注的好友,并获取关注当前用户的好友。 它演示了如何执行以下操作:
- 使用 getFollowed 方法获取当前用户正在关注的好友。
- 使用 getFollowers 方法并传递用来表示 User 角色类型的 1,从而获取正在关注当前用户的人员。
- 遍历各组人员,并获取每个人的显示名称、个人网站 URI 和图片 URI。
注意
在创建场解决方案和应用程序页过程中添加的标记之间script
粘贴以下代码。
var followed;
var followers;
// Ensure that the SP.UserProfiles.js file is loaded before running your code.
$(document).ready(function () {
SP.SOD.executeOrDelayUntilScriptLoaded(getFollowedAndFollowers, 'SP.UserProfiles.js');
// Hide the button for this example.
$('#sendRequest').hide();
});
// Get the Following status of the current user.
function getFollowedAndFollowers() {
// Get the current client context.
var clientContext = SP.ClientContext.get_current();
// Get the SocialFeedManager instance.
var followingManager = new SP.Social.SocialFollowingManager(clientContext);
// Get followed people and followers.
followers = followingManager.getFollowers();
followed = followingManager.getFollowed(1);
// Send the request to the server.
clientContext.executeQueryAsync(showFollowedAndFollowers, requestFailed)
}
// Show the Following status of the current user.
function showFollowedAndFollowers() {
var results = 'The current user is following ' + followed.length + ' people: <br/>';
for (var i = 0; i < followed.length; i++) {
var user = followed[i];
var name = user.get_name();
var personalSiteUri = user.get_personalSiteUri();
var pictureUri = user.get_imageUri();
results += '<br/>' + name + '<br/>' + personalSiteUri + '<br/>' + pictureUri + '<br/>';
}
results += '<br/>The current user is followed by ' + followers.length + ' people: <br/>';
for (var i = 0; i < followers.length; i++) {
var user = followers[i];
var name = user.get_name();
var personalSiteUri = user.get_personalSiteUri();
var pictureUri = user.get_imageUri();
results += '<br/>' + name + '<br/>' + personalSiteUri + '<br/>' + pictureUri + '<br/>';
}
$('#followResults').html(results);
}
// Failure callback.
function requestFailed(sender, args) {
$('#message').html('Error: ' + args.get_message());
}