【问题标题】:CSOM: How to copy a document from one document library to another documents library?CSOM:如何将文档从一个文档库复制到另一个文档库?
【发布时间】:2021-11-22 21:34:43
【问题描述】:

我需要将满足特定条件(文档的审批状态 = 已批准)的所有文档复制到 SharePoint Online 中的存档文档库。我正在遍历所有站点并使用 CAML 查询过滤出批准的文档,但我不知道如何使用 CSOM C# 将此文档复制到不同的库位置。另外,我需要替换文档,以防它已经存在于存档库中。

注意:存档库位于不同的网站集中。

非常感谢任何帮助。提前谢谢你。

【问题讨论】:

    标签: c# sharepoint-online document csom


    【解决方案1】:

    请参考以下代码

            var srcUrl = "srcurl";
            var destUrl = "destUrl ";
            var srcLibrary = "srcLibrary";
            var destLibrary = "destLibrary";
    
            ClientContext destContext = new ClientContext(destUrl);
            ClientContext srcContext = new ClientContext(srcUrl);
    
            var strPassword = "password";
            SecureString secureString = new SecureString();
            strPassword.ToList().ForEach(secureString.AppendChar);
            destContext.Credentials = new SharePointOnlineCredentials("xxx@xxx.onmicrosoft.com", secureString);
            srcContext.Credentials = new SharePointOnlineCredentials("xxx@xxx.onmicrosoft.com", secureString);
    
    
            Web srcWeb = srcContext.Web;
    
            List srcList = srcWeb.Lists.GetByTitle(srcLibrary);
    
            Web destWeb = destContext.Web;
    
            destContext.Load(destWeb);
    
            destContext.ExecuteQuery();
            try
            {
                Microsoft.SharePoint.Client.File file = srcContext.Web.GetFileByServerRelativeUrl("filepath");
                srcContext.Load(file);
                srcContext.ExecuteQuery();
                string location = destWeb.ServerRelativeUrl.TrimEnd('/') + "/" + destLibrary.Replace(" ", "") + "/" + file.Name;
                FileInformation fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(srcContext, file.ServerRelativeUrl);
                Microsoft.SharePoint.Client.File.SaveBinaryDirect(destContext, location, fileInfo.Stream, true);
            }
    
            catch (Exception ex)
            {
                throw ex;
            }
    

    【讨论】:

    • 感谢@RaytheonXie-msft 的回复。我一直在检索文档 URL 以将其分配给“srcurl”。这是我想要实现的目标 - 因为我需要将所有具有批准状态 = 批准的文档复制到存档库 - 我正在遍历所有站点,检索站点的文档库并使用 CAML 检查文档的状态 =批准。此时,我想将此文档(当前文档)复制到存档库。如何知道当前文档的 url?此网址与您的代码中提到的“文件路径”相同吗?
    • 我能够使用 serverRelativeUrl 的概念,然后构造文档的 absoluteURL。但现在,我收到以下错误 - 远程服务器返回错误:(403)禁止在行'destContext.ExecuteQuery();'我将用于运行控制台应用程序的服务帐户添加到存档库的“网站集管理员”组,但仍然遇到同样的问题。请帮忙。
    • 由于我无法在此处粘贴代码 sn-p,因此我将其作为新问题发布-请在下面找到链接-stackoverflow.com/questions/70088534/…
    • 'filepath' 类似于 '/sites/test/DocumentLib/test.txt'
    • 谢谢@RaytheonXie-MSFT。请让我知道如何构建动态文件路径?这些文档存在于不同的子站点中 - 例如:example.com/sites/applications/abc/123456/Shared Documents/01 - xyz Book
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 1970-01-01
    相关资源
    最近更新 更多