2

我正在使用客户端对象模型的 ValidateUpdateListItem 方法更新 SharePoint 列表项,以防止创建新的项目版本。这基本上适用于所有字段,除了具有人员或组字段类型的字段。有谁知道要用作 ListItemFormUpdateValue 对象的 FieldValue 的用户或组值的正确字符串表示形式是什么?我已经尝试了一切对我来说似乎合理的事情(来自用户信息的用户 ID、登录名、查找值,如这些数据的组合等),但没有任何成功。

4

2 回答 2

7

我刚刚遇到了一个问题,即使用项目更新更新超过 12 个人员或组字段导致它引发异常。显然,这是由于 SP Online 中的列表视图查找阈值(截至该日期为 12)引起的。

http://blog.vanmeeuwen-online.nl/2012/07/value-does-not-fall-within-expected.html

为了解决这个问题,我使用了 ValidateUpdateListItem 方法来更新人员或组 ID。诀窍是为其分配一个json格式为

[{"Key":"i:0#.f|membership|user@yoursite.onmicrosoft.com"}]

 formValues.Add(new ListItemFormUpdateValue() { FieldName = "AssignedTo", FieldValue = "[{'Key':'i:0#.f|membership|user@yoursite.onmicrosoft.com'}]" });

对于多个值,可以用逗号分隔。尚未与小组一起尝试过,但我认为它应该可以工作。

希望这对某人有用。

于 2016-01-25T06:07:03.913 回答
1

不幸的是ListItem.ValidateUpdateListItem 方法不支持用户字段值的更新。例如,在以下示例中,AssignedTo字段将不会更新:

using (var ctx = GetContext(webUri, userName, password))
{
     var list = ctx.Web.Lists.GetByTitle(listTitle);
     var item = list.GetItemById(itemId);

     var formValues = new List<ListItemFormUpdateValue>();
     formValues.Add(new ListItemFormUpdateValue() { FieldName = "Title", FieldValue = taskName});
     formValues.Add(new ListItemFormUpdateValue() { FieldName = "AssignedTo", FieldValue = userId.ToString() });  //not supported
     item.ValidateUpdateListItem(formValues, true, string.Empty);
     ctx.ExecuteQuery();

}

而是考虑ListItem.Update 方法来更新用户字段值,如下所示:

using (var ctx = GetContext(webUri, userName, password))       
{

      var list = ctx.Web.Lists.GetByTitle(listTitle); 
      var item = list.GetItemById(itemId);

      item["Title"] = taskName;
      var assignedToValue = new FieldUserValue() { LookupId = userId };
      var assignedToValues = new[] { assignedToValue };
      item["AssignedTo"] = assignedToValues;  //multi-valued user field
      item.Update();
      ctx.ExecuteQuery();
}
于 2015-07-27T11:04:59.127 回答