2014-12-18 5 views
1

У меня есть игра с объектной моделью на стороне клиента и приложениями для SharePoint Online. Я могу получить информацию из поля «Личность и группы», используя объект FieldUserValue, однако, как я могу определить это, если введенное значение является просто пользователем или группой SharePoint?Определение того, введенное значение является пользователем или группой - модель объекта на стороне клиента

Насколько я могу судить, у FieldUserValue есть только объекты LookupId и LookupValue, которые не указывают, является ли это группой или нет. Разве я ошибался в этом вопросе и есть ли лучший способ запроса поля и проверка того, является ли это значение пользователем группы SharePoint?

Благодаря

+0

Возможно, что-то полезное: 'FieldUserValue singleValue = (FieldUserValue) targetItem [" Single "];' 'FieldUserValue [] multValue = targetItem [" Несколько "] как FieldUserValue [];' from [there] (http: // www .madhur.co.in/блог/2014/01/29/чтения-записи-людей-значения-silverlight.html для SharePoint). Также глядя на [этот ответ] (http://stackoverflow.com/a/6309906/3283203), вы можете догадаться, какое поле интересует вас в вашем случае (вместо «Single» и «Multiple») – Kilazur

ответ

3

Вы можете определить, является ли значение поля пользователя User или Group путем получения содержимого Тип элемента списка в User Information List:

public static string GetUserFieldType(ClientContext ctx,FieldUserValue value) 
{ 
    var userInfoList = ctx.Site.RootWeb.SiteUserInfoList; 
    var userInfo = userInfoList.GetItemById(value.LookupId); 
    ctx.Load(userInfo,i => i.ContentType); 
    ctx.ExecuteQuery(); 
    return userInfo.ContentType.Name; 
} 

Использование

Предположим список содержит одиночный -значное поле пользователя, то:

using (var ctx = new ClientContext(webUrl)) 
{ 
     ctx.Credentials = CreateSPOCredentials(userName, password); 

     var list = ctx.Web.Lists.GetByTitle(listTitle); 
     var listItem = list.GetItemById(itemId); 
     ctx.Load(listItem); 
     ctx.ExecuteQuery(); 

     var userVal = listItem[fieldName] as FieldUserValue; 
     var type = GetUserFieldType(ctx,userVal); 
     var isUser = type == "Person"; 
     var isGroup = type == "SharePointGroup"; 

    }