Post links to social newsfeed via REST in SharePoint 2013
Recently, I had to write a SharePoint App that allows users to "social share" documents, videos, pictures from the item's content menu (ECB) to their social newsfeed.
Here is a snippet of JavaScript code to post the link of the item to the user's social newfeed via REST.
$.ajax({
url: myurl,
type:
"POST",
data: JSON.stringify({
'restCreationData':{
'__metadata':{
'type':'SP.Social.SocialRestPostCreationData'
},
'ID': null,
'creationData': {
'__metadata': {
'type': 'SP.Social.SocialPostCreationData'
},
'ContentItems': {
'results': [
{
'__metadata': {
'type': 'SP.Social.SocialDataItem'
},
'Text': statusLink,
'Uri':statusLink,
'ItemType':1//0 - document; 1 - link; 3 - tag
}
]
},
'ContentText': 'Check out this: {0}',
'UpdateStatusText': false
}
}
}),
headers: {
"accept":"application/json;odata=verbose",
"content-type":"application/json;odata=verbose",
"X-RequestDigest":$("#__REQUESTDIGEST").val()
},
success:
function () {
//alert("posted!");
window.parent.postMessage(
"CloseCustomActionDialogRefresh", "*");
},
error:
function(xhr, ajaxOptions, thrownError){
alert(
"post error: " + xhr.status + ";" + thrownError);
window.parent.postMessage(
"CloseCustomActionDialogRefresh", "*");
}
});
Comments
Anonymous
September 24, 2013
Can you show us how you construct or an example of your "myurl"?Anonymous
October 08, 2013
Hi Todd, Sorry for the late reply. Here is an example of how to construct your "myurl":
In your element.xml that defines your ECB's custom action, pass the {AppWebUrl} handle to the target page (in my case, ~appWebUrl/Pages/Default.aspx) via a parameter. <CustomAction Id="e6837758-0af2-413f-8934-b62bb89def3f.Social Sharing" RegistrationType="ContentType" RegistrationId="0x0101" Location="EditControlBlock" Sequence="101" Title="Post to Newsfeed" HostWebDialog="true" HostWebDialogHeight="400" HostWebDialogWidth="250" > <!-- Update the Url below to the page you want the custom action to use. Start the URL with the token ~remoteAppUrl if the page is in the associated web project, use ~appWebUrl if page is in the app project. --> <UrlAction Url="~appWebUrl/Pages/Default.aspx?item={ItemUrl}&site={SiteUrl}&spapp={AppWebUrl}" /> </CustomAction> 2. In your .js file, first get the appweburl from the target page's parameter. Then construct the rest of myurl. var appweburl = getParameterByName("spapp"); var myurl = appweburl + "/_api/social.feed/my/Feed/Post"; Hope this helps.
- Anonymous
November 19, 2014
Hi Rita, Any pointers on how this javascript could be adapted to create a button in Publishing pages to 'share to newsfeed' - rather than an ECB custom action? Looks awesome, btw.