0

我目前正在构建一个从文档管理系统迁移到使用 SharePoint Online 的工具。我面临的主要挑战是保留文档作者的详细信息和创建时间。我在网上检查了一堆代码,但我没有成功。这是我使用的方法

  1. SharePoint 休息 API
  2. 微软图形 API
  3. CSOM(使用控制台应用程序)

这是到目前为止我在 CSOM 中的代码,但我仍然无法更新作者字段

li["Title"] = "Update from CSOM";
li["Created"] = DateTime.Now.AddYears(-5);
li["Author"] = author.Id;
li.UpdateOverwriteVersion();
clientContext.ExecuteQuery();

关于如何做到这一点的任何想法,或者是否有任何其他方法可以实现我的目标?

4

2 回答 2

2

当我在我的环境中进行测试时,该代码有效。

using (ClientContext context = new ClientContext("https://xxx.sharepoint.com/sites/lee"))
            {
                string s = "password";
                SecureString passWord = new SecureString();
                foreach (var c in s)
                    passWord.AppendChar(c);
                context.Credentials = new SharePointOnlineCredentials("admin@xxx.onmicrosoft.com", passWord);

                var author = context.Web.EnsureUser("Lee@xxx.onmicrosoft.com");
                context.Load(author);
                context.ExecuteQuery();
                var _List = context.Web.Lists.GetByTitle("List1");
                var li = _List.GetItemById(1);

                li["Title"] = "Update from CSOM";
                li["Created"] = DateTime.Now.AddYears(-5);
                li["Author"] = author.Id;
                li.UpdateOverwriteVersion();
                context.ExecuteQuery();

            }
于 2020-04-17T01:09:24.310 回答
0

您需要同时更新AuthorEditor字段才能更新 CreatedBy 字段。如果您希望同时更新其他字段,您可以。使用 SystemUpdate() 不会更新修改日期,而 Update() 会更新修改日期。请参阅下面的缩略示例。

FieldUserValue userValue = new FieldUserValue();
User newUser = cc.Web.EnsureUser("newAuthor@xxx.onmicrosoft.com");
cc.Load(newUser);
cc.ExecuteQuery();
userValue.LookupId = newUser.Id;

item["Author"] = userValue;
item["Editor"] = userValue;

item.SystemUpdate();
cc.ExecuteQuery();
于 2020-05-11T19:11:11.140 回答