Partager via


How To Use CSOM with Ratings in SharePoint 2013

I wrote a related post today about how to find the fields names in a list: https://blogs.technet.com/b/speschka/archive/2013/07/08/how-to-quickly-and-easily-get-a-list-of-fields-in-a-sharepoint-2013-list.aspx. The reason I wrote that was because it came in handy when I was trying to use CSOM to manage ratings on list items. What I found is that there's a nice little API to add ratings, but not one to get ratings. Here's a quick overview:

To set ratings, the first thing you need to do is have a reference to Microsoft.SharePoint.Client.UserProfiles. In there you will find a static class called Reputation that allows you add a rating to an individual item. The code to apply it them looks relatively simple:

 

using (ClientContext ctx = new ClientContext(https://yourSiteUrl))
{
                    Web w = ctx.Web;
                    List l = w.Lists.GetByTitle("yourListName");
                    ctx.Load(l, info => info.Id);
                    ctx.ExecuteQuery();

 

                    string ListID = l.Id.ToString();
                    Microsoft.Office.Server.ReputationModel.Reputation.SetRating(ctx, ListID, 1, 5);
                    ctx.ExecuteQuery();
}

In this example I hard-coded the rating to apply to the list item with the id of 1, and I gave it a rating of 5. Pretty simple, yeah? Cool. Now getting the ratings for a list item was a little more complicated. There isn't good OM code to do it, so you have to finesse it a bit. Here's what it looks like:

using (ClientContext ctx = new ClientContext("https://yourSiteUrl"))
{
                    Web w = ctx.Web;
                    List l = w.Lists.GetByTitle("yourListName");

                    CamlQuery cq = CamlQuery.CreateAllItemsQuery();
                    ListItemCollection lic = l.GetItems(cq);

                    ctx.Load(lic, items =>
                        items.IncludeWithDefaultProperties(
                        item => item.Id,
                        item => item["AverageRating"],
                        item => item["RatingCount"],
                        item => item["Ratings"]));

                    ctx.ExecuteQuery();

                    foreach (ListItem li in lic)
                    {
                        Debug.WriteLine(li["AverageRating"]);
                        Debug.WriteLine(li["RatingCount"]);
                        Debug.WriteLine(li["Ratings"]);
                    }
}

Really the only interesting thing I think there is just that you have to manually plug in the list of the hidden fields that SharePoint uses to track the rating information. Using this same approach, you can also grab Likes information as well - just use the post I linked to above to get the appropriate field names.

Comments

  • Anonymous
    January 01, 2003
    thanks for sharing.
  • Anonymous
    January 01, 2003
    The comment has been removed
  • Anonymous
    November 08, 2013
    The comment has been removed
  • Anonymous
    May 25, 2014
    Pingback from Error Setting Ratings using SharePoint Client Object Model | Question and Answer
  • Anonymous
    July 04, 2014
    Same exception for me in Provider Hosted App, testing directly from Visual Studio:
    "The assembly Microsoft.SharePoint.Portal.Proxy, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c does not support app authentication."
  • Anonymous
    September 18, 2014
    The comment has been removed
  • Anonymous
    January 26, 2015
    f