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.

  • The SP.Utilities namespace may not be exposed via REST. Is there a reason you cannot use JSOM? – wjervis Jun 2 '15 at 13:30
  • Hi, the front end will be the Android platform. So weed the REST API – MAC Jun 2 '15 at 13:56
  • @MAC hello. have you get Solution for this.?? – Vishal Thakkar Aug 4 '16 at 7:30
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

  • This is very helpful thank you. But really? It requires 5 network calls to create a discussion reply? – Rothrock Nov 14 '16 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 – Vadim Gremyachev Nov 14 '16 at 20:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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