在 SharePoint 中使用 .NET 客户端对象模型关注人员

了解如何通过 SharePoint .NET 客户端对象模型使用“关注人员”功能。

为什么要在 SharePoint 中使用“关注人员”功能?

在 SharePoint 中,如果用户关注人员,被关注人员的帖子和活动就会显示在用户的新闻源中。 通过使用“关注人员”功能方便用户关注人员,可以提升应用或解决方案的相关性。 在 .NET 客户端对象模型中,你关注的人员由 SocialActor 对象表示。 若要在 .NET 客户端对象模型中执行核心“关注人员”任务,可以使用 SocialFollowingManager 对象。 本文介绍了如何通过 .NET 客户端对象模型使用“关注人员”功能。

注意

我们专注于 SocialFollowingManager ,因为它整合了关注人员和内容的核心功能。 不过,PeopleManager 对象包含其他用于关注人员的功能,如 AmIFollowedBy(String) 方法和获取其他用户关注状态的方法。

将开发环境设置为支持通过 SharePoint .NET 客户端对象模型使用“关注人员”功能的先决条件

若要创建通过 .NET 客户端对象模型使用“关注人员”功能的控制台应用,需要满足以下条件:

  • SharePoint 配置有“我的网站”,并为当前用户和目标用户创建了用户配置文件和个人网站

  • Visual Studio 2012

  • 对登录用户的 User Profile Service 应用的完全控制访问权限

注意

如果未在运行 SharePoint 的计算机上进行开发,请获取包含 SharePoint 客户端 程序集的 SharePoint 客户端组件下载。

在 Visual Studio 2012 中创建控制台应用

  1. 打开 Visual Studio,依次选择"文件"、"新建"、"项目"。

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

  3. 在"模板"列表中,选择"Windows",然后选择"控制台应用程序"模板。

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

  5. 添加对以下程序集的引用:

  • Microsoft.SharePoint.Client
  • Microsoft.SharePoint.ClientRuntime
  • Microsoft.SharePoint.Client.UserProfiles
  1. Program 类的内容替换为以下其中一个方案的代码示例:
  1. 若要测试控制台应用程序,请在菜单栏上,依次选择"调试"和"开始调试"。

代码示例:使用 SharePoint .NET 客户端对象模型开始或停止关注好友

以下代码示例使当前用户开始关注或停止关注某目标用户。 该代码示例演示如何:

  • 使用 IsFollowed 方法检查当前用户是否关注目标用户。

  • 使用 GetFollowedCount 方法获取当前用户关注的人员计数。

  • 使用 Follow 方法开始关注目标用户。

  • 使用 StopFollowing 方法停止关注目标用户。

此代码示例使用 Follow 方法返回的 SocialFollowResult 对象来确定是开始还是停止关注目标用户。

注意

运行代码前,请先更改 serverUrltargetUser 变量的占位符值。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint.Client;
using Microsoft.SharePoint.Client.Social;

namespace FollowPeopleCSOM
{
    class Program
    {
        static ClientContext clientContext;
        static SocialFollowingManager followingManager;
        static void Main(string[] args)
        {

            // Replace the following placeholder values with the target
            // server URL and target user.
            const string serverUrl = "http://serverName";
            const string targetUser = "domainName\\\\userName";

            // Get the client context.
            clientContext = new ClientContext(serverUrl);

            // Get the SocialFeedManager instance.
            followingManager = new SocialFollowingManager(clientContext);

            // Create a SocialActorInfo object to represent the target user.
            SocialActorInfo actorInfo = new SocialActorInfo();
            actorInfo.AccountName = targetUser;

            // Find out whether the current user is following the target user.
            ClientResult<bool> isFollowed = followingManager.IsFollowed(actorInfo);

            // Get the information from the server.
            clientContext.ExecuteQuery();

            Console.WriteLine("Was the current user following the target user? {0}\\n", isFollowed.Value);
            Console.Write("Initial count: ");

            // Get the current count of followed people.
            WriteFollowedCount();

            // Try to follow the target user. If the result is OK, then
            // the request succeeded.
            ClientResult<SocialFollowResult> result = followingManager.Follow(actorInfo);
            clientContext.ExecuteQuery();

            // If the result is AlreadyFollowing, then stop following 
            // the target user.
            if (result.Value == SocialFollowResult.AlreadyFollowing)
            {
                followingManager.StopFollowing(actorInfo);
                clientContext.ExecuteQuery();
            }

            // Handle other SocialFollowResult return values.
            else if (result.Value == SocialFollowResult.LimitReached
                || result.Value == SocialFollowResult.InternalError)
            {
                Console.WriteLine(result.Value);
            }

            // Get the updated count of followed people.
            Console.Write("Updated count: ");
            WriteFollowedCount();
            Console.ReadKey();
        }

