SharePoint CSOM:如何使用ValidateUpdateListItem更新人员或组字段?

时间:2015-07-27 09:43:06

标签: sharepoint updates csom splistitem spuserfield

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

2 个答案:

答案 0 :(得分:2)

不幸的是ListItem.ValidateUpdateListItem method不支持更新user field value。例如,在以下示例中,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 Method来更新用户字段值,如下所示:

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

答案 1 :(得分:2)

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

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

要解决此问题,我使用ValidateUpdateListItem方法更新人员或组ID。诀窍是为它分配一个格式为

的json

[{ “密钥”: “我:0#.F |成员| user@yoursite.onmicrosoft.com”}]

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

对于多个值,可以用逗号分隔。没有尝过它,但我认为它应该有用。

希望这对某人有用。