Страницы с тегами : XSLT

Поиск в приложениях SharePoint. Часть 2.

Untitled

Первая часть этой серии была написана примерно полтора года назад, после этого появился SharePoint 2013, в котором добавили очень много возможностей для использовании поиска в решениях. Но недавний опрос в сообществе (https://www.facebook.com/groups/sharepointrussian/permalink/514677285314072/?stream_ref=2) показал, что наиболее популярной версией до сих пор является SharePoint 2010.

В первой части я рассказывал как использовать стандартные веб-части поиска в SharePoint 2010, теперь расскажу как с помощью небольшого объема кода получить максимальное мощное решение для создания порталов.

DataFormWebPart

Стандартная веб-часть SharePoint позволяет использовать различные источники данных и формировать разметку с помощью XSL. Источник данных описывается с помою класса наследника System.Web.UI.DataSourceControl. В разметке страницы или .webpart файле можно указать какой DataSource использовать в веб-части.

SearchDataource

Для начала создадим DataSource, который возвращает результаты поискового запроса. На MSDN есть инструкция по созданию класса DataSource - http://msdn.microsoft.com/RU-RU/library/92e191zc(v=vs.90)

public class SearchDataSource: DataSourceControl
{
    protected override DataSourceView GetView(string viewName)
    {
        return new SearchDataSourceView(this);
    }


                
            


Группировка элементов в XSLT 1.0

По счастливой случайности я активно занимаюсь разработкой на SharePoint 2010. Для отображения данных в нем использует XSTL 1.0 в котором отсутствует оператор for-each-group. Вот чтобы сделать группировку надо написать такой код:

<xsl:stylesheet  version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:key name="имя-индекса" match="элементы-для-друппировки" use="ключ-для-группировки" />
    <xsl:template>
        <xsl:for-each 
            select="элементы-для-друппировки[count(. | key('имя-индекса', ключ-для-группировки)[1]) = 1]">
            <!--преобразование для группы-->
         <xsl:for-each select="key('имя-индекса', ключ-для-группировки)">
                <!--преобразование для элементов группы-->
         </xsl:for-each>
            <!--преобразование для группы-->
        </xsl:for-each>        
    </xsl:template>    
</xsl:stylesheet>