Recently I met with a requirement to enable the Rating feature in SharePoint Office 365 List/Library Programmatically. It is very straight forward and simple to implement.
Thought of sharing the small snippet to the Community.
To enable the Rating, we need to Add 6 Site Columns to the List/Library. The 5 Site Columns are as follows.
Guid RatingsFieldGuid_AverageRating = new Guid("5a14d1ab-1513-48c7-97b3-657a5ba6c742"); Guid RatingsFieldGuid_RatingCount = new Guid("b1996002-9167-45e5-a4df-b2c41c6723c7"); Guid RatingsFieldGuid_RatedBy = new Guid("4D64B067-08C3-43DC-A87B-8B8E01673313"); Guid RatingsFieldGuid_Ratings = new Guid("434F51FB-FFD2-4A0E-A03B-CA3131AC67BA"); Guid LikeFieldGuid_LikedBy = new Guid("2cdcd5eb-846d-4f4d-9aaf-73e8e73c7312"); Guid LikeFieldGuid_LikeCount = new Guid("6e4d832b-f610-41a8-b3e0-239608efda41");
4 for Ratings and 2 for Likes. As all of us know, the Rating Settings contains 2 types. Either it can be Likes or Star Ratings.
The Console Application will be as follows.
class Program { static void Main(string[] args) { EnableRating(); } public static void EnableRating() { OfficeDevPnP.Core.AuthenticationManager authMgr = new OfficeDevPnP.Core.AuthenticationManager(); string siteUrl = "https://**********.sharepoint.com/sites/DeveloperSite"; string userName = "Sathish@********.onmicrosoft.com"; string password = "********"; string listTitle = "MyDocLib"; Guid RatingsFieldGuid_AverageRating = new Guid("5a14d1ab-1513-48c7-97b3-657a5ba6c742"); Guid RatingsFieldGuid_RatingCount = new Guid("b1996002-9167-45e5-a4df-b2c41c6723c7"); Guid RatingsFieldGuid_RatedBy = new Guid("4D64B067-08C3-43DC-A87B-8B8E01673313"); Guid RatingsFieldGuid_Ratings = new Guid("434F51FB-FFD2-4A0E-A03B-CA3131AC67BA"); Guid LikeFieldGuid_LikedBy = new Guid("2cdcd5eb-846d-4f4d-9aaf-73e8e73c7312"); Guid LikeFieldGuid_LikeCount = new Guid("6e4d832b-f610-41a8-b3e0-239608efda41"); using (var ctx = authMgr.GetSharePointOnlineAuthenticatedContextTenant(siteUrl, userName, password)) { ctx.Load(ctx.Web); ctx.ExecuteQuery(); List filesLibrary = ctx.Web.GetListByTitle(listTitle); ctx.Load(filesLibrary); ctx.Load(filesLibrary); ctx.ExecuteQuery(); ctx.Load(filesLibrary.RootFolder, p => p.Properties); ctx.ExecuteQuery(); filesLibrary.RootFolder.Properties["Ratings_VotingExperience"] = "Likes"; filesLibrary.RootFolder.Update(); ctx.ExecuteQuery(); EnsureField(filesLibrary, RatingsFieldGuid_RatingCount, ctx); EnsureField(filesLibrary, RatingsFieldGuid_RatedBy, ctx); EnsureField(filesLibrary, RatingsFieldGuid_Ratings, ctx); EnsureField(filesLibrary, RatingsFieldGuid_AverageRating, ctx); EnsureField(filesLibrary, LikeFieldGuid_LikedBy, ctx); EnsureField(filesLibrary, LikeFieldGuid_LikeCount, ctx); filesLibrary.Update(); ctx.ExecuteQuery(); ctx.Load(filesLibrary, view => view.DefaultView); ctx.ExecuteQuery(); var defaultView = filesLibrary.DefaultView; defaultView.ViewFields.Add("LikesCount"); defaultView.Update(); ctx.ExecuteQuery(); } } private static Field EnsureField(List list, Guid fieldId, ClientContext _context) { FieldCollection fields = list.Fields; FieldCollection availableFields = list.ParentWeb.AvailableFields; Field field = availableFields.GetById(fieldId); _context.Load(fields); _context.Load(field, p => p.SchemaXmlWithResourceTokens, p => p.Id, p => p.InternalName, p => p.StaticName); _context.ExecuteQuery(); if (!fields.Any(p => p.Id == fieldId)) { var newField = fields.AddFieldAsXml(field.SchemaXmlWithResourceTokens, false, AddFieldOptions.AddFieldInternalNameHint | AddFieldOptions.AddToAllContentTypes); return newField; } return field; } }
Just updating the Property Bag Value with “Likes” or “Ratings” will do the magic for us. Provided those 6 site columns should be added.
filesLibrary.RootFolder.Properties["Ratings_VotingExperience"] = "Likes"; filesLibrary.RootFolder.Properties["Ratings_VotingExperience"] = "Ratings"; filesLibrary.RootFolder.Properties["Ratings_VotingExperience"] = "";
If we want to disable rating, then the Property Bag Value will be empty.
Hope the small snippet will help a lot of effort.
Happy Coding,
Sathish Nadarajan.
Leave a comment