четверг, 13 августа 2015 г.

Что делать если шаблон списка не отображается на странице "Добавить приложение"?

Иногда бывает необходимо развернуть уже существующий список с данными на другой коллекции сайтов/ферме SharePoint 2013.
Часто (если структура и размер списка позволяет) я использую для этого стандартные действия через браузер:
  1. Создать шаблон списка 
  2. Скачать файл шаблона (.stp) себе на ПК 
  3. Загрузить скачанный файл в библиотеку шаблонов в новом расположении 
  4. Развернуть новый список по шаблону

Недавно я столкнулся с проблемой: мой шаблон списка, сохраненный через браузер, не отображается на странице "Добавить приложение".

Все рекомендации, которые я нашел в интернете не помогли, пока я не нашел статью 2007 года с описанием подобной проблемы. Привожу описание решения из статьи, модифицированное под SharePoint 2013.

Порядок действий

1. Перейти в Коллекцию шаблонов списков
2. Скачать нужный шаблон на свой ПК
3. Сделать копию файла шаблона, и изменить расширение файла с .stp на .zip
4. Открыть получившийся архив любой соответствующей программой
5. В архиве открыть через Блокнот (или Notepad++) файл manifest.xml
6. Из файла manifest.xml нужно выписать значения параметров: TemplateType, FeatureId

7. Открываем целевой узел, где нужно развернуть список по шаблону и добавляем часть адреса с параметрами:
 https://myportal.ru/testteamsite1/_layouts/15/new.aspx?CustomTemplate=testlist001%2Estp&FeatureId={00bfea71-de22-43b2-a848-c05709900100}&ListTemplate=100

где CustomTemplate - название файла шаблона в Коллекции шаблонов списков,
FeatureId - значение соответствующего параметра из файла manifest.xml,
ListTemplate - значение параметра TemplateType из файла manifest.xml

8. Откроется форма для создания списка. Указываем название и нажимаем "Создать"
9. Создается желаемый список по шаблону с одним элементом как в исходном списке:

Также может быть полезно изменить содержимое .stp файла.
Для этого нужно:
  1. скорректировать содержимое файла manifest.xml
  2. Используя командную строку, перейти к папке, которая содержит manifest файл (используя “cd directoryname)
  3. выполнить команду: makecab.exe manifest.xml mytemplatename.stp
  4. файл .cab должен появиться в папке
  5. нужно переименовать расширение файла .cab в .stp

Внимание! В файле manifest.xml нельзя изменять template ID


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


четверг, 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];
}

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