Некоторое время назад встала задача экспортировать дни рождения сотрудников из внешней базы в SharePoint. есть некоторые нюансы, связать между собой базу и пользователя можно только по E-mail.
Решил попробовать стандартным способом через ЦА, но ничего не вышло.
Тогда я решил менять настройки с помощью miisclient.exe, но результата не дало. Ошибок как таковых не возникало, но и данные не затягивались.
мне надоело плясать с бубном и я решил прибегнуть к знакомому PowerShell
первым делом подключаемся службе User Profile
далее подключаемся к внешнему списку и получаем оттуда данные.
и вот тут начинается самое интересное.
как выяснилось, получить данные пользователя по E-mail и сразу внести дату рождения не получится. Так что вначале нам нужно найти профиль по e-mail с помощью .Search(). действие аналогично кнопке
далее можно взять свойство RecordId и уже по нему получить данные с помощью функции GetProfile(RecordId).
Как работает скрипт, циклом пробегает по всему внешнему списку, берет данные из поля e-mail, и по e-mail ищет пользователя, если пользователь есть, то обновляем его день рождения.
первым делом подключаемся службе User Profile
далее подключаемся к внешнему списку и получаем оттуда данные.
и вот тут начинается самое интересное.
как выяснилось, получить данные пользователя по E-mail и сразу внести дату рождения не получится. Так что вначале нам нужно найти профиль по e-mail с помощью .Search(). действие аналогично кнопке
далее можно взять свойство RecordId и уже по нему получить данные с помощью функции GetProfile(RecordId).
Как работает скрипт, циклом пробегает по всему внешнему списку, берет данные из поля e-mail, и по e-mail ищет пользователя, если пользователь есть, то обновляем его день рождения.
$mySiteUrl = "http://my.site" #адрес веб приложения на котором находятся личные сайты #Connect to User Profile Manager service $site = Get-SPSite $mySiteUrl $context = Get-SPServiceContext $site $profileManager = New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager($context) #Connect to External Content Type $ctx = Get-SPServiceContext http://site $scope = new-object Microsoft.SharePoint.SPServiceContextScope $ctx $web = Get-SPWeb http://site #сайт в котором находится внешний список $list = $web.Lists['Employees'] # внешний список $items = $list.GetItems() foreach ($item in $items) #пробегаем по всем элементам внешнего списка { write-host $item['FullName'] / $item['BirthDate'] / $item['Email'] # здесь я вывожу поля которые есть у меня во внешнем списке, у Вас могут быть другие. $user = $profileManager.Search($item['Email']) $userId = $user.RecordId if ($userId -ne $null) # проверяем что есть нашелся пользователь с таким e-mail { $up = $profileManager.GetProfile($userId) $up['SPS-Birthday'].Value = $item['BirthDate'] $up.Commit() } } $web.Dispose()
Комментариев нет:
Отправить комментарий