Некоторое время назад встала задача экспортировать дни рождения сотрудников из внешней базы в 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 ищет пользователя, если пользователь есть, то обновляем его день рождения.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #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() |
Комментариев нет:
Отправить комментарий