Развертывание решений фирменной настройки для сайтов SharePoint 2010 с помощью изолированных решений

Сводка:   сведения о создании решений фирменной настройки, совместимых с изолированной средой, с использованием настраиваемых главных страниц, файлов CSS и изображений, которые могут развертываться в фермы Microsoft SharePoint 2010.

Дата последнего изменения: 16 августа 2011 г.

Применимо к: Business Connectivity Services | Office 2010 | Open XML | SharePoint Designer 2010 | SharePoint Foundation 2010 | SharePoint Online | SharePoint Server 2010 | Visual Studio

В этой статье
Обзор
Мотивация для настройки целевой изолированной среды
Создание проекта Branding101
Заключение
Дополнительные материалы
Об авторе

Применяется для:   Microsoft SharePoint Foundation 2010 | Microsoft SharePoint Server 2010 | Microsoft Visual Studio 2010
Автор:   Тед Паттисон (Ted Pattison) (Возможно, на английском языке) (партнер со статусом SharePoint MVP), Critical Path Training (Возможно, на английском языке) | Об авторе

Содержание

  • Обзор

  • Мотивация для настройки целевой изолированной среды

  • Создание проекта Branding101

  • Заключение

  • Дополнительные материалы

Щелкните, чтобы скопировать кодЗагрузите пример кода из коллекции исходных кодов MSDN (Возможно, на английском языке) 

Обзор

разработки SharePoint в Microsoft Visual Studio 2010 предоставляет пример и эффективный подход к упаковке и развертыванию файлов и кода, требуемых для применения фирменной настройки к сайтам Microsoft SharePoint 2010, использующим для песочницы. В этой статье приведены рекомендации по созданию решений фирменной настройки, совместимых с изолированной средой, путем использования настраиваемых главных страниц, каскадных таблиц стилей (CSS-файлов) и изображений, которые могут развертываться в фермах SharePoint 2010 с SharePoint Foundation 2010 или SharePoint Server 2010.

Мотивация для настройки целевой изолированной среды

Существует только один способ развертывания бизнес-решения, разработанного для предыдущей версии продуктов и технологий SharePoint Products. Развертывание решения SharePoint, нацеленного на ферму Windows SharePoint Services 3.0 или Office SharePoint Server 2007, должно выполняться на уровне фермы администратором фермы. Поскольку для развертывания решения фермы требуется определение области настраиваемых файлов на интерфейсных веб-серверах, возможны определенные риски для исправности фермы. Кроме того, большинство решений фермы выполняют установку библиотек DLL для настраиваемой сборки в глобальном кэше сборки на веб-сервере, позволяющем исполнять внутренний код с полным доверием. Таким образом, многим администраторам фермы приходится применять к решениям SharePoint продолжительные проверки кода и строго заданные процедуры тестирования перед развертыванием решений в ферме SharePoint. Администраторы фермы в некоторых средах SharePoint склонны даже запрещать развертывания на уровне фермы каких бы то ни было решений SharePoint.

SharePoint 2010 представляет новую архитектуру изолированной среды, которая предоставляет ценную альтернативу развертыванию на уровне фермы. В отличие от развертывания решения фермы, для развертывания изолированного решения не требуется участие администратора фермы. Вместо этого бизнес-пользователь может отправить и активировать решение SharePoint, разработанное как изолированное решение, в пределах семейства сайтов. Это позволяет значительно ускорить процесс ввода настраиваемого решения SharePoint в эксплуатацию. Изолированные решения также позволяют разработать настраиваемые решения SharePoint в Visual Studio 2010, нацеленном на среды, в которых развертывание решения фермы не допускается, например SharePoint Online.

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

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

Методы разработки для изолированной среды

Большинство методов разработки SharePoint не могут использоваться при разработке изолированных решений. Например, изолированное решение не может выполнять развертывание файлов в рамках корневого каталога SharePoint или любого другого расположения в файловой системе веб-сервера. Это означает, что файлы фирменной настройки не могут развертываться в известные расположения, часто используемые в решениях фермы (например, каталог IMAGES или LAYOUTS). Вместо этого требуется подготовить такие файлы фирменной настройки, как изображения и CSS-файлы, в базе данных контента в рамках ведущего семейства сайтов.

