Javascript Sharepoint REST创建讨论回复
我正在寻找一些关于如何使用2013 Sharepoint REST端点创建讨论回复的提示。我没有使用内置的SP javascript库,而是直接使用jQueryAjax调用访问REST端点 我在尝试创建回复时遇到的问题是,它将文章创建为新线程,而不是回复。我已经在网上搜索过了,我所能找到的只是与URL路径有关的东西 如果我使用“sharepointEndPoint/_api/web/lists/getByTitle('discussions')/Items”url,它将创建文章作为新线程 例如,我尝试将父线程的ID附加到括号“(1)”中项目的末尾,还尝试了“/title of parent thread”,但两者都会引发错误Javascript Sharepoint REST创建讨论回复,javascript,jquery,rest,sharepoint,Javascript,Jquery,Rest,Sharepoint,我正在寻找一些关于如何使用2013 Sharepoint REST端点创建讨论回复的提示。我没有使用内置的SP javascript库,而是直接使用jQueryAjax调用访问REST端点 我在尝试创建回复时遇到的问题是,它将文章创建为新线程,而不是回复。我已经在网上搜索过了,我所能找到的只是与URL路径有关的东西 如果我使用“sharepointEndPoint/_api/web/lists/getByTitle('discussions')/Items”url,它将创建文章作为新线程 例如,
我还针对文章设置了ParentItemID和ParentFolderId,但sharepoint仍然将其创建为新线程,而不是回复 无法通过消息负载指定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
}
在哪里
有更新吗?我也面临同样的问题,如“针对文章设置ParentItemID和ParentFolderId,但sharepoint仍将其创建为新线程而不是回复。”?虽然这似乎可行(回复显示在父帖子的讨论线程中),但它没有在回复上设置
ParentItemID
属性,它仍然是null
,这破坏了讨论的某些特性。见本文:
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);
});
}