SharePoint附带属性字段文件迁移客户端模型

SharePoint附带属性字段文件迁移客户端模型

1.说明

.Net客户端对象模型(OM)是Microsoft SharePoint 2010软件开发工具包(SDK)的三个新客户端API之一,允许与SharePoint网站进行交互,用于与来自远程客户端或服务器的SharePoint数据进行互操作。

2.附带属性字段的文件迁移代码编写

下面通过编写一个方法来完成一次附带属性字段的文件迁移。

方法解读

输入参数:

原文件网站地址,原文件文件库表,文件名,转存网站地址,转存库表对应的路径名,是否删除原文件

过程:

1.创建客户端模型,包括模型两次实例化ClientContext(原文件网站和迁移文件网站),需要分别信息验证Credentials(对象不同);
2.打开原文件库表,使用CAML语法,根据文件名进行查找,语法中注意View Scope='RecursiveAll’的使用;
3.载入目标文件库表,原文件网站ClientContext对象使用OpenBinaryDirect获取文件流,构建迁移地址(使用到转存库表对应的路径名),迁移网站ClientContext根据文件流,迁移地址,使用SaveBinaryDirect迁移文件;
4.原网站文件库列项属性字段赋值给目标网站的相应字段;
5.删除原文件,迁移步骤完成。

/// <summary>
        /// 文件转存
        /// </summary>
        /// <param name="srcUrl">原文件地址</param>
        /// <param name="destUrl">转存地址</param>
        /// <param name="srcLibrary">原文件库表</param>
        /// <param name="destLibrary">转存库表对应的路径名</param>
        /// <param name="FileName">文件名</param>
        /// <param name="isDeleteFile">是否删除源文件</param>
        public static void CopyDocuments(string srcUrl, string srcLibrary, string FileName, string destUrl, string destLibrary, bool isDeleteFile)
        {
            // set up the source context
            ClientContext srcContext = new ClientContext(srcUrl);
            srcContext.Credentials = new NetworkCredential("域账号", "域账号密码", "域名");

            // set up the destination context
            ClientContext destContext = new ClientContext(destUrl);
            destContext.Credentials = new NetworkCredential("域账号", "域账号密码", "域名");

            // get the source list and items
            Web srcWeb = srcContext.Web;
            List srcList = srcWeb.Lists.GetByTitle(srcLibrary);
            ListItemCollectionPosition itemPosition = null;
            while (true)
            {
                CamlQuery camlQuery = new CamlQuery();
                camlQuery.ListItemCollectionPosition = itemPosition;
                //View Scope='RecursiveAll'使得文档列表中所有文件都遍历一次,无论路径如何
                camlQuery.ViewXml =
        @"<View Scope='RecursiveAll'>
        <Query>
        <Where>
        <Eq>
        <FieldRef Name='FileLeafRef'/>
        <Value Type='text'>" + FileName + @"</Value>
        </Eq>
        </Where>                    
        <RowLimit>1</RowLimit>
        </Query>
        </View>";

                ListItemCollection col = srcList.GetItems(camlQuery);
                srcContext.Load(col);
                srcContext.ExecuteQuery();
                itemPosition = col.ListItemCollectionPosition;
                // get the target list
                Web destWeb = destContext.Web;
                destContext.Load(destWeb);
                destContext.ExecuteQuery();
                //Console.ReadLine();
                foreach (var doc in col)
                {
                    try
                    {
                        Microsoft.SharePoint.Client.File f = doc.File;
                        srcContext.Load(f);
                        srcContext.ExecuteQuery();
                        ListItem item = (ListItem)doc;
                        string strPath = destWeb.ServerRelativeUrl.TrimEnd('/') + "/" + destLibrary + "/" + f.Name;
                        FileInformation fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(srcContext, f.ServerRelativeUrl);
                        Microsoft.SharePoint.Client.File.SaveBinaryDirect(destContext, strPath, fileInfo.Stream, true);
                        Microsoft.SharePoint.Client.File file = destWeb.GetFileByServerRelativeUrl(strPath);
                        ListItem lstItem = file.ListItemAllFields;
                        destContext.Load(lstItem);
                        destContext.ExecuteQuery();
                        
                        //属性字段赋值
                        lstItem["目标属性字段"] = item["原属性字段"];
                        
                        lstItem.Update();
                        destContext.ExecuteQuery();
                        Console.WriteLine("转存成功!");

                        //原文档删除
                        if (isDeleteFile)
                        {
                            item.DeleteObject();
                            srcContext.ExecuteQuery();
                            Console.WriteLine("原文件删除成功!");
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("File Error = " + ex.ToString());
                        Console.ReadLine();
                    }
                }
                if (itemPosition == null)
                    break;
            }
        }

参考

以上为个人整理总结的知识,如有遗漏或错误欢迎留言指出、点评,如要引用,请写引用说明,谢谢。
[1]: https://social.technet.microsoft.com/Forums/en-US/579bf31a-acfc-4f86-9e7f-2cb3502879e7/copy-and-move-files-from-one-library-to-another-library-along-with-metadata-values-using-client?forum=sharepointdevelopmentprevious

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值