При написании кода для изолированного решения следует принять во внимание другие немаловажные ограничения. Даже при наличии доступа к серверной объектной модели SharePoint Foundation 2010 функциональные возможности, доступные в изолированном решении, являются довольно ограниченными в сравнении с функциями, доступными при написании кода в решении фермы.

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

На начальном этапе разработки изолированных решений важно осознавать отличие компонентов, активируемых в области семейства сайтов, от компонентов, активируемых в области сайта. Это обусловлено тем, что компонент, настроенный для активации в области семейства сайтов, автоматически активируется при активации пользователем изолированного решения, в котором этот компонент содержится. С другой стороны, автоматическая активация компонентов, настроенных для активации в области сайта, не выполняется. Такие компоненты должны быть активированы вручную пользователем или посредством настраиваемого кода. По этой причине необходимо при общем проектировании изолированного решения учесть хотя бы один компонент, настроенный для активации в области семейства сайтов. Это позволит контролировать время активации изолированного решения пользователем.

Можно добавить приемник компонента в компонент в рамках изолированного решения, также как и для решения фермы. Тем не менее, следует знать о том, что код, созданный для приемника компонента, в изолированном решении исполняется в рамках изолированной службы кода SharePoint Foundation, и в отношении него действуют ограничения изолированной архитектуры. К счастью, доступны основные функции в серверной объектной модели, которые позволят настроить все сайты в семействе сайтов для использования настраиваемых главных страниц и настраиваемых CSS-файлов.

Подготовка файлов с использованием модулей

При создании решения SharePoint для фирменной настройки сайта SharePoint 2010 вам потребуется выполнить развертывание настраиваемых файлов, например главных страниц, CSS-файлов и изображений. При создании изолированных решений не следует полностью полагаться на общепринятые методы, используемые в решениях фермы, которые предусматривают развертывание настраиваемых файлов в корневом каталоге SharePoint в рамках файловой системы веб-сервера. Вместо этого рекомендуется подготовить экземпляры таких файлов из соответствующих шаблонов с помощью Элемент Module (Module).

Например, вам требуется выполнить развертывание главной страницы с именем MyCustomLayout.master в коллекцию главных страниц на сайте верхнего уровня. Можно для начала создать компонент, с назначенной областью на уровне семейства сайтов. После этого можно добавить файл шаблона с именем MyCustomLayout.master в каталог компонентов, в котором содержится HTML-макет настраиваемого решения фирменной настройки. На последнем этапе добавляется манифест элемента, который содержит следующий элемент Module, с помощью которого выполняется подготовка экземпляра файла MyCustomLayout.master в коллекции главных страниц.

<Elements xmlns="https://schemas.microsoft.com/sharepoint/">
  <Module Name="MasterPageGallery" Url="_catalogs/masterpage" >
    <File Url="MyCustomLayout.master" Type="GhostableInLibrary" >
      <Property Name="UIVersion" Value="4" />
      <Property Name="ContentTypeId" Value="0x010105" />
    </File>
  </Module>
</Elements>

При создании элемента Module (например, такого как этот) для подготовки файлов в библиотеке документов (например, коллекция главных страниц) важно настроить атрибут Url элемента Module, используя относительный путь в пределах сайта в корневой каталог библиотеки документов. При подготовке главной страницы для помещения в коллекцию главных страниц атрибут Url элемента Module должен быть всегда настроен для использования стандартного пути _catalogs/masterpage.

При подготовке файла для помещения в область библиотеки документов каждый из Элемент File (Module) должен содержать атрибут Type со значением GhostableInLibrary, как показано в предыдущем примере кода. При подготовке главных страниц в SharePoint 2010 следует также добавить два элемента Свойство в элемент File, чтобы настроить два важных свойства с именами UIVersion и ContentTypeId.

