【问题标题】:Sharepoint Client Object Model setting ModifiedBy fieldSharepoint 客户端对象模型设置 ModifiedBy 字段
【发布时间】:2012-07-12 20:49:07
【问题描述】:

我正在尝试使用客户端对象模型更新 Sharepoint 讨论板中的“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 字段是引发异常的字段,我将设置它的行注释掉并再次运行代码。一切正常。我不明白出了什么问题,有人可以帮助我吗?

【问题讨论】:

  • 为什么你认为它应该是可能的(为什么你需要它用于正常目的)?我不希望这些类型的字段是可编辑的...如果您使用非管理员帐户这样做并设法更改这些字段,这对我来说就像一个错误。
  • 我相信这应该是可能的,因为如果我将一个字段的 ReadOnly 属性设置为 false,我应该能够写入它,这似乎是合理的。如果不是,ReadOnly 字段的用途是什么?我正在将讨论板的数据从不同的数据库迁移到 Sharepoint,并且我希望 ModifiedBy 字段反映最初发布它的人(截至目前,它显示的是我的名字)。我的帐户拥有完整的管理权限。

标签: c# .net sharepoint com


【解决方案1】:

如果有人需要按名称查找用户,则如下所示:

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

可以通过item["Author"]设置返回值

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我知道这一点。它仅在您添加项目然后使用 GetItemById 检索它时才有效。这绝对没有意义(这不是你的错)。我想知道为什么我无法修改 MyEditor 字段并在我第一次添加时使其工作。
    猜你喜欢
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 2011-03-23
    • 2011-03-04
    • 1970-01-01
    相关资源
    最近更新 更多