        // Get the count of the people who the current user is following.
        static void WriteFollowedCount()
        {
            ClientResult<int> followedCount = followingManager.GetFollowedCount(SocialActorTypes.Users);
            clientContext.ExecuteQuery();
            Console.WriteLine("The current user is following {0} people.", followedCount.Value);
        }
    }
}

代码示例:使用 SharePoint .NET 客户端对象模型获取关注者和被关注者

以下代码示例可获取当前用户正在关注的人,获取当前用户关注的人,并获取有关当前用户的"关注好友"状态的信息。 该代码示例演示如何:

  • 使用 IsFollowed 方法检查当前用户是否关注目标用户。

  • 使用 GetFollowedCount 方法获取当前用户关注的人员计数。

  • 使用 GetFollowed 方法获取当前用户关注的人员。

  • 使用 GetFollowers 方法获取关注当前用户的人员。

  • 遍历各组人员,并获取每个人的显示名称、个人 URI 和图片 URI。

注意

运行代码前,请先更改 serverUrltargetUser 变量的占位符值。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint.Client;
using Microsoft.SharePoint.Client.Social;

namespace FollowPeopleCSOM
{
    class Program
    {
        static void Main(string[] args)
        {

            // Replace the following placeholder values with the target
            // server URL and target user.
            const string serverUrl = "http://serverName";
            const string targetUser = "domainName\\\\userName";

            // Get the client context.
            ClientContext clientContext = new ClientContext(serverUrl);
            
            // Get the SocialFeedManager instance.
            SocialFollowingManager followingManager = new SocialFollowingManager(clientContext);

            // Create a SocialActorInfo object to represent the target user.
            SocialActorInfo actorInfo = new SocialActorInfo();
            actorInfo.AccountName = targetUser;

            // Find out whether the current user is following the target user.
            ClientResult<bool> isFollowed = followingManager.IsFollowed(actorInfo);

            // Get the count of people who the current user is following.
            ClientResult<int> followedCount = followingManager.GetFollowedCount(SocialActorTypes.Users);

            // Get the people who the current user is following.
            ClientResult<SocialActor[]> followedResult = followingManager.GetFollowed(SocialActorTypes.Users);

            // Get the people who are following the current user.
            ClientResult<SocialActor[]> followersResult = followingManager.GetFollowers();

            // Get the information from the server.
            clientContext.ExecuteQuery();

            // Write the results to the console window.
            Console.WriteLine("Is the current user following the target user? {0}\\n", isFollowed.Value);
            Console.WriteLine("People who the current user is following: ({0} count)", followedCount.Value);
            IterateThroughPeople(followedResult.Value);
            Console.WriteLine("\\nPeople who are following the current user:");
            IterateThroughPeople(followersResult.Value);
            Console.ReadKey();
        }

        // Iterate through the people and get each person's display
        // name, personal URI, and picture URI.
        static void IterateThroughPeople(SocialActor[] actors)
        {
            foreach (SocialActor actor in actors)
            {
                Console.WriteLine("  - {0}", actor.Name);
                Console.WriteLine("\\tPersonal URI: {0}", actor.PersonalSiteUri);
                Console.WriteLine("\\tPicture URI: {0}", actor.ImageUri);
            }
        }
    }
}

另请参阅