|
На сегодняшний день (июль 2004) книги на русском языке по этой в продаже отсутствуют, да и в сети, прямо скажем, информации по этой теме не густо. Эта статья поможет Вам создать простейшую веб-часть для Microsoft SharePoint 2003, и развернуть ее на сервере. От читателя требуется лишь понимание технологии ASP.NET и простейшие навыки работы с Visual Studio и Internet Information Server.
Подготовка
Для создания веб-частей в Visual Studio 2003 понадобится шаблон, который можно скачать с сайта Microsoft по адресу http://www.microsoft.com/downloads/details.aspx?FamilyId=CAC3E0D2-BEC1-494C-A74E-75936B88E3B5&displaylang=en
После его установки в Visual Studio в списках проектов на C# и Visual Basic появится пункт Web Part Library.
Вам также понадобится Microsoft Windows SharePoint Services 2003 Software Development Kit (SDK). Взять его можно по адресу http://www.microsoft.com/downloads/details.aspx?FamilyId=AA3E7FE5-DAEE-4D10-980F-789B827967B0&displaylang=en
Написание веб-части
Для того чтобы веб-часть считалась на сервере безопасной, необходимо сгенерировать публичный ключ. Воспользуемся утилитой sn.exe для генерирования пары ключей с помощью команды
sn.exe -k c:\keypair.snk
Этот вызов сгенерирует файл ключей под именем keypair.snk и поместит его в корневой каталог диска C:.
Помимо проекта с самой веб-частью, понадобится проект для развертывания ее на сервере из cab-архива, поэтому лучше начать с создания в Blank Solution в Visual Studio. Назовем его Article
В нем создадим проект Web Part Library на C# под именем SimpleWebPart
После переименования класса из WebPart1 в MainClass и удаления комментариев мы получим примерно такой код:
using System;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml.Serialization;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.WebPartPages;
namespace SimpleWebPart
{
/// <summary>
/// Простая веб-часть.
/// </summary>
[DefaultProperty("Text"),
ToolboxData("<{0}:MainClass runat=server></{0}:MainClass>"),
XmlRoot(Namespace="SimpleWebPart")]
public class MainClass : Microsoft.SharePoint.WebPartPages.WebPart
{
private const string defaultText = "";
private string text = defaultText;
[Browsable(true),
Category("Miscellaneous"),
DefaultValue(defaultText),
WebPartStorage(Storage.Personal),
FriendlyName("Text"),
Description("Text Property")]
public string Text
{
get
{
return text;
}
set
{
text = value;
}
}
protected override void RenderWebPart(HtmlTextWriter output)
{
output.Write(SPEncode.HtmlEncode(Text));
}
}
}
Написание веб-части это на самом деле написание серверного элемента управления, только вместо переопределения метода void Render(HtmlTextWriter object) необходимо переопределить метод void RenderWebPart(HtmlTextWriter object).
Попробуем реализвоать в нашей веб-части простейшую задачу – поприветствуем пользователя после того, как он веедет свое имя:
using System;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml.Serialization;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.WebPartPages;
namespace SimpleWebPart
{
/// <summary>
/// Простая веб-часть.
/// </summary>
[DefaultProperty("Text"),
ToolboxData("<{0}:MainClass runat=server></{0}:MainClass>"),
XmlRoot(Namespace="SimpleWebPart")]
public class MainClass : Microsoft.SharePoint.WebPartPages.WebPart
{
private const string defaultText = "";
private string text = defaultText;
[Browsable(true),
Category("Miscellaneous"),
DefaultValue(defaultText),
WebPartStorage(Storage.Personal),
FriendlyName("Text"),
Description("Text Property")]
public string Text
{
get
{
return text;
}
set
{
text = value;
}
}
protected Label message;
protected TextBox name;
protected Button go;
protected override void RenderWebPart(HtmlTextWriter output)
{
output.Write(SPEncode.HtmlEncode(Text));
output.WriteLine("<font size=\"+3\">");
message.RenderControl(output);
output.WriteLine("</font>");
output.WriteLine("<p>");
output.WriteLine("Введите Ваше имя");
name.RenderControl(output);
output.WriteLine(" ");
go.RenderControl(output);
}
protected override void CreateChildControls()
{
message = new Label();
name = new TextBox();
go = new Button();
name.Columns = 12;
go.Text = "Приветствие";
go.Click += new EventHandler(go_Click);
Controls.Add(message);
Controls.Add(name);
Controls.Add(go);
}
protected void go_Click(object sender, EventArgs e)
{
if(!name.Text.Equals(""))
{
message.Text = "Приветсвую Вас, " + name.Text + "!";
}
}
}
}
Для тех кто создавал серверные элементы управления, здесь нет ничего сложного. Да простят меня гуру ASP.NET за то что я не воспользовался методом RenderBeginTag, а писал HTML вручную :), просто мне так удобнее.
Редактирование файла свойств сборки, DWP-файла и Manifest.xml
Для того чтобы установить версию сборки и обеспечить ее открытым ключом откроем файл AssemblyInfo.cs и изменим строку
[assembly: AssemblyKeyFile("")]
на строку
[assembly: AssemblyKeyFile("c:\\keypair.snk")]
и проследим что версия у сборки равна 1.0.0.0 .
Файл описания веб-части имеет расширение .dwp и предназначен для установки свойств веб-части. Сначала выясним открытый ключ у нашей сборки, для этого откомпилируем проект и выполним команду:
sn.exe –T SimpleWebPart.dll
где SimpleWebPart.dll, наша сборка, предположим, ключ равен 325c8845837b2d91 .
Теперь зная публичный ключ сборки откроем SimpleWebPart.dwp и приведем его примерно к вот такому виду:
<?xml version="1.0" encoding="utf-8"?>
<WebPart xmlns="http://schemas.microsoft.com/WebPart/v2" >
<Title>TestWebPart</Title>
<Description>TestWebPart.</Description>
<Assembly>SimpleWebPart, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=325c8845837b2d91</Assembly>
<TypeName>SimpleWebPart.MainClass</TypeName>
<!-- Specify initial values for any additional base class or custom properties here. -->
</WebPart>
Вобщем, особых комментариев не требуется. Остановлюсь лишь на <TypeName>. Дело в том что сборка веб-частей может содержать несколько веб-частей. Каждая веб-часть это пара класс + файл описания веб-части, поэтому в TypeName требуется указывать полное название класса веб-части.
Файл Manifest.xml нужен для инсталлятора и содержит в себе список файлов, которые должны быть развернуты на сервере. Секция <DwpFiles> содержит все dwp-файлы, сборки, по одной на каждую веб-часть. Секция <ClassResources> может содержать имена файлов используемых веб-частью. Например, если необходим файл MyLogo.gif, то сам файл нужно включить в cab-архив (об этом ниже), а его имя указать в списке ресурсов Manifest.xml. Из веб-части к нему можно обратиться так
/_wpresources/SimpleWebPart/1.0.0.0__325c8845837b2d91/MyLogo.gif
Создание cab-архива и развертывание его на сервере
Создадим в нашем решении Article новый инсталляционный проект с именем SimpleWebPartInstall. Добавим в него выходные данные проекта SimpleWebParts, файлы SimpleWebPart.dwp и Manifest.xml
В результате в архиве будут содержаться файлы
- SimpleWebPart.dll
- SimpleWebPart.dwp
- Manifest.xml
- Файл с расширением .osd
Развертывание cab-архива (назовем его пакет веб-частей) производится на сервере командой
stsadm.exe -o addwppack -filename SimpleWebPartInstall.cab -url http://myserver -globalinstall –force
где –force – перезаписывает пакет веб-частей, если такой уже имеется на сервере, а –globalinstall – копирует сборку в глобальный кеш сборок (GAC)
Удаляется пакет командой
stsadm.exe -o deletewppack -name SimpleWebPartInstall.cab
Если вы обновили пакет веб-частей, необходимо перезапустить пул приложений IIS, в котором работает SharePointPortal.
Вот, в приницпе, и все, что требуется знать для того, чтобы начать создавать собственные веб части для Microsoft SharePoint 2003 :)
|