Getting the confusing SharePoint 2013 SocialDataStoreException
Ran into a bit of a problem figuring out an exception I received while writing a SharePoint 2013 apps.
As I was writing an app using the new SharePoint 2013 app model the other day, I ran into an issue when I was trying to follow a site automatically through JavaScript:
The target of the operation was not found. Internal type name: Microsoft.Office.Server.UserProfiles.SocialDataStoreException. Internal error code: 0.
The problem seemed fairly straight-forward. The targeted site I wanted to follow couldn’t be found. However, it didn’t make sense. The instance URL I was targeting (https://chrisweldon.sharepoint.com) did in fact exist. Furthermore, I was not already following that site. So, why was this failing?
Let’s take a look at some code:
SP.SOD.executeOrDelayUntilScriptLoaded(userProfilesLoaded, 'SP.UserProfiles.js');
function userProfilesLoaded() {
SP.SOD.executeFunc('userprofile', 'SP.Social.SocialFollowingManager', followSites);
}
function followSites() {
var context = SP.ClientContext.get_current();
var socialManager = new SP.Social.SocialFollowingManager(context);
var socialSite = new SP.Social.SocialActorInfo();
socialSite.set_contentUri("https://chrisweldon.sharepoint.com");
socialSite.set_actorType(SP.Social.SocialActorType.site);
socialManager.follow(socialSite);
context.executeQueryAsync(
function() { alert('Sites followed!'); },
function(sender, args) { alert('Error: ' + args.get_message()); });
}
This is fairly straight-forward. I simply setup a social actor to follow and call out to the SocialFollowingManager
to attempt to follow that site. This is when I thought, perhaps this is a permissions problem? I’m trying to have the JavaScript object model write a request to the Social datastore. Perhaps it wasn’t authorized.
I changed the permissions in my AppManifest.xml
from Read to Write:
Scope | Permission |
---|---|
User Profiles (Social) | Write |
Sadly, I received the same error message. However, if you read the MSDN Documentation on Developing Social Features in SharePoint 2013, there is a section in there talking about user profiles:
User Profiles (http://sharepoint/social/tenant) The permission request scope used to access all user profiles. Only the profile picture can be changed; all other user profile properties are read-only for apps for SharePoint. Apps that request rights for the User Profiles scope must be installed by a tenant administrator.
In a nutshell, I have to grant Tenant permissions to my app to be able to have my user follow a new site. Therefore, my new permissions look like the following:
Scope | Permission |
---|---|
User Profiles (Social) | Read |
Tenant | Write |
As indicated by the paragraph above, the app now needs to be installed by a tenant administrator. However, in doing so, the app now follows sites (and other content) with ease. Why the obscure error message? That I don’t know, and I hope the SharePoint team might look to address this with a more correct error message in the near future.