在 SharePoint 中使用 .NET 客户端对象模型关注文档和网站

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

如何使用 .NET 客户端对象模型关注内容?

SharePoint 用户可以关注文档、网站和标记,从而接收新闻源中项的最新动态,并快速打开关注的文档和网站。 可以在应用或解决方案中使用 .NET 客户端对象模型,代表当前用户开始和停止关注内容,并获取关注的内容。 本文介绍了如何创建控制台应用,通过 .NET 客户端对象模型对文档和网站使用“关注内容”功能。

以下对象是用于“关注内容”任务的主要 API:

注意

这些 API 也可用于“关注人员”任务,但 SocialFollowingManager 中的 GetSuggestionsGetFollowers 方法仅支持关注人员,不支持关注内容。 若要详细了解如何使用 SocialFollowingManager,请参阅在 SharePoint 中关注内容在 SharePoint 中关注人员。 有关演示如何关注人员的代码示例,请参阅 如何:在 SharePoint 中使用 .NET 客户端对象模型关注人员

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

若要创建一个通过 .NET 客户端对象模型对文档和网站使用关注内容功能的控制台应用程序,您将需要具备以下条件:

  • SharePoint 配置有“我的网站”,为当前用户创建了“我的网站”,并将文档上传到 SharePoint 文档库

  • Visual Studio 2012

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

注意

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

创建控制台应用,通过 SharePoint .NET 客户端对象模型使用“关注内容”功能

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

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

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

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

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

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

代码示例:使用 SharePoint .NET 客户端对象模型开始和停止关注内容

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

  • 使用 IsFollowed 方法检查当前用户是否关注特定文档或网站。

  • 使用 Follow 方法开始关注文档或网站。

  • 使用 StopFollowing 方法停止关注文档或网站。

  • 使用 GetFollowedCount 方法获取当前用户关注的文档或网站的计数。

此代码示例使用 Follow 方法返回的 SocialFollowResult 对象来确定是启动还是停止跟踪目标项。

注意

运行代码前,请先更改 serverUrlcontentUrl 变量的占位符值。 若要使用网站(而不是文档),请使用注释掉的变量。


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

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

            // Replace the following placeholder values with the URL of the target
            // server and target document (or site).
            const string serverUrl = "http://serverName";
            const string contentUrl = @"http://serverName/libraryName/fileName";
            const SocialActorType contentType = SocialActorType.Document;
            // Do not use a trailing '/' for a subsite.
            //const string contentUrl = @"http://serverName/subsiteName"; 
            //const SocialActorType contentType = SocialActorType.Site;

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

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

            // Create a SocialActorInfo object to represent the target item.
            SocialActorInfo actorInfo = new SocialActorInfo();
            actorInfo.ContentUri = contentUrl;
            actorInfo.ActorType = contentType;

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

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

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

            // Get the current count of followed items.
            WriteFollowedCount(actorInfo.ActorType);

            // Try to follow the target item. 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 item.
            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 items.
            Console.Write("Updated count: ");
            WriteFollowedCount(actorInfo.ActorType);
            Console.ReadKey();
        }

        // Get the count of the items that the current user is following.
        static void WriteFollowedCount(SocialActorType type)
        {

            // Set the parameter for the GetFollowedCount method, and
            // handle the case where the item is a site. 
            SocialActorTypes types = SocialActorTypes.Documents;
            if (type != SocialActorType.Document)
            {
                types = SocialActorTypes.Sites;
            }

            ClientResult<int> followedCount = followingManager.GetFollowedCount(types);
            clientContext.ExecuteQuery();
            Console.WriteLine("{0} followed {1}", followedCount.Value, types.ToString().ToLower());
        }
    }
}

代码示例:使用 SharePoint .NET 客户端对象模型获取关注的内容

以下代码示例获取当前用户正在关注的文档和网站并获取有关用户的关注内容状态的信息。 该代码示例演示如何:

  • 使用 IsFollowed 方法检查当前用户是否关注目标文档和网站。

  • 使用 GetFollowedCount 方法获取当前用户关注的文档和网站的计数。

  • 使用 GetFollowed 方法获取当前用户关注的文档和网站。

  • 遍历各组内容,并获取每项的名称、内容 URI 和 URI。

注意

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


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

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

            // Replace the following placeholder values with the URLs of
            // the target server, document, and site.
            const string serverUrl = "http://serverName";
            const string docContentUrl = @"http://serverName/libraryName/fileName";
            const string siteContentUrl = @"http://serverName/subsiteName"; // do not use a trailing '/' for a subsite

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

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

            // Create SocialActorInfo objects to represent the target 
            // document and site.
            SocialActorInfo docActorInfo = new SocialActorInfo();
            docActorInfo.ContentUri = docContentUrl;
            docActorInfo.ActorType = SocialActorType.Document;
            SocialActorInfo siteActorInfo = new SocialActorInfo();
            siteActorInfo.ContentUri = siteContentUrl;
            siteActorInfo.ActorType = SocialActorType.Site;

            // Find out whether the current user is following the target
            // document and site.
            ClientResult<bool> isDocFollowed = followingManager.IsFollowed(docActorInfo);
            ClientResult<bool> isSiteFollowed = followingManager.IsFollowed(siteActorInfo);

            // Get the count of documents and sites that the current
            // user is following.
            ClientResult<int> followedDocCount = followingManager.GetFollowedCount(SocialActorTypes.Documents);
            ClientResult<int> followedSiteCount = followingManager.GetFollowedCount(SocialActorTypes.Sites);

            // Get the documents and the sites that the current user
            // is following.
            ClientResult<SocialActor[]> followedDocResult = followingManager.GetFollowed(SocialActorTypes.Documents);
            ClientResult<SocialActor[]> followedSiteResult = followingManager.GetFollowed(SocialActorTypes.Sites);

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

            // Write the results to the console window.
            Console.WriteLine("Is the current user following the target document? {0}", isDocFollowed.Value);
            Console.WriteLine("Is the current user following the target site? {0}", isSiteFollowed.Value);
            if (followedDocCount.Value > 0)
            {
                IterateThroughContent(followedDocCount.Value, followedDocResult.Value);
            } if (followedSiteCount.Value > 0)
            {
                IterateThroughContent(followedSiteCount.Value, followedSiteResult.Value);
            }
            Console.ReadKey();
        }

        // Iterate through the items and get each item's display
        // name, content URI, and absolute URI.
        static void IterateThroughContent(int count, SocialActor[] actors)
        {
            SocialActorType actorType = actors[0].ActorType;
            Console.WriteLine("\\nThe current user is following {0} {1}s:", count, actorType.ToString().ToLower());
            foreach (SocialActor actor in actors)
            {
                Console.WriteLine("  - {0}", actor.Name);
                Console.WriteLine("\\tContent URI: {0}", actor.ContentUri);
                Console.WriteLine("\\tURI: {0}", actor.Uri);
            }
        }
    }
}

另请参阅