Превью для веб-части в SharePoint 2010/2013

В SharePoint в каждой коллекции сайтов есть библиотека "Коллекция веб-частей" (Web Part Gallery), в которой хранятся файлы, описывающие веб-части. Ссылка на эту библиотеку имеет следующий вид: http://sitecollection/_catalogs/wp.

Каждую веб-часть из этой библиотеки можно просмотреть на странице просмотра веб-частей (/_layouts/WPPrevw.aspx). В этом посте я расскажу о том как подготовить свою веб-часть к тому, чтобы она отображалась адекватно.

Страница предварительного просмотра

Сначала посмотрим страницу, предназначенную для предварительного просмотра (WPPrevw.aspx). Унаследована она от класса Microsoft.SharePoint.WebControls.LayoutsPageBase, т.е. ничего особенного в code-behind не имеет. Сама страница выглядит вот так (код частично):

<table cellpadding="0px" cellspacing="0px" border="0" width="100%" height="100%">
    <tr valign="top">
        <td style="color: black; font-family: verdana; font-size: 10pt; font-weight: bold;">
            <% 
            if (WebPartPreview.WebPart != null)
            {
                SPHttpUtility.HtmlEncode(WebPartPreview.WebPart.Title,Response.Output);
            } 
            %>
        </td>
    </tr>
    <tr valign="top">
        <td class="ms-descriptiontext">
            <%
            if (WebPartPreview.WebPart != null)
            {
                SPHttpUtility.HtmlEncodeAllowSimpleTextFormatting(
                    WebPartPreview.WebPart.Description,Response.Output);
            } 
            %>
        </td>
    </tr>
</table>
<table align="center" cellpadding="0px" cellspacing="30px" border="0">
    <tr>
        <td>
            <WebPartPages:WebPartPreview id="WebPartPreview" runat="server"/>
        </td>
    </tr>
</table>

В верхней части отображаются название (Title) и описание (Description) веб-части. Ниже расположен контрол WebPartPreview, который и отвечает за отображение веб-части на странице просмотра.

WebPartPreview

Теперь посмотрим сам контрол WebPartPreview. Он так же прост до неприличия (члена класса без реализации):

[PermissionSet(SecurityAction.LinkDemand, Name="FullTrust")]
public sealed class WebPartPreview : Control
{
    // Fields
    private string m_importErrorMessage;
    private string m_rootWebUrl;
    private WebPart m_webPart;
 
    // Methods
    public WebPartPreview();
    [SharePointPermission(SecurityAction.Demand, ObjectModel=true)]
    protected override void CreateChildControls();
    [SharePointPermission(SecurityAction.Demand, ObjectModel=true)]
    protected override void Render(HtmlTextWriter writer);
 
    // Properties
    public WebPart WebPart { get; }
}

Веб-часть этот контрол получает из библиотеки веб-частей по идентификатору элемента. В SharePoint 2010 и SharePoint 2013 элемент из этой библиотеки с ID равным 1 - это веб-часть "Редактор содержимого". Т.е. на странице по адресу вида http://sitecollection/_layouts/WPPrevw.aspx?ID=1 (или http://sitecollection/_layouts/15/WPPrevw.aspx?ID=1 для SharePoint 2013) будет отображена именно эта веб-часть.

Как в SharePoint реализован предварительный просмотр веб-частей понятно. Теперь перейдем к веб-части.

Веб-часть и предварительный просмотр

Чтобы понять находится веб-часть в рабочем состоянии или пользователь хочет просто посмотреть как она выглядит и что из себя представляет, достаточно проверить тип родительского контрола. Если это Microsoft.SharePoint.WebPartPages.WebPartPreview, значит веб-часть находится в режиме предварительного просмотра, иначе в рабочем состоянии. Следующее свойство, добавленное в веб-часть, поможет это выяснить:

///<summary>
///Возвращает флаг, указывающий загружена ли 
///веб-часть для предварительного просмотра
///</summary>
private bool IsPreview
{
    get
    {
        // Если родительского контрола нет, то возвращаем False
        if (Parent == null) return false;
        // Получаем тип родительского контрола
        var parentType = Parent.GetType().FullName;
        // Проверяем загружена ли веб-часть в контейнер типа WebPartPreview
        return parentType == "Microsoft.SharePoint.WebPartPages.WebPartPreview";
    }
}

Если ваша веб-часть не работает на странице предварительного просмотра веб-частей, то можно использовать это свойство для реализации различных "заглушек" или простого отображения картинки (как в случае с редактором содержимого).

Этот подход реализован в моем фильтре для списков SharePoint.

Виталий Жуков

Виталий Жуков

