正在用来自 SP.PeoplePicker 的 SP.Field 值更新 SP.ListItem

Updating SP.ListItem with SP.Field Value from SP.PeoplePicker

我正在尝试使用 JSOM 更新 SP.Listitem 扣留 spUser 给另一个用户。请参阅下面的代码片段

// Query the picker for user information.
$.fn.getUserInfo2 = function () {
  var eleId = $(this).attr('id');
  var siteUrl = _spPageContextInfo.siteServerRelativeUrl;
  var spUsersInfo = GetPeoplePickerValues(eleId);
  var clientContext = new SP.ClientContext(siteUrl);
  var oList = clientContext.get_web().get_lists().getByTitle('VLS-dokument');
  var itemArray = [];

  for(i=0;i<$.miniMenu.i.results.length;i++)
  {
    var item = $.miniMenu.i.results[i];

    var oListItem = oList.getItemById(item.Id);
    oListItem.set_item('Informationsägare', SP.FieldUserValue.fromUser(spUsersInfo.Key));
    oListItem.update();
    itemArray.push(oListItem);
    clientContext.Load(itemArray[itemArray.Length - 1]);
  }

  clientContext.executeQueryAsync(Function.createDelegate(this, function () { alert(""); }), Function.createDelegate(this, function () { alert(""); }));

  return spUsersInfo; //.slice(0, -2)
}

spUsersInfo 包含用户对象,peoplePicker.GetAllUserInfo()

return 关闭 SP.FieldUserValue.fromUser(spUsersInfo.Key) 成为问题,因为应用程序崩溃到达该行 oListItem.set_item('Informationsägare', SP.FieldUserValue.fromUser(spUsersInfo.Key));

如果不是密钥,用户 obj 的哪一部分应该传递到 SP.FieldUserValue.fromUser(spUsersInfo.Key)? 还有其他方法吗?

人物选择器列实际上只是查找列,查找网站集的用户信息列表。您可以通过指定查找列表中所需项目的 ID 或创建特殊的查找字段值对象(让 SharePoint 执行查找 ID 的工作,给定所需的文本值)来设置查找列。

根据 the documentation 传递给 SP.FieldUserValue.fromUser() 的值应该是字符串形式的用户名。实际上,这应该是用户信息列表中的用户显示名称。

因此,如果您不知道用户的查找 ID,但知道他们的显示名称,您可以使用:oListItem.set_item('Informationsägare',SP.FieldUserValue.fromUser(username));

如果您不知道用户名,但知道用户的查找 ID,则可以将该号码直接传递给 item.set_item(),即 oListItem.set_item('Informationsägare',lookupId);.

如果您的 GetPeoplePickers() 方法中的 spUsersInfo.Key 值采用 i:0#.w|Cool Person 的格式,那么您可以拆分该值并只获取要输入的字符串 Cool Person SP.FieldUserValue.fromUser().