【问题标题】:Sharepoint REST create discussion replySharepoint REST 创建讨论回复
【发布时间】:2014-12-20 11:38:38
【问题描述】:

我正在寻找一些关于如何使用 2013 Sharepoint REST 端点创建讨论回复的提示。我没有使用内置的 SP javascript 库,而是使用 jQuery ajax 调用直接访问 REST 端点。

我在尝试创建回复时遇到的问题是,它将文章创建为新线程而不是回复。我在网上搜索过,我能想到的只是与 URL 路径有关。

如果我使用“sharepointEndPoint/_api/web/lists/getByTitle('discussions')/Items” url,它将创建文章作为新线程。

例如,我尝试将父线程的 ID 附加到括号“(1)”中的项目末尾以及“/父线程的标题”中,但两者都抛出错误。

我还针对文章设置了 ParentItemID 和 ParentFolderId,但 sharepoint 仍将其创建为新线程而不是回复。

【问题讨论】:

  • 有什么更新吗?我也面临同样的问题,例如“针对文章设置 ParentItemID 和 ParentFolderId,但 sharepoint 仍将其创建为新线程而不是回复。”?

标签: javascript jquery rest sharepoint


【解决方案1】:

ParentItemID 属性无法通过消息负载指定,因为它是一个只读属性,这意味着创建消息项的以下查询失败:

Url  /_api/web/lists/getbytitle('Discussions')/items
Method POST
Data { 
    '__metadata': { "type": "SP.Data.DiscussionsListItem" },
   'Body': "Message text goes here",  
   'FileSystemObjectType': 0, 
   'ContentTypeId': '<MessageContentTypeId>', 
   'ParentItemID': <DiscussionItemId>   //can't be set since it is read only
}  

解决方案

要在讨论项(文件夹)下创建消息,您可以考虑以下解决方案:创建消息项后,它会移动到讨论项(文件夹容器)下

示例

以下示例演示了如何通过 SharePoint REST API 在讨论区中创建消息(回复):

var listTitle = "Discussions"; //Discussions Board title
var webUrl = _spPageContextInfo.webAbsoluteUrl;
var messagePayload = {
   '__metadata': { "type": "SP.Data.DiscussionsListItem" },  //set DiscussionBoard entity type name
   'Body': "Message text goes here",  //message Body
   'FileSystemObjectType': 0, //set to 0 to make sure Message Item is created
   'ContentTypeId': '0x0107008822E9328717EB48B3B665EE2266388E', //set Message content type
   'ParentItemID': 123   //set Discussion item (topic) Id
};

createNewDiscussionReply(webUrl,listTitle,messagePayload)
.done(function(item)
{
    console.log('Message(reply) has been sent');
})
.fail(function(error){
    console.log(JSON.stringify(error));
});

在哪里

function executeJson(options) 
{
    var headers = options.headers || {};
    var method = options.method || "GET";
    headers["Accept"] = "application/json;odata=verbose";
    if(options.method == "POST") {
        headers["X-RequestDigest"] = $("#__REQUESTDIGEST").val();
    }   

    var ajaxOptions = 
    {       
       url: options.url,   
       type: method,  
       contentType: "application/json;odata=verbose",
       headers: headers
    };
    if("data" in options) {
      ajaxOptions.data = JSON.stringify(options.data);
    }  

    return $.ajax(ajaxOptions);
}


function createListItem(webUrl,listTitle,payload){
    var url = webUrl + "/_api/web/lists/getbytitle('" + listTitle + "')/items";
    return executeJson({
        "url" :url,
        "method": 'POST',
        "data": payload
    });
}

function moveListItem(webUrl,listTitle,itemId,folderUrl){
    var url = webUrl + "/_api/web/lists/getbytitle('" + listTitle + "')/getItemById(" + itemId + ")?$select=FileDirRef,FileRef";
    return executeJson({
        "url" :url
    })  
    .then(function(result){
        var fileUrl = result.d.FileRef;
        var fileDirRef = result.d.FileDirRef;
        var moveFileUrl = fileUrl.replace(fileDirRef,folderUrl);
        var url = webUrl + "/_api/web/getfilebyserverrelativeurl('" + fileUrl + "')/moveto(newurl='" + moveFileUrl + "',flags=1)";
        return executeJson({
            "url" :url,
            "method": 'POST'
        });
     });
}


function getParentTopic(webUrl,listTitle,itemId){
    var url = webUrl + "/_api/web/lists/getbytitle('" + listTitle + "')/getItemById(" + itemId + ")/Folder";
    return executeJson({
        "url" :url,
    });
}


function createNewDiscussionReply(webUrl,listTitle, messagePayload){ 
    var topicUrl = null;
    return getParentTopic(webUrl,listTitle,messagePayload.ParentItemID)
    .then(function(result){
        topicUrl = result.d.ServerRelativeUrl;
        return createListItem(webUrl,listTitle,messagePayload);
    })
    .then(function(result){
        var itemId = result.d.Id;
        return moveListItem(webUrl,listTitle,itemId,topicUrl);
    });
}

【讨论】:

  • 虽然这似乎有效(回复显示在父帖子的讨论线程中)它没有在回复上设置 ParentItemID 属性,它仍然是 null 这打破了一些讨论的特点。见这篇文章:REST api support for discussion list
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多