В России интернет сайтов на SharePoint пока немного (за рубежом их значительно больше), между тем эта платформа, широко используемая в интранет, выглядит очень привлекательной и в интернет/экстранет сценариях для заказчиков и для веб-разработчиков. Многие вообще не знают, что на SharePoint можно делать веб-сайты. А между тем, функционал платформы позволяет очень быстро создавать эффективные с точки зрения бизнеса веб-сайты, притом, что базовые Windows Sharepoint доступны бесплатно.
Давайте разберем довольно типовой сценарий и вы скажете — стоит ли использовать Sharepoint для веб, а если не стоит, то прошу прокомментировать — почему? Здесь еще дело в том, что в рамках семинаров TechDays я выступаю с демонстрацией создания такого сценария и вы можете скачать и презентацию и пошаговую инструкцию как ее сделать – можете попробовать и вы на своем компьютере. По этой причине, мне тем более интересны комментарии и отзывы.
Есть небольшая компания, пусть будет “Рога и копыта”, которой нужно сделать сайт для работы с поставщиками и партнерами.
![short-horns-and-hooves short-horns-and-hooves](https://habrastorage.org/getpro/habr/post_images/9c6/bb2/cba/9c6bb2cba1078e2365db7e6f3f21049e.gif)
Сценарий, который требуется отработать:
Руководство расценивает сайт как важный бизнес-инструмент и поэтому считает, что
В требования заказчика к сайту ложатся такие пункты:
Мне кажется, что пожелания заказчика довольно уместны и не выглядят надуманно.
Windows Sharepoint Services 3.0 можно установить по инструкции README.docx, которая находится в приложенном архиве. После установки WSS нужно создать узел по умолчанию. Для этого нужно запустить Центр Администрирования Sharepoint (Sharepoint Administration Center) и выполнить два простых действия:
Так, теперь у вас есть сайт по умолчанию и выглядит он приблизительно вот так:
![Picture1 Picture1](https://habrastorage.org/r/w780q1/getpro/habr/post_images/889/23e/a88/88923ea88808289bac2037c62e8041f9.jpg)
Насоздавать необходимых типов, списков, завести группы пользователей, раздать соответствующие права на эти списки, и, наконец, создать рабочий процесс в Sharepoint Designer, который будет назначать задачи при появлении нового элемента в этом списке… все это сможет сделать и соображающий пользователь, прочитав документацию. На базовом уровне, конечно :) Но, кстати, для нашего сценария этого уровня вполне должно хватить.
Я демонстрирую эту часть за 30 минут в своем скринкасте об использовании Sharepoint для простого сайта приема заявок от населения с интеграцией с Office при минимальных финансовых затратах. Мой коллега Сергей Пиминов приблизительно за это же время автоматизирует процесс оформления командировок.
Я три основных мысли в виде скриншотов привожу.
Вот так вот, по умолчанию, выглядит форма заявки на сбыт рогов в FireFox:
![Picture2 Picture2](https://habrastorage.org/r/w780q1/getpro/habr/post_images/d33/6a5/2c2/d336a52c24e9fb434582138773682118.jpg)
Вот так строится рабочий процесс создания задачи при появлении новой заявки в Sharepoint Designer:
![Picture3_ Picture3_](https://habrastorage.org/r/w780q1/getpro/habr/post_images/6c2/00b/31e/6c200b31e69d6b0d394ba52314b09846.jpg)
Вот так выглядит созданная задача у сотрудника, при условии, что он привязал Outlook к Sharepoint сайту одним нажатием мышки:
![Picture4 Picture4](https://habrastorage.org/r/w780q1/getpro/habr/post_images/fc5/cca/6c7/fc5cca6c727db2f77ff7351e23d88d9c.jpg)
Все довольно просто.
Собственно, в этом плане у платформы SharePoint все, действительно, очень хорошо – недавно проводили конкурс на лучший интранет портал и из десяти победителей пятеро использовали Sharepoint – каждый второй успешный интранет проект реализован на Sharepoint. На эту тему в обзоре даже есть специальная глава. Поэтому на этом останавливаться детально не будем.
После того как мы создали и настроили наше приложение на сайте с аутентификацией пользователей по умолчанию, т.е. с использованием Windows Authentication, нам нужно это веб-приложение опубликовать в Интернет и включить для этой зоны аутентификацию пользователей через веб-формы. И если внутренние пользователи хранятся в Active Directory, то внешних пользователей мы, скорее всего, захотим хранить в другом месте.
![Picture3 Picture3](https://habrastorage.org/r/w780q1/getpro/habr/post_images/58c/b50/cf0/58cb50cf0e64bfa521597810b4acb05c.jpg)
Вообще говоря, у нас есть подробное описание и скачиваемый пакет, которые позволят реализовать этот сценарий и это, конечно же, рекомендованный и максимально защищенный путь. Но в моих презентациях на 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 Picture5](https://habrastorage.org/r/w780q1/getpro/habr/post_images/9d6/6a0/7eb/9d66a07ebf5a49f07cc22c78f6d2258a.jpg)
По сути дела, Sharepoint создает в IIS еще один веб-сайт с привязкой к hostheader “rogaikopyta.ru”, который будет так же обрабатываться движком Sharepoint. А Sharepoint уже понимает, что это будет существующий узел rogaikopyta, только для него теперь можно указать другую модель аутентификации:
![Picture6 Picture6](https://habrastorage.org/r/w780q1/getpro/habr/post_images/330/6fe/18a/3306fe18a45aea8a496cf4e20d3d44b1.jpg)
Теперь у нас есть 2 веб-сайта (интранет и интернет) и соответственно 2 web.config, в которые и надо добавить секции сформированные раннее. Эти файлы живут в каталогах C:\inetpub\wwwroot\wss\VirtualDirectories\[ID вебсайта]. Теперь оба наших сайта знают про пользователей, которые будут храниться не в Active Directory, а в SQL таблице. Но то, что они про них знают, еще недостаточно, чтобы этих пользователей пустили на сайт – нужно еще рассказать Sharepoint какие будут права у этих групп и пользователей. Кстати, мы добавили FBA (Forms Based Authentication) провайдеры в нашу интранет зону, как раз, для того, чтобы с нашим Windows account и админскими правами зайти на внутренний сайт и раздать права на сайт пользователям из Интернет зоны, про которых этот сайт теперь тоже знает (хотя он этих пользователей, скорее всего, не увидит в дальнейшем).
![Picture7 Picture7](https://habrastorage.org/r/w780q1/getpro/habr/post_images/7b6/34a/a1d/7b634aa1deaf7952805bff6614a8ede3.jpg)
Ну а вот теперь, мы можем совершенно спокойно зайти на сайт из того же FireFox (только с целью продемонстрировать работающие менюшки в Sharepoint :) ), использую учетную запись из FBA.
![Picture8 Picture8](https://habrastorage.org/r/w780q1/getpro/habr/post_images/14f/c97/291/14fc97291dde538dd5bad31bb97b7b60.jpg)
Я совершенно уверен, что даже такой упрощенный вариант аутентификации пользователей в смешанных зонах будет безопаснее большинства веб-сайтов, в которых этот механизм разрабатывался веб-студиями самостоятельно. А сейчас, как известно, киберпреступность цветет полным цветом.
Как я уже говорил в самом начале, за рубежом веб-сайтов на платформе 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 Picture9](https://habrastorage.org/r/w780q1/getpro/habr/post_images/969/445/dec/969445dec9a795f5c738a1b649d15eff.jpg)
Теперь сверившись с документацией (кстати, уже на русском языке) по каждому placeholder можно нарисовать свой дизайн. Чтобы не рисовать рога и копыта самому, я попросил автора сайта Start In Garage прислать мне свой вариант masterpage и он мне любезно его предоставил.
Если вы замените содержимое masterpage на текст из файла startingarage.txt, с помощью того же Sharepoint Designer, скопируете в корень сайта 2 файла — sig_core.css и web.sitemap, а также скопируете все картинки в каталог images на сайте, то получите вот такой внешний вид сайта:
![Picture10 Picture10](https://habrastorage.org/r/w780q1/getpro/habr/post_images/839/844/f6c/839844f6ca312f85cc369d99afa6a03e.jpg)
Ну в общем, становится очевидно, что верстальщик по макету дизайнера может дальше доводить этот masterpage до неузнаваемого вида, например, вот такого – Motobloggers.
А если пойти еще дальше, то можно сделать на SharePoint вот такой вот сайт или такой :)
![Picture14 Picture14](https://habrastorage.org/r/w780q1/getpro/habr/post_images/9ee/d15/61a/9eed1561a682a6c78d9519154d32c651.jpg)
И, действительно, сделать это вполне можно, т.к. Silverlight контрол можно легко научить брать информацию из веб-сервисов, которые доступны для данных в Sharepoint без дополнительных усилий со стороны разработчика. Как ребята из EPAM это делают для своего проекта интерактивного управления знаниями внутри компании рассказывается в этом подробнейшем докладе, сделанном не на PowerPoint, а на Silverlight. Там же вы найдете коды приложения. Обязательно посмотрите – очень интересно :)
То, что наше решение изначально обладает набором веб-сервисов для изменения содержимого и настроек сайта, и мы можем как угодно интегрировать наш сайт с другими системами – само собой разумеющийся факт. Вот подробная документация на русском.
Меня восхищает другое… На 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 Picture11](https://habrastorage.org/r/w780q1/getpro/habr/post_images/f42/c7e/b1d/f42c7eb1dc2a0d7b9aa282072bdad2f7.jpg)
и мы получаем вот такой вот сайт, где можно вести IT проекты, отрабатывать запросы пользователей, контролировать работоспособность отдела с помощью настраиваемых индикаторов и т.д.
![Picture12 Picture12](https://habrastorage.org/r/w780q1/getpro/habr/post_images/30a/aae/855/30aaae855f34329ba02b677a99d8fc91.jpg)
![Picture13 Picture13](https://habrastorage.org/r/w780q1/getpro/habr/post_images/bd3/0df/080/bd30df080a8dceca4294ce0ade70d986.jpg)
В семействе 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 Picture15](https://habrastorage.org/r/w780q1/getpro/habr/post_images/356/00d/f9a/35600df9a6f30c4d90f8280fe06fb179.jpg)
В конце концов, если у вас есть идея создания собственного продукта или коммерческого сервиса и вы видите уместным использование платформы Sharepoint – просто прочитайте описание программы BizSpark в моем блоге и пришлите мне запрос – sergey.polyakov@microsoft.com — я предоставлю весь необходимый софт для коммерческого использования, включая мощный MOSS for Internet на 3 года за 100 долларов.
В заключение, помимо того, что мое решение полностью соответствует требованиям заказчика, хочу добавить краткие результаты с точки зрения директоров в компании.
Исполнительный директор:
Финансовый директор:
IT директор:
![horns-and-hooves horns-and-hooves](https://habrastorage.org/getpro/habr/post_images/1bb/941/227/1bb941227521473f2fb2361b0d1aae19.gif)
Есть вопросы и комментарии по теме? Пишите.
Давайте разберем довольно типовой сценарий и вы скажете — стоит ли использовать Sharepoint для веб, а если не стоит, то прошу прокомментировать — почему? Здесь еще дело в том, что в рамках семинаров TechDays я выступаю с демонстрацией создания такого сценария и вы можете скачать и презентацию и пошаговую инструкцию как ее сделать – можете попробовать и вы на своем компьютере. По этой причине, мне тем более интересны комментарии и отзывы.
Ситуация
Есть небольшая компания, пусть будет “Рога и копыта”, которой нужно сделать сайт для работы с поставщиками и партнерами.
![short-horns-and-hooves short-horns-and-hooves](https://habrastorage.org/getpro/habr/post_images/9c6/bb2/cba/9c6bb2cba1078e2365db7e6f3f21049e.gif)
Сценарий, который требуется отработать:
- поставщики размещают в форме на сайте предложения о продаже рогов
- продавцы-партнеры размещают в другой форме заявки на готовую продукцию для своих магазинов
- сотрудники компании “Рога и копыта” отрабатывают заявки, взаимодействуют с производственным отделом
- руководители отделов получают отчеты о процессе, контролируют ключевые показатели (кол-во заявок в день, процент принятых и прочее)
Руководство расценивает сайт как важный бизнес-инструмент и поэтому считает, что
- с ним должны уметь работать практически все сотрудники,
- сайт должен в перспективе интегрироваться с другими системами,
- это должно быть поддерживаемое решение с понятными перспективами развития
В требования заказчика к сайту ложатся такие пункты:
- ПО бесплатное либо очень недорогое (допустим в пределах 1000 долларов)
- Разработка по времени минимальная (пусть будет 1 неделя на первоначальную версию)
- Наличие документированного API для последующего развития системы (обязательно)
- Возможность использование собственного дизайна для сайта (обязательно)
- Возможность аутентификации, как внешних пользователей, так и сотрудников компании (обязательно)
- Поддержка браузеров для партнеров и поставщиков — IE, FireFox, Safari, Opera (очень желательно)
- Наличие специалистов на местном рынке (очень желательно)
- Простой интерфейс для пользователей и возможность интеграции с Office 2007 (очень желательно)
Мне кажется, что пожелания заказчика довольно уместны и не выглядят надуманно.
Решение
Установка Windows Sharepoint Services
Windows Sharepoint Services 3.0 можно установить по инструкции README.docx, которая находится в приложенном архиве. После установки WSS нужно создать узел по умолчанию. Для этого нужно запустить Центр Администрирования Sharepoint (Sharepoint Administration Center) и выполнить два простых действия:
- Создать веб-приложение (Центр администрирования > Управление приложениями > Создание или расширение веб-приложения > Создание веб-приложения). В качестве учетной записи, из под которой будет работать ваше веб-приложение, укажите какой-нибудь служебный login из домена или учетную запись с локальной машины.
- Создать коллекцию узлов для этого приложения с шаблоном по умолчанию (Центр администрирования > Управление приложениями > Создание семейства веб-узлов)
Так, теперь у вас есть сайт по умолчанию и выглядит он приблизительно вот так:
![Picture1 Picture1](https://habrastorage.org/getpro/habr/post_images/889/23e/a88/88923ea88808289bac2037c62e8041f9.jpg)
Настройка приложения для обработки заявок
Насоздавать необходимых типов, списков, завести группы пользователей, раздать соответствующие права на эти списки, и, наконец, создать рабочий процесс в Sharepoint Designer, который будет назначать задачи при появлении нового элемента в этом списке… все это сможет сделать и соображающий пользователь, прочитав документацию. На базовом уровне, конечно :) Но, кстати, для нашего сценария этого уровня вполне должно хватить.
Я демонстрирую эту часть за 30 минут в своем скринкасте об использовании Sharepoint для простого сайта приема заявок от населения с интеграцией с Office при минимальных финансовых затратах. Мой коллега Сергей Пиминов приблизительно за это же время автоматизирует процесс оформления командировок.
Я три основных мысли в виде скриншотов привожу.
Вот так вот, по умолчанию, выглядит форма заявки на сбыт рогов в FireFox:
![Picture2 Picture2](https://habrastorage.org/getpro/habr/post_images/d33/6a5/2c2/d336a52c24e9fb434582138773682118.jpg)
Вот так строится рабочий процесс создания задачи при появлении новой заявки в Sharepoint Designer:
![Picture3_ Picture3_](https://habrastorage.org/getpro/habr/post_images/6c2/00b/31e/6c200b31e69d6b0d394ba52314b09846.jpg)
Вот так выглядит созданная задача у сотрудника, при условии, что он привязал Outlook к Sharepoint сайту одним нажатием мышки:
![Picture4 Picture4](https://habrastorage.org/getpro/habr/post_images/fc5/cca/6c7/fc5cca6c727db2f77ff7351e23d88d9c.jpg)
Все довольно просто.
Собственно, в этом плане у платформы SharePoint все, действительно, очень хорошо – недавно проводили конкурс на лучший интранет портал и из десяти победителей пятеро использовали Sharepoint – каждый второй успешный интранет проект реализован на Sharepoint. На эту тему в обзоре даже есть специальная глава. Поэтому на этом останавливаться детально не будем.
Аутентификация пользователей и безопасность
После того как мы создали и настроили наше приложение на сайте с аутентификацией пользователей по умолчанию, т.е. с использованием Windows Authentication, нам нужно это веб-приложение опубликовать в Интернет и включить для этой зоны аутентификацию пользователей через веб-формы. И если внутренние пользователи хранятся в Active Directory, то внешних пользователей мы, скорее всего, захотим хранить в другом месте.
![Picture3 Picture3](https://habrastorage.org/getpro/habr/post_images/58c/b50/cf0/58cb50cf0e64bfa521597810b4acb05c.jpg)
Вообще говоря, у нас есть подробное описание и скачиваемый пакет, которые позволят реализовать этот сценарий и это, конечно же, рекомендованный и максимально защищенный путь. Но в моих презентациях на 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 Picture5](https://habrastorage.org/getpro/habr/post_images/9d6/6a0/7eb/9d66a07ebf5a49f07cc22c78f6d2258a.jpg)
По сути дела, Sharepoint создает в IIS еще один веб-сайт с привязкой к hostheader “rogaikopyta.ru”, который будет так же обрабатываться движком Sharepoint. А Sharepoint уже понимает, что это будет существующий узел rogaikopyta, только для него теперь можно указать другую модель аутентификации:
![Picture6 Picture6](https://habrastorage.org/getpro/habr/post_images/330/6fe/18a/3306fe18a45aea8a496cf4e20d3d44b1.jpg)
Теперь у нас есть 2 веб-сайта (интранет и интернет) и соответственно 2 web.config, в которые и надо добавить секции сформированные раннее. Эти файлы живут в каталогах C:\inetpub\wwwroot\wss\VirtualDirectories\[ID вебсайта]. Теперь оба наших сайта знают про пользователей, которые будут храниться не в Active Directory, а в SQL таблице. Но то, что они про них знают, еще недостаточно, чтобы этих пользователей пустили на сайт – нужно еще рассказать Sharepoint какие будут права у этих групп и пользователей. Кстати, мы добавили FBA (Forms Based Authentication) провайдеры в нашу интранет зону, как раз, для того, чтобы с нашим Windows account и админскими правами зайти на внутренний сайт и раздать права на сайт пользователям из Интернет зоны, про которых этот сайт теперь тоже знает (хотя он этих пользователей, скорее всего, не увидит в дальнейшем).
![Picture7 Picture7](https://habrastorage.org/getpro/habr/post_images/7b6/34a/a1d/7b634aa1deaf7952805bff6614a8ede3.jpg)
Ну а вот теперь, мы можем совершенно спокойно зайти на сайт из того же FireFox (только с целью продемонстрировать работающие менюшки в Sharepoint :) ), использую учетную запись из FBA.
![Picture8 Picture8](https://habrastorage.org/getpro/habr/post_images/14f/c97/291/14fc97291dde538dd5bad31bb97b7b60.jpg)
Я совершенно уверен, что даже такой упрощенный вариант аутентификации пользователей в смешанных зонах будет безопаснее большинства веб-сайтов, в которых этот механизм разрабатывался веб-студиями самостоятельно. А сейчас, как известно, киберпреступность цветет полным цветом.
Внешний вид сайта
Как я уже говорил в самом начале, за рубежом веб-сайтов на платформе 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 Picture9](https://habrastorage.org/getpro/habr/post_images/969/445/dec/969445dec9a795f5c738a1b649d15eff.jpg)
Теперь сверившись с документацией (кстати, уже на русском языке) по каждому placeholder можно нарисовать свой дизайн. Чтобы не рисовать рога и копыта самому, я попросил автора сайта Start In Garage прислать мне свой вариант masterpage и он мне любезно его предоставил.
Если вы замените содержимое masterpage на текст из файла startingarage.txt, с помощью того же Sharepoint Designer, скопируете в корень сайта 2 файла — sig_core.css и web.sitemap, а также скопируете все картинки в каталог images на сайте, то получите вот такой внешний вид сайта:
![Picture10 Picture10](https://habrastorage.org/getpro/habr/post_images/839/844/f6c/839844f6ca312f85cc369d99afa6a03e.jpg)
Ну в общем, становится очевидно, что верстальщик по макету дизайнера может дальше доводить этот masterpage до неузнаваемого вида, например, вот такого – Motobloggers.
А если пойти еще дальше, то можно сделать на SharePoint вот такой вот сайт или такой :)
![Picture14 Picture14](https://habrastorage.org/getpro/habr/post_images/9ee/d15/61a/9eed1561a682a6c78d9519154d32c651.jpg)
И, действительно, сделать это вполне можно, т.к. 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 Picture11](https://habrastorage.org/getpro/habr/post_images/f42/c7e/b1d/f42c7eb1dc2a0d7b9aa282072bdad2f7.jpg)
и мы получаем вот такой вот сайт, где можно вести IT проекты, отрабатывать запросы пользователей, контролировать работоспособность отдела с помощью настраиваемых индикаторов и т.д.
![Picture12 Picture12](https://habrastorage.org/getpro/habr/post_images/30a/aae/855/30aaae855f34329ba02b677a99d8fc91.jpg)
![Picture13 Picture13](https://habrastorage.org/getpro/habr/post_images/bd3/0df/080/bd30df080a8dceca4294ce0ade70d986.jpg)
Сколько денег это стоит и что выбрать заказчику?
В семействе 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 Picture15](https://habrastorage.org/getpro/habr/post_images/356/00d/f9a/35600df9a6f30c4d90f8280fe06fb179.jpg)
В конце концов, если у вас есть идея создания собственного продукта или коммерческого сервиса и вы видите уместным использование платформы Sharepoint – просто прочитайте описание программы BizSpark в моем блоге и пришлите мне запрос – sergey.polyakov@microsoft.com — я предоставлю весь необходимый софт для коммерческого использования, включая мощный MOSS for Internet на 3 года за 100 долларов.
Резюме
В заключение, помимо того, что мое решение полностью соответствует требованиям заказчика, хочу добавить краткие результаты с точки зрения директоров в компании.
Исполнительный директор:
- Веб-сайт является интегрированным с другими системами бизнес инструментом
- Нет проблем с обучением пользователей + функционал сайта доступен через Office 2007
- Получен готовый функционал для контроля и отчетности бизнес-процессов
Финансовый директор:
- Разработка и сроки минимальные
- Стоимость ПО варьируется
- Сделанные инвестиции защищены лидирующим положением продукта на рынке и долгосрочными планами развития платформы
- В регионе найдутся специалисты со знанием .NET, которые смогут дальше развивать решение
IT директор:
- Используется существующая IT инфраструктура и не нужно обучать системных администраторов
- Приложение легко масштабируется за счет особенностей платформы
- Интеграция и поддержка решения с другими системами осуществляется с помощью документированного API и PowerShell
![horns-and-hooves horns-and-hooves](https://habrastorage.org/getpro/habr/post_images/1bb/941/227/1bb941227521473f2fb2361b0d1aae19.gif)
Ссылки в догонку
- Введение в разработку на платформе Sharepoint
- Российское сообщество разрабочиков на Sharepoint
- Проекты сообщества с открытым кодом для Sharepoint
- Бесплатные курсы по Sharepoint для разработчиков
- Хотите “пощупать” Sharepoint или арендовать – посмотрите на демопортал и предложения от Infobox и Parking.
Есть вопросы и комментарии по теме? Пишите.