среда, 19 марта 2014 г.

Управление пользователями SharePoint из кода

Все, что необходимо для управления пользователями в объектной модели 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

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

Отправить комментарий