В России интернет сайтов на SharePoint пока немного (за рубежом их значительно больше), между тем эта платформа, широко используемая в интранет, выглядит очень привлекательной и в интернет/экстранет сценариях для заказчиков и для веб-разработчиков. Многие вообще не знают, что на SharePoint можно делать веб-сайты. А между тем, функционал платформы позволяет очень быстро создавать эффективные с точки зрения бизнеса веб-сайты, притом, что базовые Windows Sharepoint доступны бесплатно.

Давайте разберем довольно типовой сценарий и вы скажете — стоит ли использовать Sharepoint для веб, а если не стоит, то прошу прокомментировать — почему? Здесь еще дело в том, что в рамках семинаров TechDays я выступаю с демонстрацией создания такого сценария и вы можете скачать и презентацию и пошаговую инструкцию как ее сделать – можете попробовать и вы на своем компьютере. По этой причине, мне тем более интересны комментарии и отзывы.

Ситуация


Есть небольшая компания, пусть будет “Рога и копыта”, которой нужно сделать сайт для работы с поставщиками и партнерами.

short-horns-and-hooves
Сценарий, который требуется отработать:


  1. поставщики размещают в форме на сайте предложения о продаже рогов
  2. продавцы-партнеры размещают в другой форме заявки на готовую продукцию для своих магазинов
  3. сотрудники компании “Рога и копыта” отрабатывают заявки, взаимодействуют с производственным отделом
  4. руководители отделов получают отчеты о процессе, контролируют ключевые показатели (кол-во заявок в день, процент принятых и прочее)

Руководство расценивает сайт как важный бизнес-инструмент и поэтому считает, что
  • с ним должны уметь работать практически все сотрудники,
  • сайт должен в перспективе интегрироваться с другими системами,
  • это должно быть поддерживаемое решение с понятными перспективами развития

В требования заказчика к сайту ложатся такие пункты:
  • ПО бесплатное либо очень недорогое (допустим в пределах 1000 долларов)
  • Разработка по времени минимальная (пусть будет 1 неделя на первоначальную версию)
  • Наличие документированного API для последующего развития системы (обязательно)
  • Возможность использование собственного дизайна для сайта (обязательно)
  • Возможность аутентификации, как внешних пользователей, так и сотрудников компании (обязательно)
  • Поддержка браузеров для партнеров и поставщиков — IE, FireFox, Safari, Opera (очень желательно)
  • Наличие специалистов на местном рынке (очень желательно)
  • Простой интерфейс для пользователей и возможность интеграции с Office 2007 (очень желательно)

Мне кажется, что пожелания заказчика довольно уместны и не выглядят надуманно.

Решение


Установка Windows Sharepoint Services


Windows Sharepoint Services 3.0 можно установить по инструкции README.docx, которая находится в приложенном архиве. После установки WSS нужно создать узел по умолчанию. Для этого нужно запустить Центр Администрирования Sharepoint (Sharepoint Administration Center) и выполнить два простых действия:
  1. Создать веб-приложение (Центр администрирования > Управление приложениями > Создание или расширение веб-приложения > Создание веб-приложения). В качестве учетной записи, из под которой будет работать ваше веб-приложение, укажите какой-нибудь служебный login из домена или учетную запись с локальной машины.
  2. Создать коллекцию узлов для этого приложения с шаблоном по умолчанию (Центр администрирования > Управление приложениями > Создание семейства веб-узлов)

Так, теперь у вас есть сайт по умолчанию и выглядит он приблизительно вот так:

Picture1

Настройка приложения для обработки заявок


Насоздавать необходимых типов, списков, завести группы пользователей, раздать соответствующие права на эти списки, и, наконец, создать рабочий процесс в Sharepoint Designer, который будет назначать задачи при появлении нового элемента в этом списке… все это сможет сделать и соображающий пользователь, прочитав документацию. На базовом уровне, конечно :) Но, кстати, для нашего сценария этого уровня вполне должно хватить.
Я демонстрирую эту часть за 30 минут в своем скринкасте об использовании Sharepoint для простого сайта приема заявок от населения с интеграцией с Office при минимальных финансовых затратах. Мой коллега Сергей Пиминов приблизительно за это же время автоматизирует процесс оформления командировок.
Я три основных мысли в виде скриншотов привожу.
Вот так вот, по умолчанию, выглядит форма заявки на сбыт рогов в FireFox:

