2014-02-04 4 views
1

Для реализации приложения SharePoint 2013 для дня рождения мне нужно получить все профили пользователей из семейства сайтов. Для этого я хотел бы использовать (или несколько) клиентский API (ы). См. http://msdn.microsoft.com/en-us/library/jj163800.aspx#bkmk_APIversions.Как получить с API-интерфейсом клиента SharePoint все профили пользователей?

К сожалению, я не нашел в описании API эквивалент Microsoft.Office.Server.UserProfiles. Есть в Microsoft.SharePoint.Client.UserProfiles.PeopleManager два метода: GetUserProfilePropertiesFor и GetUserProfilePropertyFor, которые получают только один профиль пользователя.

Итак, мой вопрос: как получить с CSOM, JSOM, REST (или любой клиентской технологией) все профили пользователей в семействе сайтов?

ответ

1

This также должны работать для SP2013

function GetUsersGroups(){ 

    ClientContext context = new Microsoft.SharePoint.Client.ClientContext("http://SPSite"); 

    GroupCollection groupCollection = context.Web.SiteGroups; 
    context.Load(groupCollection, 
    groups = > groups.Include(group = > group.Users)); 

    context.ExecuteQuery(); 

    foreach (Group group in groupCollection) 
    { 
    UserCollection userCollection = group.Users; 

    foreach (User user in userCollection) 
    { 
     MessageBox.Show("User Name: " + user.Title + " Email: " + user.Email + " Login: " + user.LoginName); 
    } 
    } 
    //Iterate the owners group 
    Group ownerGroup = context.Web.AssociatedOwnerGroup; 
    context.Load(ownerGroup); 
    context.Load(ownerGroup.Users); 
    context.ExecuteQuery(); 
    foreach (User ownerUser in ownerGroup.Users) 
    { 
    MessageBox.Show("User Name: " + ownerUser.Title + " Email: " + ownerUser.Email + " Login: " + ownerUser.LoginName); 
    } 
    context.Dispose(); 
} 
+0

Спасибо за ваш ответ Грег, но это работает для 'Users' не для' User Profiles'. Мне нужно забрать дату рождения. – MED

+0

Проверьте эту ссылку: http://msdn.microsoft.com/en-us/library/office/jj679838.aspx – Greg

+0

Привет @Greg, 'SP.UserProfiles.UserProfilePropertiesForUser' эквивалентен' Microsoft.SharePoint.Client.UserProfiles. PeopleManager.GetUserProfilePropertiesFor'. Чтобы получить все профили пользователей, вы должны сначала загрузить всех пользователей, а затем получить соответствующий профиль для каждого пользователя. Это не очень удобно. Я просто хочу сразу отказаться от нескольких фильтров и только получить результаты, соответствующие этим критериям. – MED

3

Поскольку CSOM предоставляет методы для операций, связанных с людьми на пользователя сферу, вы можете получить все пользователи сайта первым использованием SP.Web.siteUsers property. а затем использовать SP.UserProfiles.PeopleManager.getUserProfilePropertyFor Method получить BirthDay свойство, как показано ниже:

//Get Birthday User Profile Property for Site Users 
function getUsersBirthdays(Success,Error) { 
    var clientContext = new SP.ClientContext.get_current(); 
    var web = clientContext.get_web(); 

    var users = web.get_siteUsers(); 
    clientContext.load(users); 
    clientContext.executeQueryAsync(
    function() { 
     var peopleManager = new SP.UserProfiles.PeopleManager(clientContext); 
     var personsProperties = []; 
     for(var i = 0; i < users.get_count();i++) 
     { 
      var user = users.getItemAtIndex(i); 
      var personBirthday = peopleManager.getUserProfilePropertyFor(user.get_loginName(),'SPS-Birthday'); 
      personsProperties.push(personBirthday); 
     } 

     clientContext.executeQueryAsync(
      function() { 
      Success(personsProperties); 
      }, 
      Error); 

    }, 
    Error); 



} 



//Usage 
var scriptbase = _spPageContextInfo.webAbsoluteUrl + '/_layouts/15/'; 
$.getScript(scriptbase + 'SP.js', function() { 
    $.getScript(scriptbase + 'SP.UserProfiles.js', function() { 
    getUsersBirthdays(function(usersProperties){ 
     for(var i = 0; i < usersProperties.length;i++) 
     { 
      console.log(usersProperties[i].get_value()); 
     } 
    }, 
    function(sender,args){ 
     console.log(args.get_message()); 
    }); 
    }); 
}); 
+6

Спасибо, Вадим Гремячий за ваш ответ. По соображениям производительности я в конечном итоге решил его с помощью поискового запроса REST: 'var queryUrl = appweburl +"/_api/search/query? " + "querytext = '*'" + "& sourceid = 'B09A7990-05EA-4AF9-81EF-EDFAB16C4E31'" + "& rowlimit = 500" + "& selectproperties = 'PreferredName, Birthday'"; $ .ajax ({ URL: queryUrl, метод: "GET", заголовки: { "Accept": "приложения/JSON; OData = многословный"}, успех: successHandler, ошибка: ErrorHandler }) ; ' – MED

Смежные вопросы