将文档导入 SharePoint 文档库时无法保留文档核心元数据(创建者、修改者)

Can't preserve document core metadata (Created By, Modified By) when I import documents to SharePoint Document Library

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

  1. SharePoint 休息 API
  2. Microsoft Graph API
  3. CSOM(使用控制台应用程序)

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

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

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

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

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();

            }

您需要同时更新 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();