Picture2
Вот так строится рабочий процесс создания задачи при появлении новой заявки в Sharepoint Designer:

Picture3_
Вот так выглядит созданная задача у сотрудника, при условии, что он привязал Outlook к Sharepoint сайту одним нажатием мышки:

Picture4
Все довольно просто.
Собственно, в этом плане у платформы SharePoint все, действительно, очень хорошо – недавно проводили конкурс на лучший интранет портал и из десяти победителей пятеро использовали Sharepoint – каждый второй успешный интранет проект реализован на Sharepoint. На эту тему в обзоре даже есть специальная глава. Поэтому на этом останавливаться детально не будем.

Аутентификация пользователей и безопасность


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

Picture3
Вообще говоря, у нас есть подробное описание и скачиваемый пакет, которые позволят реализовать этот сценарий и это, конечно же, рекомендованный и максимально защищенный путь. Но в моих презентациях на TechDays я использую вариант с хранением пользователей в локальной базе данных, которая специальным образом построена для безопасного хранения информации о пользователях и их паролях. Это будет использование ASP.NETного провайдера аутентификации SQLMembershipProvider.
В архиве можно найти пошаговый сценарий в комментариях моей презентации, а здесь я опишу основные шаги, чтобы не перегружать деталями статью.
Для начала надо создать базу данных для хранения информации о пользователях с помощью вот такой команды:

aspnet_regsql.exe -S .\sqlexpress -A all -d fba –E
(-S инстанция сервера, –A функционал аутентификации и персонализации, который сможет обеспечиваться этой базой, –d название базы, –E – неважно, сами посмотрите если интересно ;))

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

<connectionStrings>
<add name=«FBA_CS» connectionString=«Data Source=.\sqlexpress;Initial Catalog=fba;Integrated Security=True»/>
</connectionStrings>
<system.web>
<membership defaultProvider=«FBA_Member»>
<providers>
<add
connectionStringName=«FBA_CS»
enablePasswordRetrieval=«false»
enablePasswordReset=«true»
requiresQuestionAndAnswer=«false»
applicationName=«RogaIKopyta»
requiresUniqueEmail=«false»
passwordFormat=«Hashed»
maxInvalidPasswordAttempts=«5»
minRequiredPasswordLength=«1»
minRequiredNonalphanumericCharacters=«0»
passwordAttemptWindow=«10»
passwordStrengthRegularExpression=""
name=«FBA_Member»
type=«System.Web.Security.SqlMembershipProvider,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a» />
</providers>
</membership>
<roleManager enabled=«true» defaultProvider=«FBA_Role»>
<providers>
<add
connectionStringName=«FBA_CS»
applicationName=«RogaIKopyta»
name=«FBA_Role»
type=«System.Web.Security.SqlRoleProvider,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a» />
</providers>
</roleManager>
</system.web>

Собственно, теперь мы можем расширить наше существующее веб-приложение до зоны в Интернет:

Picture5
По сути дела, Sharepoint создает в IIS еще один веб-сайт с привязкой к hostheader “rogaikopyta.ru”, который будет так же обрабатываться движком Sharepoint. А Sharepoint уже понимает, что это будет существующий узел rogaikopyta, только для него теперь можно указать другую модель аутентификации:

Picture6
Теперь у нас есть 2 веб-сайта (интранет и интернет) и соответственно 2 web.config, в которые и надо добавить секции сформированные раннее. Эти файлы живут в каталогах C:\inetpub\wwwroot\wss\VirtualDirectories\[ID вебсайта]. Теперь оба наших сайта знают про пользователей, которые будут храниться не в Active Directory, а в SQL таблице. Но то, что они про них знают, еще недостаточно, чтобы этих пользователей пустили на сайт – нужно еще рассказать Sharepoint какие будут права у этих групп и пользователей. Кстати, мы добавили FBA (Forms Based Authentication) провайдеры в нашу интранет зону, как раз, для того, чтобы с нашим Windows account и админскими правами зайти на внутренний сайт и раздать права на сайт пользователям из Интернет зоны, про которых этот сайт теперь тоже знает (хотя он этих пользователей, скорее всего, не увидит в дальнейшем).

