Как получить объект Sharepoint User из поля «AssignedTo», используя объектную модель на стороне клиента? - PullRequest
12 голосов
/ 01 августа 2010

Я использую управляемую клиентскую объектную модель в sharepoint 2010. И я хочу получить loginaName пользователя AssignedTo в списке задач.

На стороне сервераобъектная модель Я использую SPFieldUserValue.User.LoginName, чтобы получить это свойство, но в клиентской объектной модели FieldUserValue.User не существует.

Как мне разрешить эту ситуацию?

Спасибо

Ответы [ 4 ]

14 голосов
/ 10 июня 2011

Вот код для этого. Я взял пример поля AssignedTo из списка задач. Я надеюсь, что это помогает.

    public static User GetUserFromAssignedToField(string siteUrl)
    {
        // create site context
        ClientContext ctx = new ClientContext(siteUrl);

        // create web object
        Web web = ctx.Web;
        ctx.Load(web);

        // get Tasks list
        List list = ctx.Web.Lists.GetByTitle("Tasks");
        ctx.Load(list);

        // get list item using Id e.g. updating first item in the list
        ListItem targetListItem = list.GetItemById(1);

        // Load only the assigned to field from the list item
        ctx.Load(targetListItem,
                         item => item["AssignedTo"]);
        ctx.ExecuteQuery();

        // create and cast the FieldUserValue from the value
        FieldUserValue fuv = (FieldUserValue)targetListItem["AssignedTo"];

        Console.WriteLine("Request succeeded. \n\n");
        Console.WriteLine("Retrieved user Id is: {0}", fuv.LookupId);
        Console.WriteLine("Retrieved login name is: {0}", fuv.LookupValue);

        User user = ctx.Web.EnsureUser(fuv.LookupValue);
        ctx.Load(user);
        ctx.ExecuteQuery();

        // display the user's email address.
        Consol.writeLine("User Email: " + user.Email);

        return user;
    }
9 голосов
/ 27 ноября 2014

fuv.LookupValue может содержать отображаемое имя, а не имя для входа, поэтому я предлагаю (если у вас есть код FieldUserValue - fuv (как описано @ekhanna):

var userId = fuv.LookupId;
var user = ctx.Web.GetUserById(userId);

ctx.Load(user);
ctx.ExecuteQuery();
3 голосов
/ 15 декабря 2010

Вы получаете столбец, который как FieldUserValue из списка, если у вас есть значение идентификатора поиска, а затем выполняется запрос к списку информации о пользователях сайтов.В приведенном ниже примере я кеширую результаты, чтобы предотвратить поиск одного и того же идентификатора более одного раза, так как запрос может быть дорогим.

private readonly Dictionary<int, string> userNameCache = new Dictionary<int, string>();
public string GetUserName(object user)
{
        if (user == null)
        {
            return string.Empty;
        }

        var username = string.Empty;
        var spUser = user as FieldUserValue;            
        if (spUser != null)
        {
            if (!userNameCache.TryGetValue(spUser.LookupId, out username))
            {
                var userInfoList = context.Web.SiteUserInfoList;
                context.Load(userInfoList);
                var query = new CamlQuery { ViewXml = "<View Scope='RecursiveAll'><Query><Where><Eq><FieldRef Name='ID' /><Value Type='int'>" + spUser.LookupId + "</Value></Eq></Where></Query></View>" };
                var users = userInfoList.GetItems(query);
                context.Load(users, items => items.Include(
                    item => item.Id,
                    item => item["Name"]));
                if (context.TryExecuteQuery())
                {
                    var principal = users.GetById(spUser.LookupId);
                    context.Load(principal);
                    context.ExecuteQuery()
                    username = principal["Name"] as string;
                    userNameCache.Add(spUser.LookupId, username);
                }
            }
        }
        return username;
    }
1 голос
/ 27 ноября 2012

Все выше сработало для меня, но вместо:

FieldUserValue fuv = (FieldUserValue)targetListItem["AssignedTo"];

Я использовал:

FieldUserValue[] fuv = targetListItem["AssignedTo"] as FieldUserValue[];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...