在SharePoint列表中将SharePoint用户写入用户字段的正确方法

5
我正在向SharePoint列表写入用户。
据我所知,SharePoint User字段中包含一个类似于以下的字符串: userId;#userLoginName 当我写入User字段时,我尝试采用相同的格式,例如当我写入以下字符串时它就起作用了: 9;#i:0#.f|membership|ectropy@example.org
但是奇怪的是,即使只是9或9;#也能起作用。即使我根本不传递userLoginName信息,loginId似乎已足够让它识别我所说的User。
这似乎意味着,在写入SharePoint User字段时,您仅需要id,而userLoginName或者在loginId之后的所有信息都是无关紧要的。
我的推理是否正确?或者如果我省略userLoginName信息会有意外后果吗?
2个回答

8
你的假设是正确的,当指定用户字段的值时,只有用户ID是必填属性。
但是,由于SP.FieldUserValue object用于存储用户字段的值,建议使用此对象获取和设置值,如下面的示例所示:
var ctx = SP.ClientContext.get_current();
var web = ctx.get_web();
var lists = web.get_lists();
var list = lists.getByTitle(listTitle);
var item = list.getItemById(itemId);

var assignedToVal = new SP.FieldUserValue();
assignedToVal.set_lookupId(11);   //specify User Id 
item.set_item(fieldName,assignedToVal);
item.update();

ctx.executeQueryAsync(
    function() {
        console.log('Updated');
    },
    function(sender,args) {
        console.log('An error occurred:' + args.get_message());
    }
);

1
好的,完美,所以不要仅仅只是使用 newItem.set_item('Manager', "9");(这是我的当前代码的工作方式),最好使用 var assignedToVal = new SP.FieldUserValue(); assignedToVal.set_lookupId(9); item.set_item(fieldName,assignedToVal);,如果我理解正确的话。 - Ectropy
1
如果用户类型为 SP.FieldUserValue,则 user.get_id() 返回 UserId。 - Vadim Gremyachev
1
不要忘记加载 sp.js SP.SOD.executeFunc('sp.js', 'SP.ClientContext', loadSPContext); - Florian Leitgeb

0

我发现在没有用户ID的情况下,使用人名来查找答案比查找用户ID更容易。

https://gist.github.com/rheid/18635032d8371c7825b3320eae57071f

// Single Person  
   var singleUser = SP.FieldUserValue.fromUser('Peter Dotsenko');  
   oListItem.set_item('PetkaPersonSingle', singleUser);  

   //Multi Person  
   var petkaUserMultiArray = new Array("peterd@domain.com","Peter Dotsenko","domain\\peterd");  
   var lookups = [];  
   for (var ii in petkaUserMultiArray) {  
      var lookupValue = SP.FieldUserValue.fromUser(petkaUserMultiArray[ii]);  
      lookups.push(lookupValue);  
   }  
   oListItem.set_item('PetkaPersonMulti', lookups);
//

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接