SharePoint Foundation использует свойство UIVersion главной страницы, чтобы различать главные страницы, разработанные для нового пользовательского интерфейса SharePoint 2010 и главных страниц, разработанных для предыдущей версии пользовательского интерфейса Office SharePoint Server 2007. При разработке главной страницы на основе пользовательского интерфейса SharePoint 2010 необходимо настроить для свойства UIVersion значение 4. По завершении разработки главной страницы на основе предыдущей версии пользовательского интерфейса можно настроить для свойства UIVersion значение 3 в сценариях визуального обновления.

Свойство ContentTypeId используется для того, чтобы отличать главные страницы от макетов страниц, используемых сайтами публикаций SharePoint Server 2010. При развертывании главной страницы необходимо настроить для нее верное значение ContentTypeId — 0x010105.

Развертывание CSS-файлов и изображений в библиотеку стилей

В Office SharePoint Server 2007 компоненты публикации создают специальную библиотеку документов с именем Style Library, которая используется Microsoft для развертывания стандартных CSS-файлов и графических файлов, используемых на сайтах публикации. Библиотека Style Library также часто используется как конечный объект развертывания веб-дизайнерами и разработчиками, которые используют CSS-файлы и графические файлы для применения элементов фирменной настройки к сайтам публикации Office SharePoint Server 2007.

При разработке универсального решения фирменной настройки с возможностью повторного использования для ферм SharePoint Server 2010 использование библиотеки Style Library недоступно, поскольку она существует только на сайтах публикации. Windows SharePoint Services 3.0 не создает библиотеку стилей Style Library при создании других типов сайтов (например, узел группы, пустого узла или рабочей области для документов). К счастью, эта проблема успешно решена в SharePoint 2010.

В SharePoint 2010 каждое семейство сайтов использует собственную библиотеку стилей. Это обусловлено тем, что Microsoft переместил стандартные инструкции по подготовки для создания библиотеки стилей из компонентов публикации в глобальное определение сайта. Каждый раз, когда SharePoint Foundation 2010 создает новое семейство сайтов, библиотека стилей добавляется на сайт верхнего уровня. Таким образом, библиотека стилей идеально подходит для развертывания CSS-файлов и графических файлов в универсальное решение фирменной настройки.

Создание проекта Branding101

Теперь время перейти к процедуре создания универсального решения фирменной настройки с помощью разработки SharePoint в Visual Studio 2010. На начальном этапе можно создать Пустой проект SharePoint с именем Branding101, как показано на рис. 1.

Рис. 1. Новый пустой проект SharePoint

Создать пустой проект SharePoint

При создании нового проекта SharePoint Мастер настройки SharePoint предложит указать URL-адрес для локального тестового сайта SharePoint и выбрать операцию Развернуть как изолированное решение или Развернуть как решение фермы для проверки. Необходимо выбрать Развернуть как изолированное решение, как показано на рис. 2.

Рис. 2. Развернуть как изолированное решение

Развернуть как изолированное решение

Создание и развертывание настраиваемой главной страницы

Первым этапом создания настраиваемого решения фирменной настройки является создание новой настраиваемой главной страницы. Для начала создайте новый элемент проекта Модуль, используемый для развертывания настраиваемой главной страницы в коллекцию главных страниц.

В Visual Studio 2010 в Обозревателе решений щелкните правой кнопкой мыши узел проекта Branding101. В меню Проект выберите Добавить, после чего нажмите Новый элемент.

В диалоговом окне Добавить элемент создайте новый элемент проекта Модуль с именем MasterPageGallery, как показано на рис. 3.

Рис. 3. Модуль MasterPageGallery

Модуль MasterPageGallery в Visual Studio

Созданный новый модуль содержит манифест элемента с именем Elements.xml и образец файла элемента с именем Sample.txt. Щелкните правой кнопкой мыши файл Sample.txt и измените его имя на Branding101.master, как показано на рис. 4.

Рис. 4. Элемент проекта MasterPageGallery

Элемент проекта MasterPageGallery

Далее необходимо изменить содержимое файла шаблона Branding101.master, добавив начальную точку для настраиваемой главной страницы. Чаще всего для этого выполняется копирование и вставка текста из стандартной главной страницы SharePoint 2010 с именем v4.master. Используйте проводник Windows для поиска файла шаблона v4.master, который размещен по следующему пути.

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\GLOBAL\v4.master