Picture7
Ну а вот теперь, мы можем совершенно спокойно зайти на сайт из того же FireFox (только с целью продемонстрировать работающие менюшки в Sharepoint :) ), использую учетную запись из FBA.

Picture8
Я совершенно уверен, что даже такой упрощенный вариант аутентификации пользователей в смешанных зонах будет безопаснее большинства веб-сайтов, в которых этот механизм разрабатывался веб-студиями самостоятельно. А сейчас, как известно, киберпреступно��ть цветет полным цветом.

Внешний вид сайта


Как я уже говорил в самом начале, за рубежом веб-сайтов на платформе Sharepoint довольно много – вот сотня наиболее интересных со скриншотами. У нас их пока мало – я вот здесь собрал ссылки на известные мне сайты (если знаете другие – можете туда добавить).
По поводу изменения внешнего вида сайта на Sharepoint у нас есть подробный и обстоятельный доклад Тани Сметаниной. Она там разбирает способы брендинга для коммечерского продукта Microsoft Office Sharepoint Server, в котором реализована поноценная фунциональность системы управления контентом. Я же в своей презентации использую упрощенный функционал бесплатных Windows Sharepoint Services.
По моему прошлому опыту, процесс брендинга на Sharepoint, надо признаться, более трудоемкий чем использование того же Template-Toolkit :) Но для B2B сайта сделать простой дизайн особого труда не составит. Смотрите сами – в общем случае за внешний вид отвечает так называемый MasterPage, в котором HTML определяет внешний вид и местоположение PlaceHolders, в которых движок Sharepoint отрендерит свой контент – меню, заглавие, основная область и прочее. Все эти placeholders в своем MasterPage нужно оставить, а если они не будут использоваться — спрятать используя <asp:Panel visible=«false» runat=«server»></asp:Panel>. Таким образом, если с помощью Sharepoint Designer в файл _catalogs/masterpage/default.master скопировать текст minimal.txt, который я приложил к архиву, то страница будет выглядеть вот так:

Picture9
Теперь сверившись с документацией (кстати, уже на русском языке) по каждому placeholder можно нарисовать свой дизайн. Чтобы не рисовать рога и копыта самому, я попросил автора сайта Start In Garage прислать мне свой вариант masterpage и он мне любезно его предоставил.
Если вы замените содержимое masterpage на текст из файла startingarage.txt, с помощью того же Sharepoint Designer, скопируете в корень сайта 2 файла — sig_core.css и web.sitemap, а также скопируете все картинки в каталог images на сайте, то получите вот такой внешний вид сайта:

Picture10
Ну в общем, становится очевидно, что верстальщик по макету дизайнера может дальше доводить этот masterpage до неузнаваемого вида, например, вот такого – Motobloggers.
А если пойти еще дальше, то можно сделать на SharePoint вот такой вот сайт или такой :)

Picture14
И, действительно, сделать это вполне можно, т.к. Silverlight контрол можно легко научить брать информацию из веб-сервисов, которые доступны для данных в Sharepoint без дополнительных усилий со стороны разработчика. Как ребята из EPAM это делают для своего проекта интерактивного управления знаниями внутри компании рассказывается в этом подробнейшем докладе, сделанном не на PowerPoint, а на Silverlight. Там же вы найдете коды приложения. Обязательно посмотрите – очень интересно :)

Поддержка IT отделом и дальнейшее развитие решения


То, что наше решение изначально обладает набором веб-сервисов для изменения содержимого и настроек сайта, и мы можем как угодно интегрировать наш сайт с другими системами – само собой разумеющийся факт. Вот подробная документация на русском.
Меня восхищает другое… На Windows платформе любым .NET приложением можно “рулить” из PowerShell. Например, когда я делал аутентификацию пользователей с использованием SQLMembershipProvider мне ужасно не хотелось создавать пользователей из нарядного веб-интерфейса – просто потому что тру-сисадмины не любят нажимать кнопки в веб-интерфейсах, тем более если нужно создать сотню пользователей. Я задумался над тем, чтобы реализоваться этот функционал на PowerShell. Решение довольно простое — модель провайдеров аутентификации в .NET реализована в сборке System.Web, а настройки для этих провайдеров, как мы видели, берутся из соответствующих секций .config файла. PowerShell – это .NET приложение, поэтому я создал файл powershell.exe.config, скопировал в него XML со строкой соединения и секцией system.web, подгрузил сборку System.Web и моя командная строка PowerShell превратилась с точки зрения .NET в ASP.NET веб-сайт, в котором я могу создавать пользователей и группы! За 5 минут был создан вот такой вот файлик:

