Задачи для проверки навыков разработки SharePoint

Когда я читаю курс 10175, то из положенных 5 дней лекции удается уложить в 4, а в последний день обучающиеся выполняют лабораторную работу, чтобы проверить полученные знания и навыки разработки приложений.

Ниже приведены 4 задачи, из  которых обучающиеся в парах выполняют одну. Звездочками отмечены задачи, которые не рассматриваются в курсе и требуют самостоятельного изучения.

  1. Создать систему резервирования ресурсов
    • Создать список ресурсов
    • Создать список (стандартный шаблон списка “Календарь”) со ссылкой на список ресурсов
    • Создать обработчик события добавления и изменения, который проверяет непересекаемость интервалов резервирования для ресурса и отменяет действие в случае пересечения
    • * Создать веб-часть, отображающую свободные  ресурсы в заданном интервале времени
    • Код должен работать в sandbox
  2. Создать соединенные веб-части
    • Создать веб-часть отображающую дерево организаций (подразделений)
    • Сделать её провайдером IWebPartTable
      • При выборе узла дерева веб-часть должна отправлять   профили пользователей в организации
    • Создать веб-часть потребитель IWebPartTable с помощью SPGridView
    • * Реализовать поддержку фильтрации и сортировки в SPGridView как в представлениях SharePoint
  3. Создать рабочий процесс обработки инцидентов
    • Создать список инцидентов (стандартный шаблон списка "”Списко Инцидентов”)
    • Создать State Machine Worflow с 3 состояниями: Открыт, Закрыт, Проверен
    • В каждом состоянии необходимо назначать пользователю (для простоты администратору) задачу, после выполнения задачи удалять её.
    • После после исполнения задачи процесс должен изменять состояние инцидента
    • * Сделать график времени закрытия инцидентов по типам с помощью Performace Point Services
  4. Создать задачу таймера очистки библиотек документов
    • Задача должна находить и удалять пустые папки в библиотеках документов   
    • * Доработать задачу таймера чтобы она работала только на заданных узлах (SPWeb)
    • * Создать Custom Action в Ribbon и SiteMenu для того чтобы вызвать задачу таймера.

ИМХО хороший программист SharePoint должен уметь выполнить любую задачу в течение дня.

Ваши комментарии?



SharePoint Administrator Roadmap

Снова по просьбам читателей

  1. Для изучения администрирования SharePoint понадобятся базовые знания об администрировании следующих компонент и приложений:
    1. Active Directory Domain Services
    2. SQL Server 2008
    3. IIS Weberver
  2. Для начала просмотреть видеокурс Getting Started for IT Pros.
  3. Затем курс Advanced IT Professional Training. Обязательно выполните лабораторки в этом курсе.
  4. Далее прочитайте цикл статей про развертывание SharePoint в организации.
  5. Администраторы обычно выполняют  функции Power Users, занимаются небольшими кастомизациями и обучением пользователей. Поэтому крайне необходимо изучать все материалы на сайте http://office.microsoft.com/ru-ru/training/.
  6. Если вы хотите качественно настроить поиск SharePoint, то вам может пригодиться видеокурс Enterprise Search IT professional training. Обязательно выполняйте лабораторки.
  7. Справку и различные гайды по интересующим вас аспектами SharePoint вы сможете найти в Resource Centers.
  8. Для повышения квалификации выполняйте лабораторные работы. Они отнимают немного времени и позволяют изучить различные аспекты с которыми вы (пока) не столкнулись в работе.
  9. SharePoint активно использует PowerShell для администрирования. Изучайте PowerShell, это поможет вам решать задачи, которые требуют программирования.
  10. Ответы почти на все вопросы можно найти на TechNet. Зачастую достаточно пошагово выполнить руководство чтобы все заработало как надо.


Развертывание решений SharePoint с помощью PowerShell

После прочтения кучи книг, статей и просмотра видео, обойдя все подводные камни, и сделав наконец свое решение на SharePoint у вас появляется вопрос: “а как его запустить у заказчика?” Visual Studio предательски сама активирует фичи решения по F5 и деактивирует при завершении отладки. А как тоже сделать у заказчика? А если у вас доступа на машину заказчика нет?

Для начала стоит подробнее рассмотреть что же требуется для развертывания вашего решения. Обычно развертывание состоит из нескольких шагов:

  1. Добавление WSP-решений уровня фермы
  2. Добавление sandboxed решений
  3. Активация фич
  4. Выполнение дополнительных действий

В идеале дополнительные действия должны совершаться при активации фич, поэтому вычеркнем их из данного сценария.

Вроде все просто. Вооружившись справочником по командам PowerShell  для SharePoint попробуем написать скрипт

Add-SPSolution -LiteralPath "SomePath\MySolution.wsp"
Install-SPSolution -Identity "mysolution.wsp" -GACDeployment
Enable-SPFeature MyFeature -Url http://localhost/

Сразу куча проблем:

  1. Работает только из SharePoint Management Shell
  2. Add-SPSolution  не понимает относительных путей
  3. На localhost не будет нужного сайта или надо будет разворачивать в другое место
  4. Sandboxed решения так добавить не получится

Чтобы не заставлять пользователя запускать Management Shell можно написать в начале

Add-PSSnapin Microsoft.SharePoint.Powershell

Но после этого появляется ошибка при запуске из Management shell…

Чтобы обойти проблему нужно проверять загружено ли расширение

if(!(Get-PSSnapin Microsoft.SharePoint.Powershell -ErrorAction:SilentlyContinue))
{
    Add-PSSnapin Microsoft.SharePoint.Powershell
}

Вместо hardcoded параметра сайта можно запрашивать параметр в скрипте с помощью оператора param.  А вот чтобы получить текущий путь скрипта надо использовать хак.

Второй вариант скрипта:

param($siteUrl= $(Read-Host "siteUrl"))

$dir = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
$name = "mysolution.wsp"
$path = "$dir\$name"

if(!(Get-PSSnapin Microsoft.SharePoint.Powershell -ErrorAction:SilentlyContinue))
{
    Add-PSSnapin Microsoft.SharePoint.Powershell
}

Add-SPSolution -LiteralPath $path
Install-SPSolution $name -GACDeployment
Enable-SPFeature MyFeature -Url $siteUrl

Так уже лучше, но тут есть подводный камень. Install-SPSolution в многосерверной конфигурации не сразу развертывает решение, фичи становится доступны когда развертывание завершится на всех серверах. Поэтому надо писать так:

$solution = Install-SPSolution $name -GACDeployment
while($solution.Deployed –eq $false)
{
    sleep -s 1
}

Кроме того очень важно делать установочные (и удаляющие) скрипты идемпотентными, чтобы запуск скрипта много раз давал такой же эффект как запуск скрипта один раз. Для этого можно применить тот же подход, что и при загрузке командлетов SharePoint.

param($siteUrl= $(Read-Host "siteUrl"))

$dir = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
$name = "MySolution.wsp"
$path = "$dir\$name"
$featureId = "6F9619FF-8B86-D011-B42D-00CF4FC964FF" #GUID from Wikipedia

if(!(Get-PSSnapin Microsoft.SharePoint.Powershell -ErrorAction:SilentlyContinue))
{
    Add-PSSnapin Microsoft.SharePoint.Powershell
}

$solution = Get-SPSolution $name -ErrorAction:SilentlyContinue

if(!$solution)
{    
    $solution = Add-SPSolution -LiteralPath $path
}

if($solution.Deployed –eq $false)
{
    Install-SPSolution $solution -GACDeployment
    while($solution.Deployed –eq $false)
    {
        sleep -s 1
    }
}

if(!(Get-SPFeature $featureId -Web $siteUrl -ErrorAction:SilentlyContinue)) #or -Site, -WebApplication, -Farm
{
    Enable-SPFeature $featureId -Url $siteUrl
}

И подобный код повторить для каждого решения и фичи.

Для sandboxed решений будут использоваться другие командлеты Add-SPUserSolution, Install-SPUserSolution и Get-SPUserSolution. Им необходимо дополнительным параметром передать url коллекции сайтов.

Полученный таким образом скрипт можно запускать как из SharePoint Management Shell, так и из explorer. Главное чтобы необходимые wsp файлы лежали рядом с самим скриптом.

UPD. На dev wiki появилась статья на эту тему



SharePoint 2010 и OData

Наверное все знают что SharePoint 2010 имеет OData-сервис, к которому можно обратиться по адресу http://{siteUrl}/_vti_bin/listdata.svc. Также SharePoint имеет очень мощную службу бизнес-данных (Business Connectivity Services), с помощью которой можно обращаться к различным источникам данных. К сожалению OData-сервисы не входят в число этих источников.

Чтобы исправить это досадное упущение, был создан Custom Connector для BCS, который умеет работать с OData-сервисами. А также был создан генератор модели подключения к внешним данными, чтобы упростить подключение OData источников к BCS.

Найти все это можно по адресу http://vega-soft.com/spodata/.

Фичи, реализованные на данный момент:

  1. Генератор модели
  2. CRUD-операции с данными
  3. BCS фильтры: Limit, Paging, Comparison, LastId

Фичи, планирующиеся в ближайшее время:

  1. Ассоциации (связи между сущностями)
  2. Поддержка ad-hoc запросов
  3. Аутентификация
  4. Улучшенный генератор модели

PS. Для тех кто не в курсе что такое OData – рекомендую детально изучить сайт http://www.odata.org/.



SharePoint Developer Roadmap

По просьбам читателей

  1. SharePoint это в первую очередь ASP.NET приложение, если не владеете им, то начать можно отсюда: http://www.asp.net/web-forms.
  2. Далее Get Started: http://msdn.microsoft.com/en-US/sharepoint/ee513147.aspx, обязательно выполните лабораторные работы.
  3. Затем сразу Advanced training: http://msdn.microsoft.com/en-US/sharepoint/ff420377.aspx, обязательно выполните лабораторные работы.
  4. В дальнейшем ответы на вопросы по использованию отдельных модулей шарика можно найти в Resource Centers: http://msdn.microsoft.com/en-US/sharepoint/bb964529.aspx.
  5. Далее обязательно прочитать книгу Real World SharePoint 2010: Indispensable Experiences from 22 MVPs, узнаете много нового
  6. Если будете заниматься брендингом (созданием уникального внешнего вида) SharePoint, то вам также понадобится книга Professional SharePoint 2010 Branding and User Interface Design.
  7. Далее обязательно изучите SharePoint Guidance 2010, причем как примеры кода (он там, чуть более чем образцовый), так и подходы к разработке. Кстати там тоже есть лабораторные работы, которые также надо выполнить.
  8. SharePoint это не только ценный мех серверная платформа, но и мощная клиентская часть в виде Office 2010. Для изучения Office и его интеграции с SharePoint можно посмотреть онлайн курс: http://msdn.microsoft.com/en-us/gg605831, и снова обязательно выполнить все лабораторки.
  9. Из того же комплекта обучающих курсов стоит пройти курсы по Office365, SharePoint and Silverlight.
  10. Со временем вы поймете что 90% задач в SharePoint\Office можно решить с помощью существующих средств. Чтобы в совершенстве овладеть всеми этими средствами надо внимательно изучить контент на сайте http://office.microsoft.com/ru-ru/training/

Чтобы ускорить процесс можете прослушать курсы, которые я читаю.