Новые возможности веб-части "Запрос контента"

Новые возможности веб-части "Запрос контента"

Привет, я Дастин Энглин (Dustin Anglin), руководитель программы в группе разработчиков управления корпоративным информационным содержимым. Сегодня мы поговорим о новых возможностях, реализованных в одной из наиболее популярных веб-частей SharePoint, веб-части "Запрос контента" , сокращенно CQWP.

Если вы не знакомы с предметом обсуждения, обязательно прочитайте следующие статьи: Общие сведения об управлении корпоративным информационным содержимым (автор Джим Мэссон (Jim Masson)) и Общие сведения о WCM (автор Сангья Сингх (Sangya Singh)).

CQWP для новичков

Для тех, кто недавно начал работать с веб-частью CQWP, я кратко объясню, для чего она предназначена и что с ее помощью можно делать.

Веб-часть "Запрос контента" позволяет разработчикам сайтов получать интересную и релевантную информацию с помощью запросов, создаваемых в удобном пользовательском интерфейсе, и отображать эту информацию на веб-странице уникальным образом.

изображение

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

Более подробный обзор CQWP см. в сообщении блога Джорджа Перантатоса (George Perantatos), посвященного SharePoint 2007.

Создание веб-части "Связанные новости" на основе веб-части CQWP

Лучше всего изучать материал на примерах, поэтому давайте рассмотрим типичный сценарий использования веб-части CQWP для отображения новостей, связанных с новостью, которую пользователь читает в настоящий момент. Кроме того, поскольку нас не интересуют старые новости, необходимо настроить веб-часть на отображение только свежих новостей, например за последнюю неделю.

Построение запроса: управление запросом в зависимости от контекста

Веб-часть "Запрос контента" отлично подходит для отображения на странице запрошенных данных, однако я не хочу добавлять в зону веб-частей новую веб-часть CQWP при КАЖДОМ создании новости, особенно когда я собираюсь настраивать ту же самую веб-часть снова и снова.

В SharePoint 2007 веб-часть CQWP можно было добавить в макет страницы, чтобы она отображалась на всех страницах определенного типа (например, в данном сценарии можно создать макет страницы "Новость" (News Article)). Проблема заключалась в том, что для этой веб-части можно было задать только один запрос, а следовательно, каждая страница, основанная на макете "Новость" (News Article), возвращала бы один тот же набор результатов.

Нам же необходимо, чтобы на каждой странице, основанной на макете "Новость" (News Article), отображались статьи, связанные с текущей новостью, открытой в настоящий момент. Например, если пользователь читает спортивную статью, должны отображаться связанные с ней другие новости спорта.

Нам также необходимо поле метаданных, описывающее тип текущей статьи, например Спорт (Sports) или Бизнес (Business), поэтому мы добавим поле управляемых метаданных (Managed Metadata) "Категория новостей" (News Category), связанное с банком терминов (term store), где можно можно создать управляемую таксономию категорий новостей, из которой авторы статей смогут выбирать необходимые категории.

Ниже приведено концептуальное представление макета страницы "Новость" (News Article).

изображение

Выше я упомянул, что наша веб-часть будет зависеть от контекста текущей статьи, в частности от "Категории новостей" (News Category). В SharePoint 2010 это можно реализовать путем задания фильтров запроса с помощью двух новых и весьма удобных маркеров:

PageFieldValue

Этот маркер позволяет указать поле в текущем макете страницы и динамически заменять значение фильтра на текущее значение поля.

Пример: я создал настраиваемое поле управляемых метаданных "Категория новостей" (News Category), в котором указывается, к какой категории относится статья ("Бизнес" (Business), "Политика" (Politics), "Мир" (World), "Спорт" (Sports) и т. д.), и добавил его в макет страницы "Новость" (News Article). Маркер PageFieldValue позволяет изменять запрос в зависимости от текущей категории новостей, например, если текущая страница относится к категории "Спорт" (Sports), запрос вернет страницы с тегом "Спорт" (Sports).

PageQueryString

Этот маркер аналогичен маркеру PageFieldValue, только значение, используемое в запросе, берется из строки запроса URL-адреса.