При обнаружении файла шаблона v4.master откройте его и скопируйте его содержимое в буфер обмена. После этого откройте файл шаблона Branding101.master в своем проекте и удалите все содержимое в файле. Вставьте содержимое из файла v4.master в файл Branding101.master, после чего сохраните изменения. По завершении копирования содержимого из файла v4.master закройте этот файл шаблона, не сохраняя изменений.

Теперь в настраиваемой главной странице размещен тот же контент, что и в стандартной главной странице SharePoint 2010 (v4.master). На данный момент имеет смысл добавить хотя бы одно изменение в Branding101.master, чтобы отследить визуальные изменения, по которым можно определить факт использования вашей настраиваемой главной страницы. Для этого можно найти открывающий тег BODY в Branding101.master и добавить непосредственно под ним следующий элемент.

<div style="background-color:yellow">Branding101.master</div>

По завершении создания настраиваемой главной страницы необходимо изменить файл Elements.xml в модуле MasterPageGallery, чтобы обеспечить правильность его развертывания в коллекцию главных страниц при активации компонента. Откройте файл Elements.xml и обновите элемент Module и его внутренний элемент File, добавив следующий XML-контент.

<Elements xmlns="https://schemas.microsoft.com/sharepoint/">
  <Module Name="MasterPageGallery" 
          Path="MasterPageGallery" 
          Url="_catalogs/masterpage" >

    <File Url="Branding101.master" Type="GhostableInLibrary" >
      <Property Name="UIVersion" Value="4" />
      <Property Name="ContentTypeId" Value="0x010105" />
    </File>

  </Module>
</Elements>

Подготовительная работа с модулем MasterPageGallery завершена. Теперь необходимо переключить внимание на компонент, который будет использоваться для развертывания этого модуля. Обратите внимание на то, что при добавлении модуля в проект Branding101разработки SharePoint в Visual Studio 2010 автоматически создает новый компонент с именем Feature1. Найдите этот компонент в Обозревателе решений, щелкните его правой кнопкой мыши и измените имя на Main.

После изменения имени компонента дважды щелкните узел компонента, чтобы просмотреть компонент в Конструкторе компонентов. Измените Заголовок компонента на более подходящий, например Образец компонента Branding 101, как показано на рис. 5. Также важно изменить Область компонента с Веб на Сайт, чтобы его активация выполнялась на уровне семейства сайтов, а не на уровне сайта.

Рис. 5. Образец компонента Branding101 в конструкторе компонентов

Конструктор компонентов

Создание и развертывание настраиваемого CSS-файла

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

В Обозревателе решений щелкните правой кнопкой мыши узел проекта Branding101, и выберите в меню Проект команду Добавить, после чего нажмите Новый элемент.

В диалоговом окне Добавить элемент создайте новый элемент проекта Модуль с именем Style Library, как показано на рис. 6.

Рис. 6. Модуль Style Library

Модуль библиотеки стилей

Новый элемент проекта Модуль изначально содержит манифест элемента с именем Elements.xml, а также образец файла элемента с именем Sample.txt. Щелкните правой кнопкой мыши Sample.txt и измените имя файла Styles.css.

После этого щелкните правой кнопкой мыши узел модуля Style Library и выберите в меню Проект команду Добавить, после чего нажмите Новая папка, чтобы создать новую дочернюю папку в модуле Style Library. Присвойте этой папке имя Branding101.

После создания этой папки можно переместить файл styles.css, перетащив его в папку в Обозревателе решений.

Рис. 7. Файл Styles.css в модуле Style Library

Файл Styles.css в обозревателе решений

После перемещения файла styles.css в папку Branding101 откройте файл и удалите все существующее содержимое. После этого добавьте простое правило CSS для тега BODY и убедитесь в том, что IntelliSense работает корректно. Добавьте следующий атрибут верхнего внутреннего поля, чтобы отследить визуальные изменения при правильном добавлении ссылки на этот CSS-файл.

body {
  padding-top: 50px;
}