[System.Reflection.Assembly]::LoadWithPartialName(«System.Web»);
function global:create-asprole([String]$name=$(throw 'Parameter -name is missing!'))
{
[System.Web.Security.Roles]::CreateRole($name)
write-host «Role was created»
}
function global:add-aspusertorole([String]$user=$(throw 'Parameter -user is missing!'),
[String]$group=$(throw 'Parameter -group is missing!'))
{
[System.Web.Security.Roles]::AddUserToRole($user, $group)
write-host «User was added to role»
}
function global:create-aspuser([String]$user=$(throw 'Parameter -user is missing!'),
[String]$password=$(throw 'Parameter -password is missing!'),
[String]$email=$(throw 'Parameter -email is missing!'))
{
$result = [System.Web.Security.Membership]::CreateUser($user, $password, $email)
if ($result) { write-host «User was created» }
}

и я получил возможность написать скрипт (ну и пойти пить пиво соответственно), как тру-сисадмин:

create-asprole admins
create-asprole users
create-aspuser user1 password1 email1
create-aspuser user2 password2 email2
create-aspuser user3 password3 email3
add-aspusertorole user1 users


Объектная модель SharePoint реализована на .NET и поэтому мы можем замечательно работать с ним из PowerShell. Подробнее про работу с Sharepoint из PowerShell можно узнать из доклада Александра Романова – Ударим PowerShell’ом по SharePoint’у :) Мой вариант настроек для работы с Sharepoint и описанные скрипты есть в архиве.
PowerShell это, действительно, нечто! Даже для веб-решений под Unix платформу не всегда имеется полноценный интерфейс работы из командной строки. Как не странно, на Windows платформе такая сложность исчезает.

Готовые и полуготовые решения, которые вы можете использовать


Ни один доклад сейчас не проходит без упоминания про кризис и ситуация такова, что IT отделы заморозили внедрение крупных проектов, а веб-студии ищут возможности заработать на тех клиентах, для которых сайты уже сделаны. Здесь могут помочь 40 готовых шаблонов для Windows Sharepoint Services.
IT отд��лы могут своими силами, малой кровью автоматизировать некоторые задачи, а также создать сайт своего отдела (времени на это не потребуется) и показать руководству на этом сайте как много задач перед ними стоит и насколько они критичны для бизнеса :)
Веб-студии могут включить в свой портфолио эти 40 шаблонов и пройтись по своим клиентам с предложением “занедорого” решить в компании одну из задач. Т.е. если в компании имеется Windows Server 2003/2008 с обязательным набором клиентских лицензий, то без дополнительных инвестиций в программное обеспечение, на базе WSS можно решить эти задачи. Конечно же, это не готовые вертикальные решения, в шаблонах реализован базовый функционал, который вы можете развить самостоятельно, но этого зачастую бывает достаточно. 2 года назад для одной компании мной был предложен временный вариант решения задачи Служба технической поддержки на WSS, до тех пор пока не купят полноценную систему. Насколько я знаю, до сих пор используются WSS и в ближайшее время вряд ли что-то изменится :)

Не стоит и говорить, что решения на этих шаблонах можно также опубликовать в Интернет. Компания Infobox выложила описание этих шаблонов и демосайты с их использованием для своих заказчиков.

В своей демонстрации я за 5 минут создаю веб-сайт IT отдела компании. В том же PowerShell запускаются вот эти команды, которые приведены в инструкции по установке шаблонов:

stsadm -o addsolution -filename ApplicationTemplateCore.wsp
stsadm -o deploysolution -allowgacdeployment -immediate -name ApplicationTemplateCore.wsp
stsadm -o copyappbincontent
stsadm -o addsolution -filename ITTeamWorkspace.wsp
stsadm -o deploysolution -allowgacdeployment -immediate -name ITTeamWorkspace.wsp
потом нам остается создать сайт по установленному шаблону