Пример: в URL-адрес можно добавить строку запроса вида "&NewsCategory=Sports" и настроить запрос веб-части CQWP таким образом, чтобы он возвращал страницы, где поле "Категория новостей" (News Category) принимает значение "Спорт" (Sports) или любое другое значение, указанное в строке запроса.

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

изображение

В данном примере маркер PageFieldValue используется для настройки веб-части CQWP на возврат новостей, в которых поле "Категория новостей" (News Category) содержит те же метаданные, что и поле "Категория новостей" (News Category) текущей статьи. Благодаря изменению настраиваемого макета страницы "Новость" (News Article) веб-часть CQWP будет автоматически отображаться на всех новых страницах, основанных на макете "Новость" (News Article), уже настроенной на вывод связанных новостей.

Внимательно изучив запрос, вы увидите, что я добавил еще два фильтра. Первый отфильтровывает все статьи, название которых совпадает с названием текущей новости (это гарантирует, что текущая статья не будет продублирована в результатах запроса), а второй возвращает статьи за последние 7 дней, чтобы отображать только свежие новости.

Кроме того, в данном примере поле метаданных "Категория новостей" (News Category) является одним из новых полей управляемых метаданных, полностью поддерживаемых веб-частью CQWP, в том числе в вариантах с одним и несколькими значениями. Хотя в данном примере это не показано, веб-часть CQWP также поддерживает фильтрацию по столбцам корпоративных ключевых слов и столбцу "Все теги" (All Tags), что позволяет выполнять в запрошенных элементах поиск по любому тегу управляемых метаданных, независимо от того, в каком поле метаданных элемента содержится этот тег.

изображение

Вывод результатов: сопоставление столбцов из области инструментов

Некоторым нравится писать XSLT-код, и таким людям я говорю: "Напишите весь необходимый XSLT-код и да поможет вам Бог". Однако все остальные, возможно, даже большинство из нас (при всем уважении к XSLT-программистам), взялись бы за отображение полей X, Y и Z путем написания XSLT-кода в самую последнюю очередь.

В SharePoint 2010 одной из наиболее потрясающих возможностей веб-части CQWP является возможность выбора отображаемых полей непосредственно в области инструментов. Теперь, когда запрос задан, давайте откроем раздел Представление (Presentation) и посмотрим, как он выглядит:

изображение

В разделе Представление (Presentation) в области инструментов появился новый подраздел Отображаемые поля (Fields to display), где можно ввести поля, которые должны отображаться для каждого заданного XSL-стиля. Стиль элемента (Item Style) можно рассматривать как пустой шаблон, который определяет количество отображаемых элементов и их расположение, а не отображаемые поля. После выбора шаблона необходимо просто подключить поля, которые должны отображаться, введя их названия в гнезда для указанного стиля элемента (item style).

Я выбрал стиль с изображением слева, ссылкой на страницу, представленную заголовком статьи, и краткой выдержкой из статьи (Настраиваемое поле (Custom Field), которое я задал для макета страницы). Введя названия полей в каждое гнездо, я получил следующий результат:

изображение

Общее время, потраченное на возню с XSLT: 0,0 сек! Ура!

Подводя итоги

Итак, резюмируя, перечислим, чего нам удалось добиться.

  • Мы добавили веб-часть CQWP на все страницы новостей, один раз изменив макет страницы.
  • Мы настроили запрос веб-части на динамическое изменение в зависимости от контекста текущей страницы (для спортивных статей будут возвращаться новости спорта, для бизнес-статей — деловые новости и т. д.).
  • Мы настроили представление веб-части на отображение настраиваемых полей без написания XSLT-кода.

Окончательный результат выглядит так:

изображение

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

Заключение

Это всего лишь один пример того, чего можно добиться с помощью контекстно-зависимых запросов веб-части "Запрос контента" и удобного, не требующего написания кода, способа настройки отображения контента. Заходите в мой блог почаще, и вы узнаете много нового о веб-части CQWP и других великолепных возможностях по управлению корпоративным информационным содержимым в SharePoint 2010.

Это локализованная запись блога. Исходная статья находится по адресу What’s New with the Content Query Web Part