3

我是个 SharePoint 新手,所以请多多包涵。

我需要能够使用客户端对象模型在我们的自定义列表中创建一个新的列表项。我一直在关注MSDN 网站上描述的示例,并且在大多数情况下这已经奏效。

我们有一个列表,其中包含多个字段,包括 UserMulti 字段类型。我在将用户添加到此字段时遇到问题。到目前为止,我已经尝试了以下方法,但这似乎总是默认为系统帐户而不是字段中指定的用户。

   ...
   listItem["ProjectMembers"] = "1;#domain\\johndoe";
   listItem.Update();
   _clientContext.ExecuteQuery();

我需要先进行某种类型的查找吗?任何帮助表示赞赏。谢谢。

4

2 回答 2

6

花了一点时间,但最后我想通了。以下是您可以采取的两种方法

  1. 将委托人分配给列表项

        var principal = _rootWeb.EnsureUser("domain\\johndoe") as Principal;
        listItem["ProjectMembers"] = principal;
        listItem.Update();
        _clientContext.ExecuteQuery();
    
  2. 如果您需要为该字段分配多个用户,请分配一个 FieldUserValue 列表。

        string[] users = { "domain\\johndoe", "domain\\peterpan" };
        var projectMembers = users
            .Select(loginName => FieldUserValue.FromUser(loginName))
            .ToList();
    
        listItem["ProjectMembers"] = projectMembers;
        listItem.Update();
        _clientContext.ExecuteQuery();
    

我确信有更好的做事方式,您可以将两者结合起来以确保用户在将用户添加到列表之前是有效的,但到目前为止这是有效的。希望这对其他人有帮助。

于 2012-02-23T06:25:18.377 回答
0

Microsoft 有一篇 wiki 文章“SharePoint:使用 C# 获取和设置字段的完整指南”可以提供帮助。http://social.technet.microsoft.com/wiki/contents/articles/21801.sharepoint-a-complete-guide-to-getting-and-setting-fields-using-c.aspx#Set_and_Get_a_Multi-Person_Field

它包括此示例代码。

var lotsofpeople = new SPFieldUserValueCollection(web, item["lotsofpeoplefield"].ToString());
var personA = web.EnsureUser("contoso\\fred");
var personAValue = new SPFieldUserValue(web, personA.ID, personA.LoginName);
var personB = web.EnsureUser("contoso\\barnie");
var personBValue = new SPFieldUserValue(web, personB.ID, personB.LoginName);
lotsofpeople.Add(personAValue);
lotsofpeople.Add(personBValue);
item["lotsofpeoplefield"] = lotsofpeople;
item.Update();
于 2016-09-15T22:38:40.410 回答