Saturday, April 19, 2008

Деплой ASP.NET страниц под MOSS 2007

Краткая предыстория: До февраля текущего года деплой aspx страниц предлагалось делать вручную, т.е. считалось что разработчику необходимо создать Web Site, затем выкладывать его в папку LAYOUTS самого MOSS. Однако, с появлением экстеншна v1.1 подобные манипуляции, а, следовательно, и ряд проблем были решены.

Т.о, сперва необходимо установить Extension VSeWSS 1.1.

Вариант деплоя до выхода экстеншна весьма подробно описан здесь http://msdn2.microsoft.com/en-us/library/cc297200.aspx .

Перейдем ко второму способу деплоя страниц: теперь не нужно копировать файлы в каталоги MOSS, а достаточно грамотно создать проект. В студии после установки Extension for SharePoint version 1.1 появляется вкладка WSP View (View-> Other Windows -> WSP View). Она отражает ту структуру, которая будет выложена в MOSS. Выявлено два способа деплоя aspx страниц при установленном экстеншне: а. в качестве Template’а ; б. в качестве Feature (Module)

Создаем Empty Sharepoint Project, добавляем к нему New Item -> Template

В дальнейшем, создавая папки в темплэйте, нужно учитывать, что они будут ложиться в каталог C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE . Т.е. если мы хотим положить aspx в Layouts, необходимо создать папку Layouts в темплэйте и положить туда aspx. Сравнивая оба варианта деплоя (а и б) нужно отметить, что когда в проект добавляется в качестве Module, т.е. aspx страница, которая кладется в модуль выступает в роли фичи (feature), тогда страница кладется в сборку MOSS, собственно как и code behind. В случае, когда aspx кладется в MOSS как Tempate, она просто физически кладется в папку Layouts.

Итак, мы создали Template. ascx файлы в SharePoint обычно хранятся в папке ControlTemplates. Для того чтобы отдеить наши контролы, которые лягут в ControlTemplates после деплоя имеет смысл создать отдельную папку для проекта, в нашем случае – это Sample, там и хранится Wizard.asсx. Code behind имеет смысл складывать в отдельную папку в проекте и все что хранится в нем будет в дальнейшем находится в сборке и браться оттуда. (в нашем примере это - Controls\Wizard.ascx.cs).

Добавление Template’а:

Затем добавляем Reference на:

Microsoft.Sharepoint и

Microsoft.Sharepoint.Security

Теперь добавляем aspx страницу в проект: как уже говорил, она должна добавляться как feature, т.е. в проект добавляется Module, далее в Module.xml указывается виртуальный путь к странице.

Добавление Feature:




В конечном счете сама страница физически ложится в папку Features, но подтягивается из самой сборки.

Содержимое Module.xml имеет следующий вид:

Параметр Url содержит виртуальный путь, по которому мы можем обратиться к странице, т.е. к Wiz.aspx после deploy solution можно получить доступ по пути http://win2003moss/SAMP/_sample/Wiz.aspx

Т.о. solution имеет следующий вид:



Содержимое проекта в том виде как он будет выложен в MOSS выглядит так:



При добавлении новой feature плагин к MSVC Extension for Shrepoint Services v 1.1 автоматически обновляет файлы управляющие деплоем проекта в MOSS, такие как manifest.xml и feature.xml, однако их можно отредактировать самим вручную, открыв из WSP View.

Примечание:

При деплое могут вознкнуть ошибки, такие как: подобная feature уже существует (SAMP), в этом случае имеет смысл в Pre-build event command line добавить следующее:

echo Deactivating feature PSStuffSchedule ...

set SPAdminTool=%CommonProgramFiles%\Microsoft Shared\web server

extensions\12\BIN\stsadm.exe

set TargetUrl=http://win2003moss

"%SPAdminTool%" -o deactivatefeature -name SAMP -url %TargetUrl%

echo Uninstalling feature PSStuffSchedule ...

"%SPAdminTool%" -o uninstallfeature -name SAMP –force

Тем самым происходит деактивация feature и ее удаление. По идее при деплое проекта это должно происходить автоматически, но мне приходилось не раз сталкиваться с подобной проблемой. (альтернативой Pre-build event command line может быть запуск bat-файла с этим же содержимым перед деплоем проекта).

Если возникают другие ошибки на подобии «Закрыт доступ к папке» и пр. – необходимо перегружать сервис World Wide Web Publishing, такова уж специфика MOSS.

Алелуя братья, успехов на moss поприще.