在 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 中创建一个场解决方案和应用程序页面

  1. 以管理员身份运行 Visual Studio,依次选择"文件"、"新建"、"项目"。

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

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

  4. 将项目命名为 FollowPeopleJSOM,然后选择“确定”按钮。

  5. 在“SharePoint 自定义向导”对话框中,选择“部署场解决方案”,然后选择“完成”按钮。

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

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

    注意

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

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

  9. 在 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>
    

    注意

    “获取粉丝和被关注人”的示例中没有使用按钮控件或窗体摘要控件,它们仅在更新服务器内容的操作时才需要使用。 窗体摘要生成用于安全验证的消息摘要。

  10. 将标记之间的 script 注释替换为以下方案之一的代码示例:

  11. 要测试解决方案,请在菜单栏上,依次选择"调试"、"开始调试"。

代码示例:使用 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());
}

另请参阅