Sharepoint客户端对象模型设置ModifiedBy字段

Nic*_*urg 5 .net c# com sharepoint

我正在尝试使用客户端对象模型更新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();
Run Code Online (Sandbox Code Playgroud)

上面的代码执行没有问题.问题出在下一个块:

        //...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();
Run Code Online (Sandbox Code Playgroud)

当代码到达第二个块底部的ExecuteQuery()时,它会抛出一个带有以下消息的ServerException:

        Invalid data has been used to update the list item. 
        The field you are trying to update may be read only.
Run Code Online (Sandbox Code Playgroud)

为了确保MyEditor字段是引发异常的字段,我注释掉了我设置它的行并再次运行代码.一切都很好.我不明白有什么不对,有人能帮帮我吗?

Edu*_*ort 1

ModifiedBy 和 CreadtedBy 从 Author 和 Editor 自动计算,您只需更改 Author 和 Editor 字段,如下所示:

        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");
        }
Run Code Online (Sandbox Code Playgroud)