Picture11
и мы получаем вот такой вот сайт, где можно вести IT проекты, отрабатывать запросы пользователей, контролировать работоспособность отдела с помощью настраиваемых индикаторов и т.д.

Picture12
Picture13

Сколько денег это стоит и что выбрать заказчику?


В семействе SharePoint можно выделить 2 группы продуктов. Первая — WSS (Windows SharePoint Services 3.0) – это базовая технология для повышения продуктивности совместной работы (распространяется как бесплатный компонтент для Windows Server и Small Business Server), с помощью которой можно быстро развернуть интранет сайт для небольших коллективов и организаций или как пилотный проект. Вторая группа – SharePoint Server 2007 и SharePoint Server 2007 for Internet Sites – стоят денег, поскольку предоставляют востребованный в корпоративной среде функционал — например, управление контентом, поиск по документам и информационным системам, сбор данных с помощью форм, бизнес-анализ и т.п. Вот здесь, например, Максим Козленко демонстрирует использование Excel Services, составляющую MOSS.

Для того чтобы все описанное в этой статье было правильно лицензировано в интранет, достаточно иметь Windows Server 2003/2008 и если размер базы данных не будет превышать 4Gb можно использовать бесплатный SQL Express – т.е. нулевые инвестиции.

Если мы рассматриваем интернет/экстранет сценарий то, любой аутентифицированный пользователь должен иметь Windows Server лицензию. Если таких пользователей несколько десятков – купите на них Windows Server CAL, они недорогие. Если пользователей может быть много и непонятно сколько CAL нужно покупать – купите External Connector для Windows Server. Также вы можете использовать Windows Web Server 2008 (который был доступен бесплатно по акциям на сайте microsoftweb.ru) для интернет/экстранет сценария и не думать о CAL для внешних пользователей. На Windows Web Server нельзя по лицензионному соглашению установить стандартный SQL сервер, но можно установить SQL Express с ограничением в 4Gb или использовать имеющийся в инфраструктуре SQL сервер – т.е. можно сохранить нулевые инвестиции…
Подробное сравнение функционала версий есть по ссылке.

Подробнее про лицензирование WSS для интернет написано здесь.

Здесь только главное не начать “экономить на спичках” :) Есть возможность начать с минимума и масштабировать систему до серьезных масштабов с использованием правильных продуктов. За то время (и, соответственно, стоимость проекта) пока вы будете самостоятельно реализовывать функционал MOSS, можно разобраться с Sharepoint Server и существенно повысить свою стоимость, как разработчика, на рынке труда – хороших специалистов по Sharepoint на порядок меньше чем, например, разработчиков PHP, а востребованность в SharePoint растет – это факт даже в условиях кризиса (для Великобритании, но для России ситуация в тренде не будет отличаться).

Picture15
В конце концов, если у вас есть идея создания собственного продукта или коммерческого сервиса и вы видите уместным использование платформы Sharepoint – просто прочитайте описание программы BizSpark в моем блоге и пришлите мне запрос – sergey.polyakov@microsoft.com — я предоставлю весь необходимый софт для коммерческого использования, включая мощный MOSS for Internet на 3 года за 100 долларов.

Резюме


В заключение, помимо того, что мое решение полностью соответствует требованиям заказчика, хочу добавить краткие результаты с точки зрения директоров в компании.
Исполнительный директор:
  • Веб-сайт является интегрированным с другими системами бизнес инструментом
  • Нет проблем с обучением пользователей + функционал сайта доступен через Office 2007
  • Получен готовый функционал для контроля и отчетности бизнес-процессов

Финансовый директор:
  • Разработка и сроки минимальные
  • Стоимость ПО варьируется
  • Сделанные инвестиции защищены лидирующим положением продукта на рынке и долгосрочными планами развития платформы
  • В регионе найдутся специалисты со знанием .NET, которые смогут дальше развивать решение

IT директор:
  • Используется существующая IT инфраструктура и не нужно обучать системных администраторов
  • Приложение легко масштабируется за счет особенностей платформы
  • Интеграция и поддержка решения с другими системами осуществляется с помощью документированного API и PowerShell

horns-and-hooves

Ссылки в догонку



Есть вопросы и комментарии по теме? Пишите.