我正在尝试使用客户端对象模型更新Sharepoint讨论板中的“ModifiedBy”字段。通过更改“编辑器”和“作者”字段,我可以更改列表视图中显示的“ModifiedBy”。但是,一旦您点击讨论帖,那里出现的“ModifiedBy”字段(上面带有图片的字段)不会反映更改。经过实验,我发现我需要更改以纠正此字段称为“MyEditor”。不幸的是,这个字段是只读的。
在下面的代码中,我尝试将字段的只读设置更改为false。当我在第一个块底部的ExecuteQuery()行之后查看Visual Studio调试器中的MyEditor字段时,它显示ReadOnlyField值实际上已设置为false。
sharepointContext.Load(discussionList);
sharepointContext.ExecuteQuery();
var fields = discussionList.Fields;
sharepointContext.Load(fields);
sharepointContext.ExecuteQuery();
var field = fields.GetByInternalNameOrTitle("MyEditor");
field.ReadOnlyField = false;
field.Update();
sharepointContext.Load(field);
sharepointContext.ExecuteQuery();
上面的代码执行没有问题。问题出在下一个块:
//...Code to initialize discussionItem...
discussionItem["MyEditor"] = 0;
discussionItem["Editor"] = 0;
discussionItem["Author"] = 0;
discussionItem["Body"] = "Testing";
discussionItem["Title"] = "Hello Worlds";
discussionItem.Update();
sharepointContext.Load(discussionItem);
sharepointContext.ExecuteQuery();
当代码到达第二个块底部的ExecuteQuery()时,它会抛出一个ServerException并显示以下消息:
Invalid data has been used to update the list item.
The field you are trying to update may be read only.
为了确保MyEditor字段是引发异常的字段,我注释掉了我设置它的行并再次运行代码。一切都很好。我不明白有什么不对,有人可以帮助我吗?
答案 0 :(得分:3)
如果有人需要按名称查找用户,可以这样:
private static FieldUserValue GetUser(ClientContext clientContext, string userName)
{
var userValue = new FieldUserValue();
var newUser = clientContext.Web.EnsureUser(userName);
clientContext.Load(newUser);
clientContext.ExecuteQuery();
userValue.LookupId = newUser.Id;
return userValue;
}
可以通过项目[“作者”]
设置返回值答案 1 :(得分:1)
ModifiedBy和CreadtedBy从作者和编辑器自动计算,您只需要更改作者和编辑器字段,如下所示:
using (var clientContext = new ClientContext(@"http://server"))
{
var web = clientContext.Web;
var lst = web.Lists.GetByTitle("Discus");
var item = lst.GetItemById(2);
item["Author"] = 3;
item["Editor"] = 2;
item.Update();
clientContext.ExecuteQuery();
Console.WriteLine("done");
}