我正在使用客户端对象模型的ValidateUpdateListItem方法更新SharePoint列表项,以防止创建新项目版本。除了具有人物或组字段类型的字段外,这基本上适用于所有字段。有谁知道用作ListItemFormUpdateValue对象的FieldValue的用户或组值的正确字符串表示形式是什么?我已经尝试过对我来说似乎合理的所有内容(来自用户信息的用户ID,登录名,查找值,例如这些数据的组合等),但没有任何成功。
答案 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'}]" });
对于多个值,可以用逗号分隔。没有尝过它,但我认为它应该有用。
希望这对某人有用。