在 SharePoint 中使用 REST 服务对社交源执行读取和写入操作

创建一个 SharePoint 托管的应用程序,以使用 REST 服务发布文章和获取当前用户的个人源。

使用 SharePoint REST 服务创建可发布文章和获取好友动态订阅源的 SharePoint 托管的 SharePoint 外接程序的先决条件

本文假定您通过在 Office 365 开发人员网站上使用 Napa来创建 SharePoint 外接程序。 如果使用的是此开发环境,则你已满足先决条件。

注意

转到在 Office 365 上为 SharePoint 外接程序设置开发环境,了解如何注册开发人员网站并开始使用 Napa。

如果不打算在开发人员网站上使用 Napa,需要满足以下条件:

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

  • Visual Studio 2012 和 Visual Studio 2013 的 Office 开发人员工具

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

注意

有关如何设置适合您需求的开发环境的指南,请参阅 开始生成适用于 Office 和 SharePoint 的应用程序

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

您在本文中创建的 SharePoint 承载的应用程序使用 JavaScript 创建 HTTP 请求并将其发送到代表性状态传输 (REST) 终结点。 这些请求可发布文章并获取当前用户的个人订阅源。 表 1 包含指向相关文章的链接,这些文章介绍您在开始使用好友动态订阅源之前应了解的一般概念。

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

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

创建 SharePoint 加载项项目

  1. 在您的开发人员网站上,打开 Napa,然后选择"添加新项目"。

  2. 选择"SharePoint 相关应用程序"模板,将项目命名为 SocialFeedREST,然后选择"创建"按钮。

  3. 指定应用需要的权限:

a. 选择页面底部的“属性”按钮。

b. 在“属性”窗口中,选择“权限”

c. 在“内容”类别中,设置“租户”范围的“写入”权限。

d. 在“社交”类别中,设置“用户配置文件”范围的“读取”权限。

e. 关闭“属性”窗口。

  1. 展开"脚本"节点,选择 App.js 文件,然后删除该文件的内容。

使用 SharePoint REST 服务向好友动态订阅源发布内容

  1. 在 App.js 文件中,为 SocialFeedManager 终结点的 URL 声明一个全局变量。
var feedManagerEndpoint;
  1. 添加下面的代码,以便从查询字符串中获取 SPAppWebUrl 参数,并使用它构建 SocialFeedManager 终结点。
  $(document).ready(function () {
    var appweburl;
    var params = document.URL.split("?")[1].split("&");
    for (var i = 0; i < params.length; i = i + 1) {
        var param = params[i].split("=");
        if (param[0] === "SPAppWebUrl") appweburl = param[1];
    }
    feedManagerEndpoint = decodeURIComponent(appweburl) + "/_api/social.feed";
    postToMyFeed();
});
  1. 添加下面的代码,以便为 /my/Feed/Post 终结点创建 HTTP POST 请求,定义帖子的创建数据并发布该帖子。

    该请求发送请求正文中的 SocialRestPostCreationData 资源。 SocialRestPostCreationData 包含文章的目标位置(在本例中为 null,用以指定当前用户的根帖子),以及定义帖子属性的 SocialPostCreationData 复杂类型。

  
function postToMyFeed() {
    $.ajax( {
        url: feedManagerEndpoint + "/my/Feed/Post",
        type: "POST",
        data: JSON.stringify( { 
            'restCreationData':{
                '__metadata':{ 
                    'type':'SP.Social.SocialRestPostCreationData'
                },
                'ID':null, 
                'creationData':{ 
                    '__metadata':{ 
                        'type':'SP.Social.SocialPostCreationData'
                    },
                'ContentText':'This post was published using REST.',
                'UpdateStatusText':false
                } 
            } 
        }),
        headers: { 
            "accept": "application/json;odata=verbose",
            "content-type":"application/json;odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val()
        },
        success: getMyFeed,
        error: function (xhr, ajaxOptions, thrownError) { 
            alert("POST error:\\n" + xhr.status + "\\n" + thrownError);
        }
    });
}

使用 SharePoint REST 服务检索当前用户的好友动态订阅源

添加下面的代码,以便使用 终结点获取当前用户的 /my/Feed 订阅源类型。 accept 标头请求服务器在其响应中返回订阅源的 JavaScript 对象表示法 (JSON) 表示形式。


