SharePoint Ribbon API. Версия 14.1
На codeplex опубликована новая версия SharePoint Ribbon API для SharePoint 2010. Нововведения следующие:
- Локализация. Теперь реализована поддержка локализации аналогично стандартному функционалу SharePoint;
- Quick Access Toolbar (QAT). Теперь можно добавлять свои кнопки в QAT-панель;
- Исправлены некоторые баги.
Так как сейчас много решений, основанных на SharePoint 2010 и все больше новых решений разрабатывается на SharePoint 2013, то поддерживаться будут две версии QASPRibbon: 14.* - для SharePoint 2010 и 15.* - для SharePoint 2013.
Локализация
Локализация доступна для всех свойств контролов, значения которых отображаются пользователю. Ссылка на значения из ресурсных файлов задается примерно так:
$Resources:ИМЯ_РЕСУРСНОГО_ФАЙЛА, ИМЯ_ЗНАЧЕНИЯ
Например, если в проект добавлен ресурсный файл MyProjectResources[.Ru-ru].res, который содержит текстовое значение MyStringValue, то ссылка на него при инициализации кнопки (RibbonButton) будет выглядеть примерно следующим образом:
- // Id кнопки. Должно быть уникальным в пределах группы
- var buttonId = "ButtonId";
- // Название кнопки. Значение из ресурсов
- var buttonTitle = "$Resources:MyProjectResources, MyStringValue"
- // Кнопка для ленты
- var button = new RibbonButton(buttonId, buttonTitle);
Локализация также доступна для всплывающих подсказок (RibbonToolTip).
Ribbon QAT (Quick Access Toolbar)
Помимо локализации в новой версии доступна регистрация кнопок на панели быстрого доступа (QAT). В sandbox-решениях такой возможности нет. Связано это с отсутствием реализации в родном API SharePoint'а.
Для большей ясности можно посмотреть реализацию класса Microsoft.Web.CommandUI.RibbonRenderer, который отвечает за генерацию HTML-кода ленты в SharePoint.
Класс ленты в SharePoint (Microsoft.SharePoint.WebControls.SPRibbon) унаследован от класса Microsoft.Web.CommandUI.Ribbon из сборки Microsoft.Web.CommandUI в разметке master-страниц SharePoint это выглядит примерно вот так (вырезано лишнее):
- <SharePoint:SPRibbon runat="server">
- <SharePoint:SPRibbonPeripheralContent Location="TabRowLeft">
- <SharePoint:PageStateActionButton/>
- </SharePoint:SPRibbonPeripheralContent>
- <SharePoint:SPRibbonPeripheralContent Location="TabRowRight">
- </SharePoint:SPRibbonPeripheralContent>
- </SharePoint:SPRibbon>
На ленте присутствуют два контрола-близнеца, отличающихся лишь свойством Location, которое может принимать только одно из следующих значений: "TabRowLeft", "TabRowRight", "QATRowCenter", "QATRowRight". Т.е. реализация этих контролов возможна. Даже в схеме ленты эти элементы описаны. Отсутствует механизм рендеринга. Но контрол SPRibbonPeripheralContent является унаследованным от обычного контрола (WebControl), что позволяет нам использовать его как стандартный контейнер, что и реализовано в SharePoint Ribbon API.
Регистрация кнопок в QAT
Для добавления кнопок на панель быстрого запуска в SharePoint Ribbon API реализованы следующие классы:
- RibbonQAT - является контейнером для всех кнопок, подлежащих добавлению в панель быстрого запуска, не зависимо от того слева они будут располагаться или справа;
- RibbonQATButton - кнопка панели быстрого запуска. Унаследована от стандартного контрола ImageButton, и все стандартные его свойства и обработчики также доступны.
Следующий код регистрирует три кнопки на панели быстрого запуска, две слева и одну справа:
- // Кнопка 1
- var qatBtn = new RibbonQATButton
- {
- Location = RibbonQATLocation.Left,
- ImageUrl = "/_layouts/images/addressbook.gif",
- };
- // Кнопка 2
- var qatBtn2 = new RibbonQATButton
- {
- Location = RibbonQATLocation.Left,
- ImageUrl = "/_layouts/images/ONE16.GIF",
- };
- // Кнопка 3
- var qatBtn3 = new RibbonQATButton
- {
- Location = RibbonQATLocation.Right,
- ImageUrl = "/_layouts/images/PERMLINK.PNG",
- };
- // Панель быстрого запуска
- var qat = new RibbonQAT
- {
- Controls = new[] {qatBtn, qatBtn2, qatBtn3}
- };
- // Регистрируем панель быстрого запуска
- RibbonManager.Current.AddQATToPage(qat, Page);
Функциональность здесь отсутствует как таковая, для большей простоты примера.
Результат в браузере:
Отступ кнопки справа обусловлен наличием контейнера для кнопок панели разработчика (developer dashboard).
Пользуемся!