2012-02-23 95 views
2

我是一位SharePoint noobie,请耐心等待。使用客户端对象模型将用户添加到UserMulti字段类型

我需要能够使用客户端对象模型在我们的自定义列表中创建一个新的列表项。我一直在按照MSDN site上描述的例子进行操作,而且大部分工作都是如此。

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

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

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

回答

5

花了一点时间,但我最终发现了它。下面是两种方法可以采取

  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(); 
    

我敢肯定有更好的做事方式,你可以将二者结合起来,以确保用户将其添加到列表之前有效,但这是工作至今。希望这可以帮助别人。

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(); 
相关问题