SharePoint 2013 поддерживает множество настроек ленты для библиотек документов. Однако иногда сделать что-то простое, например создать кнопку, открывающую документ в новой вкладке, не так-то просто. Для этого есть несколько причин. Во-первых, потому что вы будете программировать в основном на javascript, к которому не все привыкли, в отличие от кода .NET. Во-вторых, SharePoint оптимизирован для уменьшения объема данных, передаваемых между клиентом и сервером. Это отлично с точки зрения производительности, однако создает больше работы для разработчика, чтобы работать в этих границах. Давайте рассмотрим простой пример открытия документа с помощью кнопки ленты.

Когда вы выделяете документ или несколько документов в библиотеке, а затем нажимаете кнопку ленты, эти документы передаются на ленту в виде списка идентификаторов.

Если вы хотите создать кнопку ленты, которая открывает документ в новом окне, идентификатора недостаточно. Опять же, из-за оптимизации производительности SharePoint загружает только минимальное количество свойств и метаданных, таких как идентификатор и заголовок. Чтобы получить URL-адрес документа в качестве примера, вам нужно будет запросить его из SharePoint с помощью обратного вызова AJAX. Это звучит сложнее, чем есть на самом деле, но в основном вам понадобятся разные функции: одна для запроса свойств, а другая — функция обратного вызова, когда SharePoint возвращает информацию с сервера.

Всякий раз, когда создаются настраиваемые кнопки ленты, они также связываются с файлом Javascript, который включается в пакет решений. В этом посте я не буду вдаваться в эти подробности и предполагаю, что у вас уже есть файл javascript. Когда кнопка ленты нажата, она вызовет вашу первую функцию javascript, которую мы назовем ViewDocRibbonClick().

В приведенном ниже коде мы получаем элемент, который был выбран в библиотеке, и загружаем некоторые переменные, которые нам понадобятся. Несмотря на то, что можно выбрать несколько документов, мы собираемся предположить только один документ и выбрать элементы [0] и сохранить его в переменной с именем currentItem. Эта переменная должна быть создана вне нашего метода, потому что мы будем использовать ее и во втором вызове функции.

Далее нам нужно загрузить в currentItem дополнительные метаданные, потому что изначально это просто пустой указатель. Это делается с помощью ctx.load и, при необходимости, включая метаданные, которые мы хотим загрузить. В этом примере я запрашиваю EncodedAbsUrl, который является URL-адресом элемента, однако, если я опустил этот параметр, он просто загрузил бы все свойства для меня. Затем мы вызываем ctx.executeQueryAsync и передаем ему указатель на функцию обратного вызова.

Теперь мы можем получить URL-адрес элемента и открыть его в новом окне.

Первоначально опубликовано в феврале 2014 г.