在 SharePoint 中使用 .NET 客户端对象模型对社交源执行读取和写入操作

创建一个使用 SharePoint .NET 客户端对象模型读取和写入好友动态订阅源的控制台应用程序。

创建使用 SharePoint .NET 客户端对象模型读取和写入好友动态订阅源的控制台应用程序的先决条件

您将创建的控制台应用程序可检索目标用户的新闻源并输出来自编号列表的每个线索中的根帖。 然后,对所选线索发布简单的文本回复。 同样的方法 ( CreatePost ) 可用于发布帖子和回复新闻源。

若要创建控制台应用,需要满足以下条件:

  • SharePoint 配置有“我的网站”,并为当前用户和目标用户创建了个人网站,同时目标用户撰写了几篇帖子
  • Visual Studio 2012
  • 对登录用户的 User Profile Service 应用的完全控制访问权限

注意

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

使用 SharePoint 社交源需要了解的核心概念

表 1 包含指向介绍您在开始前应当了解的核心概念的文章链接。

表 1. 使用 SharePoint 社交源的核心概念

文章标题 描述
使用 SharePoint 中的社交功能开始进行开发 了解如何开始编程实现 社交源和微博帖子、关注人员和内容(documents.md、sites.md 和 tags.md),以及开始使用用户配置文件。
在 SharePoint 中使用社交源 了解使用好友动态订阅源的常见编程任务和用于执行任务的 API。

在 Visual Studio 2008 中创建控制台应用程序和添加对客户端程序集的引用

  1. 在您的开发计算机上,打开 Visual Studio 2008。

  2. 在菜单栏上,依次选择"文件"、"新建"、"项目"。 . 在"新建项目"对话框中,从对话框顶部的下拉列表中选择".NET Framework 4.5"。

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

  4. 将项目命名为 ReadWriteMySite,然后单击"确定"按钮。

  5. 添加对客户端程序集的引用,如下所示:

    1. 在"解决方案资源管理器"中,打开 ReadWriteMySite 项目的快捷菜单,然后选择"添加引用"。

    2. 在“引用管理器”对话框中,选择以下程序集:

      • Microsoft.SharePoint.Client
      • Microsoft.SharePoint.Client.Runtime
      • Microsoft.SharePoint.Client.UserProfiles

      如果开发计算机运行的是 SharePoint,程序集位于“扩展”类别中。 否则,转到客户端程序集的下载位置(请参阅 SharePoint 客户端组件)。

  6. 在 Program.cs 文件中,添加以下 using 语句。

using Microsoft.SharePoint.Client;
using Microsoft.SharePoint.Client.Social;

使用 SharePoint .NET 客户端对象模型检索目标用户的好友动态订阅源

  1. 为服务器 URL 和目标用户的帐户凭据声明变量。

    const string serverUrl = "http://serverName/";
    const string targetUser = "domainName\\userName";
    

    注意

    在运行代码之前, http://serverName/ 请记住替换 和 domainName\\userName 占位符值。

  2. 在 方法中 Main() ,初始化 SharePoint 客户端上下文。

    ClientContext clientContext = new ClientContext(serverUrl);
    
  3. 创建 SocialFeedManager 实例。

    SocialFeedManager feedManager = new SocialFeedManager(clientContext);
    
  4. 为您要检索的订阅源内容指定参数。

    SocialFeedOptions feedOptions = new SocialFeedOptions();
    feedOptions.MaxThreadCount = 10;
    

    默认选项将返回订阅源中前 20 个线索,按最后修改日期排序。

  5. 获取目标用户的源。

    ClientResult<SocialFeed> feed = feedManager.GetFeedFor(targetUser, feedOptions);
    clientContext.ExecuteQuery();
    

    GetFeedFor 返回一个 ClientResult<T> 对象,该对象将线程集合存储在其 Value 属性中。

使用 SharePoint .NET 客户端对象模型遍历并读取社交源

