В статье описан способ проставления "лайков" с помощью JSOM для изображений, расположенных в библиотеке рисунков на портале SharePoint 2013.
Методы для работы с "лайками" в SharePoint 2013
Для начала нам нужно убедиться, что на странице подгружается файл 'reputation.js'.
Простейший код метода для "лайка" изображения приведен в листинге ниже:
Для того, чтобы подсчитать число "лайков" и определить - "лайкал" ли текущий пользователь конкретное изображение или нет, я использую следующий код для метода из листинга:
Простейший код метода для "лайка" изображения приведен в листинге ниже:
var listID = "{910B4287-09F5-4942-95FE-171B689722FD}"; //GUID библиотеки рисунков var itemID = 54; //ID элемента var like = true; //установка-снятие 'лайка' var aContextObject = new SP.ClientContext(); EnsureScriptFunc('reputation.js', 'Microsoft.Office.Server.ReputationModel.Reputation', function () { Microsoft.Office.Server.ReputationModel. Reputation.setLike(aContextObject, listID, itemID, like); aContextObject.executeQueryAsync( function () { //success }, function (sender, args) { //fail }); });
Для того, чтобы подсчитать число "лайков" и определить - "лайкал" ли текущий пользователь конкретное изображение или нет, я использую следующий код для метода из листинга:
var listID = "{910B4287-09F5-4942-95FE-171B689722FD}"; //GUID библиотеки рисунков var itemID = 54; //ID элемента var context = new SP.ClientContext(_spPageContextInfo.webServerRelativeUrl); var list = context.get_web().get_lists().getById(listID); var item = list.getItemById(itemID); context.load(item, "LikedBy", "ID", "LikesCount"); context.executeQueryAsync(Function.createDelegate(this, function (success) { // Check if the user id of the current users is in the collection LikedBy. var likeDisplay = false; var $v_0 = item.get_item('LikedBy'); var itemc = item.get_item('LikesCount'); if (!SP.ScriptHelpers.isNullOrUndefined($v_0)) { for (var $v_1 = 0, $v_2 = $v_0.length; $v_1 < $v_2; $v_1++) { var $v_3 = $v_0[$v_1]; if ($v_3.$1E_1 === _spPageContextInfo.userId) { likeDisplay = true; } } } alert("Число лайков: " + itemc + ", Пользователь уже проголосовал: " + likeDisplay); }), Function.createDelegate(this, function (sender, args) { }));
Очистка проставленных "лайков" через Powershell
Бывает так, что нужно очистить проставленные "лайки" пользователей в пределах одного списка. В SharePoint 2010 для этого было достаточно отключить/включить функционал рейтингов в настройках списка. В версии 2013 такой способ не сработал, поэтому я написал простой скрипт:
if(-not(Get-PSSnapin | Where { $_.Name -eq "Microsoft.SharePoint.PowerShell"})) { Write-Host "Подключение остнастки" Add-PSSnapin Microsoft.SharePoint.PowerShell; } $sourceWebURL = "http://test/sites/fotos/" $sourceListName = "Рисунки1" $sourceListFieldCount="Число оценок `"нравится`"" $sourceListFieldUsers="Понравилось пользователям" $spSourceWeb = Get-SPWeb $sourceWebURL $spSourceList = $spSourceWeb.Lists[$sourceListName] $spSourceItems = $spSourceList.Items $spSourceItems | ForEach-Object { Write-Host $_['ID'] Write-Host "Before:"+ $_[$sourceListFieldCount] + ","+ $_[$sourceListFieldUsers]; $_[$sourceListFieldCount]=""; $_[$sourceListFieldUsers]=""; $_.Update() Write-Host "After:"+ $_[$sourceListFieldCount] + ","+ $_[$sourceListFieldUsers]; }