Далее следует добавить несколько графических файлов в проект. Рекомендуется добавлять настраиваемые графические файлы в библиотеку стилей, чтобы проще было добавлять ссылки на них из настраиваемого CSS-файла. В папке Branding101 создайте папку Изображения и добавьте несколько графических файлов в эту папку. В этом примере используется два графических файла: один из них, с именем Background.jpg, используется как фоновое изображение для текстовой области страницы, а второй файл с именем Logo.gif — в качестве логотипа сайта.

Рис. 8. Графические файлы в библиотеке стилей

Изображения сайта

После добавления графических файлов в папку Изображения можно легко добавлять ссылки на них из правил CSS в файле styles.css. В целях демонстрации добавьте следующие обновления файла styles.css, чтобы использовать Background.jpg в качестве фонового изображения для текстовой области страницы.

body {
  padding-top: 50px;
  background-image: url('Images/Background.jpg');
  background-repeat: repeat;  
}

Подготовительная работа с библиотекой стилей завершена. В отличие от ранее созданного модуля MasterPageGallery изменять файл Elements.xml необязательно. разработки SharePoint в Visual Studio 2010 может добавить все необходимые элементы File в фоновом режиме. Кроме того, можно добавлять дополнительные графические файлы в папку Изображения, после чего будет выполнено их автоматическое развертывание в соответствующем расположении библиотеки стилей.

Добавление приемников компонента для применения атрибутов фирменной настройки

После добавления двух элементов проекта Модуль для развертывания настраиваемой главной страницы и настраиваемого CSS-файла можно перейти к написанию кода для задействования этих элементов. Для этого следует добавить приемник компонента в компонент с именем Основной. В Обозревателе решений щелкните правой кнопкой мыши узел компонента Основной и выберите Добавить приемник событий, чтобы добавить класс приемника компонента.

Рис. 9. Добавление приемника события

Добавление приемника события

В классе приемника компонента необходимо переопределить и реализовать два метода с именами FeatureActivated(SPFeatureReceiverProperties) и FeatureDeactivating(SPFeatureReceiverProperties). Начните написание кода с очистки и реструктуризации исходного файла класса приемника компонента. В итоге он должен прийти в соответствие со следующим примером.

using System;
using System.Runtime.InteropServices;
using Microsoft.SharePoint;

namespace Branding101.Features.Main {
  [Guid("cc5874a5-695b-49d2-9cd2-4fa12be83874")]
  public class MainEventReceiver : SPFeatureReceiver {
    public override void FeatureActivated(
                           SPFeatureReceiverProperties properties) {

      // TODO: add activation code here.
    }

    public override void FeatureDeactivating(
                           SPFeatureReceiverProperties properties) {

      // TODO: add deactivation code here.
    }
  }
}

Теперь давайте рассмотрим ваши действия при активации основного компонента. Сначала следует определить путь к Branding101.master в коллекции главных страниц, что позволит настроить сайты для использования проекта в качестве их главной страницы. Обратите внимание, что путь к главой странице должен рассчитываться относительно корневого каталога ведущего веб-приложения. После этого следует перечислить все сайты в текущем семействе сайтов и обновить несколько свойств для каждого сайта, которые будут использовать настраиваемую главную страницу и настраиваемый CSS-файл. Реализация следующего метода FeatureActivated(SPFeatureReceiverProperties) позволяет обновить соответствующие свойства SPWeb для каждого сайта.

public override void FeatureActivated(
                       SPFeatureReceiverProperties properties) {
  SPSite siteCollection = properties.Feature.Parent as SPSite;
  if (siteCollection != null) {
    SPWeb topLevelSite = siteCollection.RootWeb;

    // Calculate relative path to site from Web Application root.
    string WebAppRelativePath = topLevelSite.ServerRelativeUrl;
    if (!WebAppRelativePath.EndsWith("/")) {
      WebAppRelativePath += "/";
    }

    // Enumerate through each site and apply branding.
    foreach (SPWeb site in siteCollection.AllWebs) {
      site.MasterUrl = WebAppRelativePath + 
                       "_catalogs/masterpage/Branding101.master";
      site.CustomMasterUrl = WebAppRelativePath + 
                             "_catalogs/masterpage/Branding101.master";
      site.AlternateCssUrl = WebAppRelativePath + 
                             "Style%20Library/Branding101/Styles.css";
      site.SiteLogoUrl = WebAppRelativePath + 
                         "Style%20Library/Branding101/Images/Logo.gif";
      site.UIVersion = 4;
      site.Update();
    }
  }
}

