Створюємо портал в sharepoint
Якщо ви працюєте з Sharepoint то швидше за все ця тема вам добре знайома. Будь-який бізнес має специфічні правила і процедури, що не покриваються стандартним можливостями Sharepoint-а. В цьому випадку ми розробляємо нове рішення або кастомізіруем існуючу функціональність для задоволення бізнесу потреб. З цим постом я почну серію статей де постараюся описати одну з важливих і затребуваних тем: створення спеціалізованих (custom) сайтів і порталів в Sharepoint. Відразу обмовлюся, що я розгляну процес створення сайтів в основному з точки зору розробників. Технічно це означає, що в статті буде розглянуто процес кастомізації з використанням визначень сайтів (site definitions) в Visual Studio, тобто робота з сайтами з використанням наприклад Sharepoint Designer поза скопа даної статті.
Коли компанія відкриває філію в новій країні нам необхідно мати швидкий і простий спосіб створення нового підсайту для цієї філії в порталі компанії. Також потрібно, щоб цей процес був гнучким і легко розширюваним для можливих майбутніх змін бізнес вимог.
Як я вже згадав на початку статті, є кілька способів кастомізації сайтів в Sharepoint. Для вирішення зазначеного завдання, ви наприклад можете створити сайт, використовуючи стандартне визначення сайту, додати в нього потрібну функціональність (веб парти, сторінки і т.п.), зберегти сайт як шаблон (файл .stp) і створити новий сайт, на основі цього шаблону. Також ви можете використовувати команди export і import утиліти stsadm для створення сайту і подальшою зміною його за допомогою Sharepoint Designer-а. Зазначені підходи не вимагають участі розробника і виконуються адміністратором. Ці рішення підходять для випадків, коли не так багато сайтів потрібно створювати за однаковими шаблонами, або коли кількість змін базового шаблону невелика. Але для великих компаній, що мають безліч філій, які потребують окремого сайт з унікальними настройками, що задаються при створенні, автоматизація даного процесу має критичне значення. У цьому випадку кращим, на мій погляд, засобом вирішення зазначеного завдання є одна з точок розширення (extensibility point) Sharepoint-а: спеціалізовані визначення сайтів. Якщо ви не знайомі з визначеннями сайтів, або вас бентежать терміни "визначення сайту" і "шаблон сайту", я рекомендую ознайомитись з наступною статтею в msdn: Working with Site Templates and Definitions. Для нас досить запам'ятати, що шаблон - це .stp файл створений на основі існуючого сайту (також термін шаблон буде використовуватися як елемент всередині xml-артефактів опису сайтів - про них мова піде нижче). Цей .stp файл, будучи створеним один раз, не модифікується (я не розглядаю випадки ручної розпакування, зміни, і зворотної упаковки зі зміною розширення з .stp на .cab - хоча іноді доводиться робити і таке інше. Однак, цей спосіб не є офіційним способом роботи з сайтам від MS 🙂). З іншого боку, визначення сайту - це повністю змінюване визначення можливостей сайту, яке зберігається в файлах onet.xml в підпапках 12 / Template / SiteTemplates (далі я розповім про це більш детально).
Ми підемо далі більшості прикладів на цю тему, і не будемо обмежуватися лише створенням свого власного визначення сайту. Ми реалізуємо спеціалізований процес створення сайтів. Маючи визначення сайту (кастомними або стандартне), єдине, що ми можемо - це використовувати стандартну сторінку створення сайтів (12 / Templates / Layouts / newsbweb.aspx) і вибрати потрібний шаблон в елементі управління template picker (або передати параметр командного рядка ID - в цьому випадку template picker буде містити лише одне значення, яке відповідає переданому ID). Але що є нам потрібно вказувати свої власні (специфічні для бізнесу) параметри при створенні нового сайту (крім стандартних заголовка, опису, мови, URL-а і т.п.)? Для цього нам буде потрібно реалізувати свою власну сторінку створення сайтів, взявши за основу стандартну newsbweb.aspx. Але про все по порядку.
Для створення порталу необхідно створити webtemp файл в папці 12 / Template // XML, де - це placeholder позначає підтримувану локаль. Тобто якщо нам потрібно мати можливість створювати портали філій англійською та шведською мовами, треба створити 2 webtemp файлу в наступних папках:
Ви можете прочитати більше про файли webtemp в наступній статті: Portal Site Template File. Давайте назвемо наш файл webtempContosoBranchSite.xml. У нашому випадку він буде мати наступне вміст:

Як показано в прикладі, ви можете виконувати свій код до (коли підсайти порталу ще не створені) і після провіженінг (коли вся структура готова). Але де і як визначається ця структура? Це робиться в спеціальному файлі - веб маніфесті порталу, який ми вказали в атрибуті ProvisionData в файлі webtempContosoBranchSite.xml:
У веб маніфесті ми визначили кореневої сайт (Home) і 3 підсайту (Sales, IT і HR). Атрибут Name буде використаний в якості URL-ів Підсайти (крім кореневого сайту порталу, для якого URL вказується на сторінці створення сайту), а атрибут displayName містить локалізовані заголовки сайтів (файл ресурсів ContosoBranch.resx повинен знаходиться в папці 12 / Resources також, як і його мовні версії, напр. ContosoBranch.en-us.resx. Також важливо розуміти, що заголовки сайтів - це так звані ресурси провіженінг. в MOSS-е вони "розкриваються" в реальні значення в момент провіженінг і в content базу даних записуються саме ці кінцеві значення. Тобто якщо ви по ом поміняєте значення ресурсної рядки в resx файлі - це буде мати дію тільки для нових сайтів, в той час як існуючі сайти ця зміна не торкнеться). Найбільш важливий атрибут - це siteDefinition. Він каже Sharepoint-у яке саме визначення сайту має використовуватися для кожного сайту порталу. Наприклад, для підсайту Sales MOSS буде використовувати визначення ContosoBranchSite # 1.
Але що значить цей запис і як створювати свої власні визначення сайтів - це я опишу в наступній частині. Також я опишу процес створення спеціалізованої сторінки створення сайтів і багато інших цікавих речей.