понедельник, 23 июля 2012 г.

Дни рождения сотрудников в календаре Sharepoint

Дни рождения сотрудников, наверное одна из самых популярных страниц на моем портале. Для наполнения ее данными я использую связку  БД сотрудников организации + ActiveDirectory + Sharepoint. При приеме нового сотрудника на работу в учетной записи пользователя заполняются дополнительные атрибуты: табельный номер и дата рождения. Раз в месяц, на сервере sharepoint отрабатывает скрипт подтягивающий новые данные в общий календарь, и удаляющий сотрудников, которые уже уволены.

Для реализации автоматического занесения ДР  на портал необходимо: модифицировать схему в AD;  добавить атрибут в профиль пользователя на sharepoint (чтобы данные отображались не только в календаре но и в профиле пользователя); выполнить скрипт.


1. Как модифицировать схему ActiveDirectory

2. Добавление атрибута, для синхронизации данных в профиле пользователя sharepoint с ActiveDirectory. Надо выполнить следующие действия если вы не увидели свой атрибут в доступных для сопостовления:

    -  запустить приложение  \Program Files\Microsoft Office Servers\14.0\Synchronization Service\UIShell\miisclient.exe (FIM client);
    - перейти на вкладку Managment Agents и выбрать ADDS  -> Properties -> Selected Attributes - Show all;
    - выбрать наш атрибут и закрыть окно;

    - нажать Refresh Shema;
   
3. Создание календаря.
Здесь все обычно. Создаем новый календарь, выводим его на ту страницу которая нам удобна.

4. Заполнение списка скриптом.
На сервере sharepoint запускаем скрипт.Скрипт очищает список и заполняет его новыми событиями.

$SpList - URL нашего календаря
$SpSite - Сайт на котором расположен календарь




cls


Add-PsSnapin Microsoft.SharePoint.PowerShell
Add-PSSnapin Quest.ActiveRoles.ADManagement

Start-SPAssignment -Global
$nl = [System.Environment]::NewLine


$spsite = New-Object Microsoft.SharePoint.SPSite("http://sharepoint")
$spweb = $spsite.OpenWeb()
$spList = $spWeb.GetList("/Lists/List6")



Select-Object -Property title,UniqueId


$spItems=$spList.Items


function clearevent ([string]$text)
{
   $spItems=$spList.Items
   forEach($sobitie in $spItems)
  {
    $value = $sobitie['Название']
    if ($value.Contains($text)){
        $id=$sobitie.get_ID()
        $spItems.DeleteItemById($id)
        $spItems.Update()
  }
 }
}


Function modifydate ([string]$d)
{
  $mounth = @  {'Январь'='01';'Февраль'='02';'Март'='03';'Апрель'='04';'Май'='05';'Июнь'='06';'Июль'='07';'Август'='08';'Сентябрь'='09';'Октябрь'='10';'Ноябрь'='11';'Декабрь'='12'}
 $wrightdate = $d.remove($d.indexof(' '))
 $wrightdate = $mounth[$wrightdate]+'/'+$d.remove(0,$d.indexof(' ')+1)+'/2012'
 return $wrightdate
}


$users = Get-QADUser -IncludeAllProperties


foreach ($user in $Users) {
$displayname = $user.DisplayName
$birsday = $user.UserEmpBirsday
$SameAccountName = $user.SamAccountName


clearevent $displayname
$date = modifydate $birsday
$spitems = $spList.AddItem()
$spItems["Название"]= $displayname
$spItems["Категория"]='День рождения'
$spItems["Целый день"]='True'
$spItems["Время начала"] = $date
$spItems["Время окончания"] = $date
$spItems["Описание"]=' Подробнее '


$spItems.Update()
}


$SPWeb.Dispose()
$spsite.Dispose()
STOP-SPAssignment -Global

Комментариев нет: