2

Can anybody please help me by providing some sample code for adding replies to Discussion lists using REST API? I already have a look on this post, but the answered guy has given the jsom solution. But i need a REST API solution. Please help. It's something urgent for us. Thanks in advance.

3
  • The SP.Utilities namespace may not be exposed via REST. Is there a reason you cannot use JSOM?
    – wjervis
    Jun 2, 2015 at 13:30
  • Hi, the front end will be the Android platform. So weed the REST API
    – MAC
    Jun 2, 2015 at 13:56
  • @MAC hello. have you get Solution for this.?? Aug 4, 2016 at 7:30

1 Answer 1

2

Even though SP.Utilities.Utility.createNewDiscussionReply method is not exposed via SharePoint REST API, the following example demonstrates how to create a message (or reply) to a discussion item:

Example

var listTitle = "Discussions"; //Discussions Board title
var webUrl = _spPageContextInfo.webAbsoluteUrl;
var messagePayload = {
   '__metadata': { "type": "SP.Data.DiscussionsListItem" },  //set DiscussionBoard entity type name
   'Body': "Thanks for the information",  //message Body
   'FileSystemObjectType': 0, //setto 0 to make sure Mesage Item
   'ContentTypeId': '0x0107008822E9328717EB48B3B665EE2266388E', //set Message content type
   'ParentItemID': 14  //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));
});

where

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);
    });
}

createNewDiscussionReply.js gist

3
  • This is very helpful thank you. But really? It requires 5 network calls to create a discussion reply?
    – Rothrock
    Nov 14, 2016 at 19:47
  • I'm afraid so. The point is that ParentItemId property is not settable and in order to create a reply the item (which represents a message) is getting moved under a folder (which represents a subject) once it is created Nov 14, 2016 at 20:47
  • While this appears to work (the reply shows up in the discussion thread of the parent post) it does not set the ParentItemID property on the reply, it remains null which breaks some of the features of discussions. See this article for why: REST api support for discussion list Dec 12, 2020 at 3:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.