Техлид, Архитектор, Разработчик, Microsoft MVP. Более 20 лет опыта в области системной интеграции и разработки программного обеспечения. Специализируюсь на проектировании и внедрении масштабируемых высокопроизводительных программных решений в различных отраслях.

Смотрите также

Развертывание списков и библиотек с помощью SPFx-решений

Развертывание списков и библиотек с помощью SPFx-решений

SharePoint. Drag-and-Drop Загрузчик файлов

SharePoint. Drag-and-Drop Загрузчик файлов

CSOM. Загрузка файлов

CSOM. Загрузка файлов

SharePoint List REST API. Часть 2

SharePoint List REST API. Часть 2

SharePoint Framework. Создание веб-части на Angular

SharePoint Framework. Создание веб-части на Angular

SharePoint List REST API. Часть 1

SharePoint List REST API. Часть 1

Презентация с доклада о SharePoint Framework

Презентация с доклада о SharePoint Framework

SharePoint Framework. Создаем AngularJS 1.x Client WebPart

SharePoint Framework. Создаем AngularJS 1.x Client WebPart

SharePoint. Регистрация CSS и JavaScript с помощью DelegateControl

SharePoint. Регистрация CSS и JavaScript с помощью DelegateControl

SharePoint. Расширяем REST API

SharePoint. Расширяем REST API

SharePoint Excel Services. Создаем кредитный калькулятор

SharePoint Excel Services. Создаем кредитный калькулятор

SharePoint Ribbon API. Использование ToggleButton

SharePoint Ribbon API. Использование ToggleButton

SharePoint 2013. How To: настройка входящей почты для разработчиков

SharePoint 2013. How To: настройка входящей почты для разработчиков

Мифы и правда о Linq to SharePoint

Мифы и правда о Linq to SharePoint

5 особенностей SPSiteDataQuery

5 особенностей SPSiteDataQuery

SharePoint 2013. Введение в SharePoint App. Часть 2

SharePoint 2013. Введение в SharePoint App. Часть 2

SharePoint 2013. Введение в SharePoint App. Часть 1

SharePoint 2013. Введение в SharePoint App. Часть 1

SharePoint 2013. Еще немного о новых контролах

SharePoint 2013. Еще немного о новых контролах

SharePoint 2013. Контрол ClientPeoplePicker

SharePoint 2013. Контрол ClientPeoplePicker

SharePoint 2013. Контрол ImageCrop

SharePoint 2013. Контрол ImageCrop

SharePoint 2013. Тип поля Geolocation

SharePoint 2013. Тип поля Geolocation

Создание типа поля в SharePoint

Создание типа поля в SharePoint

SharePoint 2010. Длительные операции с обновляемым статусом

SharePoint 2010. Длительные операции с обновляемым статусом

Linq to SharePoint. Создаем ContentIterator

Linq to SharePoint. Создаем ContentIterator

Linq to SharePoint. Получение данных из другой коллекции сайтов

Linq to SharePoint. Получение данных из другой коллекции сайтов

Linq to SharePoint. Версионность

Linq to SharePoint. Версионность

SharePoint. Получение URL-адреса иконки для документа

SharePoint. Получение URL-адреса иконки для документа

SharePoint 2010. PostBack для Fluent Ribbon API

SharePoint 2010. PostBack для Fluent Ribbon API

Linq to SharePoint. Блокировка документов

Linq to SharePoint. Блокировка документов

Linq to SharePoint. Паттерн Repository

Linq to SharePoint. Паттерн Repository

Linq to SharePoint. Получение мета-данных списка

Linq to SharePoint. Получение мета-данных списка

Linq to SharePoint. Мапинг полей

Linq to SharePoint. Мапинг полей

Linq to SharePoint. Формирование данных для ProcessBatchData

Linq to SharePoint. Формирование данных для ProcessBatchData

Linq to SharePoint. Сравнение производительности с Camlex.NET

Linq to SharePoint. Сравнение производительности с Camlex.NET

Linq to SharePoint. Часть 5. Поля Choice и MultiChoice

Linq to SharePoint. Часть 5. Поля Choice и MultiChoice

Linq to SharePoint. Часть 4. Dynamic LINQ

Linq to SharePoint. Часть 4. Dynamic LINQ

Linq to SharePoint. Особенности. Часть 3

Linq to SharePoint. Особенности. Часть 3

Linq to SharePoint. Особенности. Часть 2

Linq to SharePoint. Особенности. Часть 2

SharePoint 2010. PeopleEditor. Установка значения

SharePoint 2010. PeopleEditor. Установка значения

SharePoint 2010. Настройка входящей почты для кастомного списка

SharePoint 2010. Настройка входящей почты для кастомного списка

Linq to Sharepoint. Особенности

Linq to Sharepoint. Особенности

EntityFramework. Оптимистические блокировки

EntityFramework. Оптимистические блокировки