четверг, 26 марта 2015 г.

Как лайкать изображения в библиотеке рисунков SharePoint 2013 c помощью JSOM

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

Полезные ссылки


Комментариев нет:

Отправить комментарий