В предыдущем посте я рассказывал про малоизвестные фичи SharePoint. О них не написано в книгах, мало информации в MSDN и только в паре блогов можно прочитать о них хоть что-нибудь.

В этом посте я расскажу про 3 абсолютно никому неизвестные фичи, которые были были найдены мной и коллегами в SharePoint. Скорее всего другой информации по этим фичам вы не найдете.

Третье место

Третье место в хит-параде занимают атрибуты Len и MoreText для элемента FieldRef во ViewFields в схеме CAML запроса (SPQuery). В документации эти атрибуты отсутствуют.  Если указать эти атрибуты для текстового поля, то SharePoint в этом поле вернет урезанную строку, которая вмещается в указанное в Len количество символов, в конце допишет текст, указанный в MoreText.
Причем обрезка текста происходит по границе слова, а не просто по количеству символов.  К сожалению не учитывается Html разметка.

Вот такой код:

using (var site = new SPSite("http://localhost"))
{
    var web = site.RootWeb;
    var list = web.GetList("Lists/Tasks");
    var query = new SPQuery()
    {
        ViewFields = "<FieldRef Name='Body' Len='20' MoreText='...'/>",
        ViewFieldsOnly = true
    };

    foreach (SPListItem item in list.GetItems(query))
    {
        Console.WriteLine(item["Body"]);
    }
}

Дает вот такой результат:

<div>Коллекции на вкладке...
<p>Коллекции на вкладке...
<div>Коллекции на вкладке...

Фича обнаружена Антоном Вишняковым (@avishnyakov).

Второе место

На втором месте находится простая и очень полезная фича. Если обработчик события элемента списка (event receiver) активировать в фиче уровня Site, то независимо от того к какому типу списка был привязан обработчик он будет срабатывать на каждом списке в коллекции сайтов. В том числе на User Information List хотя в MSDN явно написано что на этот список нельзя повесить обработчик. Таким образом можно отслеживать, например, добавление или удаление групп пользователей.
Возможно аналогичное будет работать и для других типов обработчиков событий.

Фича обнаружена Долгополовым Сергеем (http://www.facebook.com/serg3302).

Первое место

Очень простая и часто используемая фича. При развертывании файлов в виртуальной файловой системе с помощью модулей (Module) для элемента File можно указать атрибут DoGUIDFixUp=”TRUE”. Описание в MSDN крайне аскетично.

Если указать этот атрибут, то внутри самого файла и определения его веб-частей(если создается страница) все выражения вида {$ListId: WebRelativeListUrl;} будут заменяться на Guid_ы списка по указанному Url. Точка с запятой в конце Url обязательна. Естественно на момент развертывания указанный список должен существовать.

Как ни странно этот атрибут, видимо, существует еще с SharePoint 2007 и участвует в сохранении сайта в качестве шаблона. Так как при создании сайта из шаблона ID списков получаются новые, а многие компоненты SharePoint ссылаются на списки по ID. Но найти информацию мне не удалось.

Использование DoGUIDFixUp помогает деплоить workflow, веб-части и страницы с веб-частями.

На сладкое

Если вы используете DataFormWebPart (далее DFWP) для вывода данных с SharePoint помощью XSL и хотите создать веб-часть без серверного кода, то возникает проблема. SPDataSource, который используется для получения данных в DFWP, ищет список на текущем сайте.
Даже если, вы используя DoGUIDFixUp, корректно подставите ID списка на корневом сайте, то при размещении веб-части на дочернем сайте выпадет ошибка.

Оказывается если передать в SPDataSource параметр

<asp:Parameter Name="WebUrl" DefaultValue="{sitecollectionroot}"/>

то SharePoint будет искать список на корневом сайте.

Для примера я сделал проект со списком и веб-частью для отображения на основе DFWP абсолютно без кода.

Теги : SharePoint