Свойство MasterUrl объекта SPWeb представляет собой свойство, используемой для перенаправления страниц сайта по ссылке на настраиваемую главную страницу, например Branding101.master. В предыдущем примере кода показаны расчета пути к Branding101.master путем комбинирования относительного пути к сайту в рамках веб-приложения и относительного пути на сайте верхнего уровня к коллекции главных страниц в рамках сайта, для которого во всех случаях установлено значение _catalogs/masterpage.

ЗаметкаПримечание

В этом примере выполняется также обновление свойства SPWeb с именем CustomMasterUrl помимо свойства MasterUrl. Обновление свойства CustomMasterUrl является важным только для сайтов публикации, которые содержит страницы публикации в библиотеке документов Страницы. Свойство CustomMasterUrl используется для переназначения главной страницы для страниц публикации. Присвоение нового значения для свойства CustomMasterUrl на сайте SharePoint Foundation не оказывает влияния и не вызывает каких-либо проблем.

Свойство AlternateCssUrl используется для привязки страниц на сайте к настраиваемому CSS-файлу с именем Styles.css. Процесс привязки, связанный со свойством AlternateCssUrl, реализуется элементом управления SharePoint CssLink, определяемым в главном разделе всех стандартных главных страниц SharePoint 2010. Элемент управления SharePoint CssLink также добавляет ссылку на значимый CSS-файл с именем CoreV4.css и, таким образом, должен быть включен во все главные страницы, нацеленные на SharePoint 2010.

Хотя решение фирменной настройки, рассматриваемое в данной статье, использует в основном подход, предполагающий привязку к настраиваемому CSS-файлу, использующему свойство AlternateCssUrl, следует помнить о том, что некоторые решения фирменной настройки используют альтернативный подход привязки к настраиваемому CSS-файлу посредством элемента управления CSSRegistration. Например, можно добавить следующий элемент CssRegistration в главный раздел настраиваемой главной страницы для привязки к CSS-файлу в библиотеке стилей.

<SharePoint:CssRegistration
  name="<% $SPUrl:~sitecollection/Style Library/styles.css %>" 
  After="corev4.css"
  runat="server"
/>

Одним из преимуществ использования элемента управления CssRegistration в сравнении со свойством AlternateCssUrl является то, что элемент управления позволяет выполнять привязку к нескольким CSS-файлам. Второй плюс — можно использовать элемент управления CssRegistration в отдельных страницах для сценариев, в которых CSS-файл используется некоторыми (не всеми) страницами сайта. Тем не менее, использование элемента управления CssRegistration также имеет свои минусы, поскольку предполагает в основном использование выражения $SPUrl, для которого требуется запуск ведущей фермы SharePoint Server 2010. При наличии возможности использования решения фирменной настройки в фермах, в которых работает только SharePoint Foundation, следует предпочесть скорее метод привязки к настраиваемому CSS-файлу с помощью свойства AlternateCssUrl, нежели использование элемента управления CssRegistration.

В этом примере используется свойство SiteLogoUrl, поскольку оно обеспечивает быстрый и эффективный способ замены изображения сайта в верхнем левом углу страницы. Обратите внимание, что такое поведение, которое связано со свойством SiteLogoUrl, реализовано элементов управления SharePoint SiteLogoImage, определяемым в разделе «Строка заголовка» стандартной главной страницы SharePoint 2010, например v4.master.

Свойство UIVersion используется для настройки работы текущего сайта в режиме пользовательского интерфейса для сайтов SharePoint 2010 или в режиме предыдущей версии пользовательского интерфейса, используемого при миграции сайтов Office SharePoint Server 2007 в SharePoint 2010. В основном настройка свойства UIVersion влияет на то, выполняется ли привязка элемента управления CssLink к новому стандартному CSS-файлу, который создан для SharePoint 2010 с именем corev4.css или к предыдущему стандартному CSS-файлу с именем core.css, разработанному для создания стилей страницы в Office SharePoint Server 2007. В примере, приведенном в этой статье, значение 4 присваивается для свойства UIVersion, обеспечивая привязку страницы к файлу corev4.css вместо файла core.css.

