В статье описан способ проставления "лайков" с помощью 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];
}