Share via


Windows SharePoint Services 3.0: Создание и развертывание решений (часть 4)

Рассмотрим процесс добавления веб-части в наше решение. Для этого добавьте в решение новый класс и введите следующий код:

using System;
using System.Web.UI.WebControls.WebParts;

namespace NMUPortal
{
    public class HelloWebPart : WebPart
    {
        protected override void RenderContents(System.Web.UI.HtmlTextWriter writer)
        {
            writer.Write("Hello World! "+Context.User.Identity.Name);
            base.RenderContents(writer);
        }
    }
}

В отличии от WSS 2.0 в новой версии Вы можете использовать самые обычные веб-части, созданные на основе класса System.Web.UI.WebControls.WebParts.WebPart. При этом механизм создания ничем не отличается от механизма в ASP.NET 2.0. Между тем старый класс Microsoft.SharePoint.WebPartPages.WebPart также сохранился и его можно использовать, но для этого необходимо добавить ссылку на сборку Microsoft.SharePoint.dll, которая находится в папке C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\ISAPI. Принято считать, что старый класс сохранили лишь для обеспечения совместимости с ранее разработанными веб-частями, но если Вы попробуете разработать веб-часть для размещения на служебных страницах или страницах, ассоциированных со списками (вот только зачем?), то столкнетесь с необходимостью использования Microsoft.SharePoint.WebPartPages.WebPart.

Если Вы создали проект в Visual Studio на основе шаблона Control Library, то для создания сборки можно воспользоваться командой Build. Но прежде чем компилировать код, необходимо настроить ряд параметров, которые позволят подготовить сборку для развертывания в Глобальный кэш сборок (GAC). (GAC представляет собой универсальное хранилище для сборок, которые доступны всем приложениям. Единой директории для GAC не существует, а развертывание сборки в GAC осуществляется не с помощью копирования, а с помощью специальной утилиты gacutil.). Чтобы сборка могла быть развернута в GAC, у нее должно быть строгое имя, которое определяется культурой, версией,именем сборки, а также цифровой подписью. Все эти данные хранятся в файле AssemblyInfo.cs Вашего проекта, исключая ключ для подписи. Чтобы сгенерировать ключ, необходимо запустить утилиту sn.exe. Это можно сделать из командной строки Visual Studio. Следующая команда сгенерирует нужный файл:

sn.exe -k mykey.snk

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

Приступим к внесению изменений в Решение. Поскольку код нашей веб-части содержится в сборке, то сборку необходимо развернуть в GAC (или поместить в bin директорию приложения), а также сделать изменения в конфигурационном файле приложения. Так сборка не будет работать, пока Вы не пропишите специальный элемент SafeControl в web.config приложения. Например так:

<SafeControl Assembly="NMUPortal, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e1ffca03d8df0be6" Namespace="NMUPortal" TypeName="*" Safe="True" />

Естественно stsadm умеет все это делать за нас. Для этого добавим ссылку на сборку в manifest.xml:

<Assemblies>
    <Assembly Location="NMUPortal.dll" DeploymentTarget="GlobalAssemblyCache">
      <SafeControls>
        <SafeControl Assembly="NMUPortal, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e1ffca03d8df0be6" Namespace="NMUPortal" TypeName="*" Safe="True" />
      </SafeControls>
    </Assembly>
  </Assemblies>

Тут мы указываем имя сборки, хранилище для развертывания (GAC или bin), а также описываем SafeControl, который будет добавлен в web.config.

Чтобы сборка стала доступной, добавляем ее в ddf.-файл

Solution\NMUPortal.dll NMUPortal.DLL

(В настройках проекта правильно укажите директорию для сборки - Solution)

Следующим шагом будет описание Feature, которая разворачивает веб-часть.

Создадим Feature под названием HelloWebPart.

<?xml version="1.0" encoding="utf-8" ?>
<Feature Title="Hello World" Id="9194FEA3-A020-4a10-9F96-5D8FFA695E58" Scope="Site" xmlns="https://schemas.microsoft.com/sharepoint/">
  <ElementManifests>
    <ElementManifest Location="Elements.xml" />
  </ElementManifests>
</Feature>

Задача этой Feature разместить описание веб-части в списке веб-частей создаваемого сайта. Описание веб-части принято размещать в специальном файле с расширением .webpart. Вот этот файл:

HeloWebPart.webpart

<?xml version="1.0" encoding="utf-8"?>
<WebPart xmlns="https://schemas.microsoft.com/WebPart/v2">
  <Assembly>NMUPortal, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e1ffca03d8df0be6</Assembly>
  <TypeName>NMUPortal.HelloWebPart</TypeName>
  <Title>Hello</Title>
  <Description>Show Hello</Description>
  <PartImageLarge>/_layouts/images/msimagel.gif</PartImageLarge>
</WebPart>

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

<?xml version="1.0" encoding="utf-8" ?>
<Elements xmlns="https://schemas.microsoft.com/sharepoint/">
  <Module Name="HelloWebPart" Path="dwp" List="113" Url="_catalogs/wp" RootWebOnly="TRUE">
    <File Url="HelloWebPart.webpart" Type="GhostableInLibrary">
      <Property Name="Group" Value="NMU Web Parts"/>
    </File>
  </Module>
</Elements>

Тут мы использовали элемент Module, который позволяет развернуть наш .webpart-файл в список веб-частей сайта (список всегда имеет ID 113).

Чтобы развернуть Feature, добавим ее описание в manifest.xml

<FeatureManifest Location="HelloWebPart\feature.xml"/>

Чтобы .webpart-файл стал доступен в директории нашей Feature, добавим ссылку на него в раздел TemplateFiles:

<TemplateFile Location="Features\HelloWebPart\dwp\HelloWebPart.webpart"/>

Вместо TemplateFile мы могли бы использовать ElementFile при описании элементов Feature. Но я сделал почему-то так.

Чтобы наша веб-часть была активна, опишем ссылку на Feature в onet.xml:

<SiteFeatures>
  <Feature ID="9194FEA3-A020-4a10-9F96-5D8FFA695E58" />
</SiteFeatures>

И на последнем этапе внесем изменения в ddf.

Template\Features\HelloWebPart\feature.xml HelloWebPart\feature.xml
Template\Features\HelloWebPart\elements.xml HelloWebPart\elements.xml
Template\Features\HelloWebPart\HelloWebPart.webpart Features\HelloWebPart\dwp\HelloWebPart.webpart

Вот и все. Веб-часть будет доступна на сайте, созданном на основе нашего шаблона.