На данный момент мы рассмотрели способы и причины настройки решением Branding101 важнейших свойств SPWeb на каждом из сайтов в текущем семействе при активации компонента. В этом разделе описывается код, исполнение которого требуется при деактивации компонента. Рекомендуется удалить все настраиваемые элементы фирменной настройки для возврата текущего семейства сайтов в исходное состояние.

В следующем примере рассматривается реализация метода FeatureDeactivating, выполняющего возврат всех страниц к использованию стандартной главной страницы v4.master и удаление привязки к настраиваемому CSS-файлу и настраиваемому логотипу сайта.

public override void FeatureDeactivating(
                       SPFeatureReceiverProperties properties) {
  SPSite siteCollection = properties.Feature.Parent as SPSite;
  if (siteCollection != null) {
    SPWeb topLevelSite = siteCollection.RootWeb;

    // Calculate relative path of site from Web Application root.
    string WebAppRelativePath = topLevelSite.ServerRelativeUrl;
    if (!WebAppRelativePath.EndsWith("/")) {
      WebAppRelativePath += "/";
    }

    // Enumerate through each site and remove custom branding.
    foreach (SPWeb site in siteCollection.AllWebs) {
      site.MasterUrl = WebAppRelativePath + 
                       "_catalogs/masterpage/v4.master";
      site.CustomMasterUrl = WebAppRelativePath + 
                             "_catalogs/masterpage/v4.master";
      site.AlternateCssUrl = "";
      site.SiteLogoUrl = "";
      site.Update();
    }
  }
} 

Добавление приемника событий в фирменные дочерние сайты

Для завершения работы с проектом Branding101 необходимо добавить еще один элемент проекта. Вам все еще требуется способ автоматического применения настраиваемых элементов фирменной настройки к дочерним сайтам по мере их создания в семействе сайтов, активировавшем компонент Branding101. Для этого в Windows SharePoint Services 3.0 или Office SharePoint Server 2007 необходимо использовать ассоциацию возможности. Тем не менее, в SharePoint 2010 добавлена поддержка нового события с именем WebProvisioned, который существенно упрощает эту задачу.

В Обозревателе решений щелкните правой кнопкой мыши узел проекта Branding101, и выберите в меню Проект команду Добавить, после чего нажмите Новый элемент. В диалоговом окне Добавить элемент создайте новый элемент проекта Приемник событий с именем ChildSiteInit.

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

Рис. 10. Мастер настройки SharePoint

Подготовка сайта выполнена

При нажатии на кнопку Готоворазработки SharePoint в Visual Studio 2010 добавляет новый обработчик событий с именем WebProvisioned, а также файл Elements.xml, в котором находится элемент Receivers, необходимый для регистрации этого обработчика событий в текущем семействе сайтов. Преимуществом добавления этого события является то, что оно возникает при каждом создании дочернего сайта. Это значительно упрощает написание кода для копирования соответствующих свойств SPWeb из сайта верхнего уровня в новый дочерний сайт. В следующем примере показан требуемый код.

using System;
using Microsoft.SharePoint;

namespace Branding101.ChildSiteInit {

  public class ChildSiteInit : SPWebEventReceiver {
    public override void WebProvisioned(
                           SPWebEventProperties properties) {
      SPWeb childSite = properties.Web;
      SPWeb topSite = childSite.Site.RootWeb;
      childSite.MasterUrl = topSite.MasterUrl;
      childSite.CustomMasterUrl = topSite.CustomMasterUrl;
      childSite.AlternateCssUrl = topSite.AlternateCssUrl;
      childSite.SiteLogoUrl = topSite.SiteLogoUrl;
      childSite.Update();
    }
  }
}

Развертывание и тестирование

Разработка проекта Branding101 завершена. Чтобы обобщить все требования, структура проекта SharePoint использует четыре основных элемента проекта:

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

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

  3. В-третьих, добавлен приемник компонента, содержащий код перечисления всех сайтов в рамках текущего семейства сайтов и настройки свойств SPWeb для каждого сайта, для привязки к вашей настраиваемой главной странице и настраиваемому CSS-файлу.

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