function getMyFeed() {
    $.ajax( {
        url: feedManagerEndpoint + "/my/Feed",
        headers: { 
            "accept": "application/json;odata=verbose"
        },
        success: feedRetrieved,
        error: function (xhr, ajaxOptions, thrownError) { 
            alert("GET error:\\n" + xhr.status + "\\n" + thrownError);
        }
    });    
}

使用 SharePoint REST 服务循环访问好友动态订阅源并读取其内容

添加下面的代码,以便使用 JSON.stringifyJSON.parse 函数准备返回的数据,然后循环访问订阅源并获取线索的所有者和根帖子的相应文本。


function feedRetrieved(data) {
    var stringData = JSON.stringify(data);
    var jsonObject = JSON.parse(stringData); 
 
    var feed = jsonObject.d.SocialFeed.Threads; 
    var threads = feed.results;
    var feedContent = "";
    for (var i = 0; i < threads.length; i++) {
        var thread = threads[i];
        var participants = thread.Actors;
        var owner = participants.results[thread.OwnerIndex].Name;
        feedContent += '<p>' + owner + 
            ' said "' + thread.RootPost.Text + '"</p>';
    }  
    $("#message").html(feedContent); 
}

在开发人员网站上运行 SharePoint 相关应用程序

  1. 若要运行应用程序,请选择页面底部的"运行项目"按钮。

  2. 在打开的"是否信任"页面上,选择"信任它"按钮。 该应用程序页面将打开并显示所有者的姓名以及订阅源中每个根帖子的相应文本。

代码示例:使用 SharePoint REST 服务发布文章和获取当前用户的订阅源

下面是有关 App.js 文件的完整代码示例。 该示例发布一篇文章并获取作为 JSON 对象返回的当前用户的个人订阅源。 然后,该示例循环访问该订阅源。


var feedManagerEndpoint;

// Get the SPAppWebUrl parameter from the query string and build
// the feed manager endpoint.
$(document).ready(function () {
    var appweburl;
    var params = document.URL.split("?")[1].split("&amp;");
    for (var i = 0; i < params.length; i = i + 1) {
        var param = params[i].split("=");
        if (param[0] === "SPAppWebUrl") appweburl = param[1];
    }
    feedManagerEndpoint = decodeURIComponent(appweburl)+ "/_api/social.feed";
    postToMyFeed();
});

// Publish a post to the current user's feed by using the 
// "<app web URL>/_api/social.feed/my/Feed/Post" endpoint.
function postToMyFeed() {
    $.ajax( {
        url: feedManagerEndpoint + "/my/Feed/Post",
        type: "POST",
        data: JSON.stringify( { 
            'restCreationData':{
                '__metadata':{ 
                    'type':'SP.Social.SocialRestPostCreationData'
                },
                'ID':null, 
                'creationData':{ 
                    '__metadata':{ 
                        'type':'SP.Social.SocialPostCreationData'
                    },
                'ContentText':'This post was published using REST.',
                'UpdateStatusText':false
                } 
            } 
        }),
        headers: { 
            "accept": "application/json;odata=verbose",
            "content-type":"application/json;odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val()
        },
        success: getMyFeed,
        error: function (xhr, ajaxOptions, thrownError) { 
            alert("POST error:\\n" + xhr.status + "\\n" + thrownError);
        }
    });
}

// Get the current user's feed by using the 
// "<app web URL>/_api/social.feed/my/Feed" endpoint.
function getMyFeed() {
    $.ajax( {
        url: feedManagerEndpoint + "/my/Feed",
        headers: { 
            "accept": "application/json;odata=verbose"
        },
        success: feedRetrieved,
        error: function (xhr, ajaxOptions, thrownError) { 
            alert("GET error:\\n" + xhr.status + "\\n" + thrownError);
        }
    });    
}

// Parse the JSON data and iterate through the feed.
function feedRetrieved(data) {
    var stringData = JSON.stringify(data);
    var jsonObject = JSON.parse(stringData); 
 
    var feed = jsonObject.d.SocialFeed.Threads; 
    var threads = feed.results;
    var feedContent = "";
    for (var i = 0; i < threads.length; i++) {
        var thread = threads[i];
        var participants = thread.Actors;
        var owner = participants.results[thread.OwnerIndex].Name;
        feedContent += '<p>' + owner + 
            ' said "' + thread.RootPost.Text + '"</p>';
    }  
    $("#message").html(feedContent); 
}

后续步骤

请参阅 SharePoint 的社交源 REST API 参考和 SharePoint 关注人员和内容 REST API 参考,了解可用于访问社交功能的其他 REST 终结点。

另请参阅