将文档导入 SharePoint 文档库时无法保留文档核心元数据(创建者、修改者)
Can't preserve document core metadata (Created By, Modified By) when I import documents to SharePoint Document Library
我目前正在构建一个工具以从文档管理系统迁移到使用 SharePoint Online。我面临的主要挑战是保留文档作者的详细信息和创建时间。我已经在线检查了一堆代码,但我没有获得任何成功。
以下是我使用的方法
- SharePoint 休息 API
- Microsoft Graph API
- 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();
}
您需要同时更新 Author 和 Editor 字段才能更新 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();
我目前正在构建一个工具以从文档管理系统迁移到使用 SharePoint Online。我面临的主要挑战是保留文档作者的详细信息和创建时间。我已经在线检查了一堆代码,但我没有获得任何成功。 以下是我使用的方法
- SharePoint 休息 API
- Microsoft Graph API
- 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();
}
您需要同时更新 Author 和 Editor 字段才能更新 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();