Конечный проект теперь имеет структуру, которая показана на рис .11.

Рис. 11. Конечный проект в Обозревателе решений

Проект Branding101 в обозревателе решений

Теперь пора перейти к тестированию готовой работы. В Обозревателе решений щелкните правой кнопкой узел проекта Branding101 и нажмите Развертывать. Visual Studio 2010 выполнит построение проекта в пакет решения с именем Branding101.wsp. После этого Visual Studio отправит готовый пакет решения проекта в коллекцию решений сайта тестирования и активирует его. По завершении развертывания необходимо перейти на сайт тестирования и убедиться в том, что теперь сайт использует вашу настраиваемую главную страницу и настраиваемый CSS-файл.

Рис. 12. Сайт тестирования

Сайт тестирования

Хотя этап разработки уже завершен, работа по проектированию только начинается. Теперь ваша задача — отредактировать главную страницу и CSS-файл, чтобы добиться эстетичного дизайна. При желании можно по-прежнему использовать Visual Studio 2010 для разработки главной страницы и CSS-файла.

Поскольку редактирование главной страницы и CSS-файла выполняется в Visual Studio 2010, тестирование работы будет простым. Например, можно поэкспериментировать с внесением незначительных изменений в HTML-код в файле Branding101.master или в правило CSS в файле styles.css. После этого снова выполните команду Развертывать, после чего обновите текущую страницу в браузере, чтобы оценить примененные изменения.

Стоит принять во внимание еще один немаловажный метод проектирования: интеграция SharePoint Designer 2010 в проект. Например, можно открыть сайт тестирования с помощью SharePoint Designer 2010 и открыть главную страницу Branding101.master в режиме расширенного редактирования. Огромным преимуществом такого подхода является то, что SharePoint Designer 2010 предлагает такой дизайн главной страницы для сайтов SharePoint, который превосходит по качеству любые доступные в Visual Studio 2010 варианты. SharePoint Designer 2010 также предлагает достаточное количество функций для редактирования CSS.

Необходимо понимать, что SharePoint Designer не обеспечивает возможностей непосредственного редактирования шаблонов для главных страниц (например, Banding101.master) или шаблонов для CSS-файлов (например, styles.css). Вместо этого при работе в SharePoint Designer 2010 изменения вносятся в подготовленные экземпляры, хранящиеся в базе данных контента. Тем не менее, это не нарушает ход работы, поскольку все, что требуется — это скопировать и вставить данные из SharePoint Designer 2010 в Visual Studio 2010.

После того, как вы внести изменения в дизайн главной страницы в SharePoint Designer 2010, можно просто скопировать в буфер обмена содержимое настроенной главной страницы в представлении кода. После этого снова перейдите в Visual Studio 2010 и вставьте содержимое буфера обмена файл шаблона для Branding101.master. Можно использовать тот же способ для копирования настроенного содержимого файла styles.css из SharePoint Designer и его вставки в версию шаблона файла styles.css в Visual Studio 2010.

Заключение

Теперь в вашем проекте все по высшему разряду. Можно воспользоваться функциями SharePoint Designer 2010 для создания эстетически привлекательного решения фирменной настройки. Также доступны инструменты оформления фирменной настройки в пакет решения, которое может развертываться как изолированное решение или как решение фермы с SharePoint Foundation или SharePoint Server 2010.

Дополнительные материалы

Дополнительные сведения см. в следующих документах:

Об авторе

Участник MVPТед Паттисон — автор, инструктор и один из основателей компании Critical Path Training (Возможно, на английском языке), специализирующейся на обучении технологиям SharePoint. Как партнер со статусом MVP (Microsoft SharePoint Most Valuable Professional), Тед часто сотрудничает с группой разработчиков платформ Майкрософт в области исследования и разработки обучающих материалов по SharePoint для разработчиков, находящихся на ранних стадиях жизненного цикла продукта (альфа- и бета-версий). Тед также является одним из авторов книги Microsoft SharePoint 2010 изнутри (Возможно, на английском языке).