Все, что необходимо для управления пользователями в объектной модели SharePoint содержится в пространстве имен Microsoft.Office.Server.UserProfiles самый интересный для нас класс которого - UserProfileManager. Все, что нужно для его инициализации это передать в конструктор текущий контекст:
UserProfileManager userPM = new UserProfileManager(SPServiceContext.Current);
Все готово к работе. Теперь, например, можно создать нового пользователя:
string accountName = "DOMAIN\\newuser"; if (!userPM.UserExists(accountName)) { userPM.CreateUserProfile(accountName); UserProfile user = userPM.GetUserProfile(accountName); //Установим отображаемое имя пользователя. По сути, PreferredName - это AD'шный DisplayName, но об этом ниже. user["PreferredName"] = "Новый пользователь"; user.Commit(); }
А потом сказать, что он и Вася Пупки - коллеги, а Петя Васечкин - его руководитель:
UserProfile user = userPM.GetUserProfile("DOMAIN\\newuser"); UserProfile userColleague = userProfileManager.GetUserProfile("DOMAIN\\vpupkin"); if (!user.Colleagues.IsColleague(userProfileColleague.ID)) { //если использовать Create, то коллега получит мейл, что его добавили. //Если это не нужно, используйте CreateWithoutEmailNotification, сигнатура у него такая же. user.Colleagues.Create(userColleague, ColleagueGroupType.General, //если нужно, тут указываем группу конфиденциальности, в которую поместить коллегу. string.Empty, //должен ли коллега быть частью рабочей группы true, Privacy.Public); if (userPM.UserExists("DOMAIN\pvasechkin")) { user["Manager"].Clear(); user["Manager"].Add("DOMAIN\pvasechkin"); user.Commit(); } }
Ну и в конце, создадим Васе персональный сайт:
UserProfile user = userPM.GetUserProfile(sAccount); user.CreatePersonalSite();
Вообще же, класс UserProfile очень удобен для получения всевозможной информации о пользователе.
Например, мы можем получить полную карту организационных связей пользователя.
//полный список руководителей. Руководители руководителя тоже вернутся здесь. user.GetManagers(); //сотрудники, у которых тот же руководитель user.GetPeers(); //непосредственный руководители user.GetDirectReports();
Или получить какие-то дополнительные свойства. Вот тут полный список свойств по умолчанию http://technet.microsoft.com/en-us/library/hh147513(v=office.14).aspx. Кстати, часть из них при синхронизации профилей мэпится на соответствующие свойства AD: http://technet.microsoft.com/en-us/library/hh147510(v=office.14).aspx
Например, узнаем ник пользователя в корпоративном чемпионате по Квейку (это свойство мы создадим, чуть ниже)
string quakeNick = (string)user["QuakeNickname"].Value;
Ну и последнее, вы можете сами создать нужно вам свойство. Например, для хранения ника в Quake ;)
if (userPM.Properties.GetPropertyByName("QuakeNickname") == null) { PropertyCollection properties = userPM.Properties; Property property = properties.Create(false); property.Name = "QuakeNickname"; property.DisplayName = "QuakeNickname"; property.Type = PropertyDataType.String; property.Length = 255; property.IsUserEditable = true; property.PrivacyPolicy = PrivacyPolicy.Disabled; property.DefaultPrivacy = Privacy.Public; properties.Add(property); }
Да, все изменения можно делать только с правами администратора или внутри блока RunWithElevatedPrivileges
Комментариев нет:
Отправить комментарий