Страницы с тегами : XSLT
Поиск в приложениях SharePoint. Часть 2.
Первая часть этой серии была написана примерно полтора года назад, после этого появился 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>