以下代码可循环访问订阅源中的线索。 它会检查每个线程是否具有 CanReply 属性,然后获取线程标识符和根帖子的文本。 该代码还可以创建词典以存储线索标识符(用于回复线索)以及将根帖的文本写入控制台。

Dictionary<int, string> idDictionary = new Dictionary<int, string>();
for (int i = 0; i < feed.Value.Threads.Length; i++)
{
    SocialThread thread = feed.Value.Threads[i];
    string postText = thread.RootPost.Text;
    if (thread.Attributes.HasFlag(SocialThreadAttributes.CanReply))
    {
        idDictionary.Add(i, thread.Id);
        Console.WriteLine("\\t" + (i + 1) + ". " + postText);
    }
}

使用 SharePoint .NET 客户端对象模型对好友动态订阅源发表回复

  1. (仅与 UI 相关)获取要回复的线索并提示用户的回复。

    Console.Write("Which post number do you want to reply to?  ");
    string threadToReplyTo = "";
    int threadNumber = int.Parse(Console.ReadLine()) - 1;
    idDictionary.TryGetValue(threadNumber, out threadToReplyTo);
    Console.Write("Type your reply:  ");
    
  2. 定义回复。 以下代码可从控制台应用程序获取回复的文本内容。

    SocialPostCreationData postCreationData = new SocialPostCreationData();
    postCreationData.ContentText = Console.ReadLine();
    
  3. 发布回复。 threadToReplyTo 参数表示线程的 Id 属性。

    feedManager.CreatePost(threadToReplyTo, postCreationData);
    clientContext.ExecuteQuery();
    

    注意

    CreatePost 方法还用于通过传递第一个参数的 null 将根帖子发布到当前用户的源。

  4. (仅与 UI 相关)退出程序。

    Console.WriteLine("Your reply was published.");
    Console.ReadKey(false);
    
  5. 若要测试控制台应用程序,请在菜单栏上,依次选择"调试"和"开始调试"。

代码示例:使用 SharePoint .NET 客户端对象模型检索订阅源和回帖

以下示例是来自 Program.cs 文件的完整代码。

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

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

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

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

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

            // Specify the parameters for the feed content that you want to retrieve.
            SocialFeedOptions feedOptions = new SocialFeedOptions();
            feedOptions.MaxThreadCount = 10;

            // Get the target owner's feed (posts and activities) and then run the request on the server.
            ClientResult<SocialFeed> feed = feedManager.GetFeedFor(targetUser, feedOptions);
            clientContext.ExecuteQuery();

            // Create a dictionary to store the Id property of each thread. This code example stores
            // the ID so a user can select a thread to reply to from the console application.
            Dictionary<int, string> idDictionary = new Dictionary<int, string>();
            for (int i = 0; i < feed.Value.Threads.Length; i++)
            {
                SocialThread thread = feed.Value.Threads[i];

                // Keep only the threads that can be replied to.
                if (thread.Attributes.HasFlag(SocialThreadAttributes.CanReply))
                {
                    idDictionary.Add(i, thread.Id);

                    // Write out the text of the post.
                    Console.WriteLine("\\t" + (i + 1) + ". " + thread.RootPost.Text);
                }
            }
            Console.Write("Which post number do you want to reply to?  ");

            string threadToReplyTo = "";
            int threadNumber = int.Parse(Console.ReadLine()) - 1;
            idDictionary.TryGetValue(threadNumber, out threadToReplyTo);

            Console.Write("Type your reply:  ");

            // Define properties for the reply.
            SocialPostCreationData postCreationData = new SocialPostCreationData();
            postCreationData.ContentText = Console.ReadLine();

            // Post the reply and make the changes on the server.
            feedManager.CreatePost(threadToReplyTo, postCreationData);
            clientContext.ExecuteQuery();

            Console.WriteLine("Your reply was published.");
            Console.ReadKey(false);

            // TODO: Add error handling and input validation.
        }
    }
}

后续步骤

若要了解如何通过 .NET 客户端对象模型使用好友动态订阅源来执行更多读取任务和写入任务,请参阅以下内容:

另请参阅