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
Вот и все. Веб-часть будет доступна на сайте, созданном на основе нашего шаблона.
Comments
Anonymous
February 11, 2009
PingBack from http://www.clickandsolve.com/?p=6311Anonymous
February 12, 2009
У меня есть вопрос: Когда я создавал создавал вебчасть мне в папку сайта приходилось скидывать 2 файлаа: мою библиотечку (.dll) пользовательский элемент управления (.ascx) А когда я создаю шаблон то как мне подключать эти файлы к моему проекту?Anonymous
February 15, 2009
Николай, вопрос понял не до конца. .dll можно развернуть в GAC (как описано выше) или в bin директорию виртуального каталога. Подключать dll к проекту не нужно. Ее достаточно упаковать в .cab файл. Компиляцию можно сделать, испольуя шаблон Control Library в VS. А зачем ascx для веб-части? Прошу все вопросы писать на Sergiy.Baydachnyy@microsoft.com. Я смогу отвечать оперативнее.