zoukankan      html  css  js  c++  java
  • 深入解析SharePoint Content Deployment and Migration API 之二

    提供一些关于export的真实的例子

    ============================

    为了论证Content Deployment and Migration API是多么强大, 我现在就提供一些真实世界中的例子:

    1. Export a complete Site Collection

    2. Export a specific sub web

    3. Exporting other elements like lists, document libraries, list items or documents from a document library

    4. Exporting using compression

    5. Incremental Export

    下面的例子中假设源站点集在本地服务器上, 端口是2000.

    让我们从一个用stsadm.exe也可以完成的场景开始吧:

     

    1) Export a complete Site Collection

    -----------------------------------------------

    实际上, 有两种不同的方法来export一个site collection

    第一种方法:

    SPExportSettings settings = new SPExportSettings();
    settings.SiteUrl = "http://localhost:2000";
    settings.ExportMethod = SPExportMethodType.ExportAll;
    settings.FileLocation = @"c:\export";
    settings.FileCompression = false;
    settings.CommandLineVerbose = true;
    
    SPExport export = new SPExport(settings);
    export.Run(); 
    

    我们都做了些什么? 首先我们创建了SPExportSettings 对象来为我们想要执行的export定义总体的配置设置. 我们没有选择一个具体的对象来export, 整个site collection都会被export. 然后我们基于配置对象创建了SPExport对象, 使用Run方法开始了export的过程.

    这是对上面使用的代码的配置的一份简短的解释:

    • SiteUrl - 这个属性定义了export哪个站点集. 所有被export的对象必须永远来自于同一个站点集. Content Deployment and Migration API 不能在一个操作中访问在不同站点集中的item.

    • ExportMethod - 这个属性允许定义是否执行一个incremental export(值是ExportChanges), 或者export所有的东西(值是ExportAll). 注意, ExportChanges 会要求你在另一个分开的属性中提供一个Export Change Token.

    • FileLocation -  这个属性定义了在什么地方存储exported的内容. 这个值应该指向一个空的目录. 如果目录不存在的话, 在export的过程中会创建一个新的出来. 如果要用压缩文件, 那么这个地方只会存储哪个压缩了的文件. 而未被压缩的文件会被存储在用系统范围的的环境变量TMP来指定的文件夹中. 所以, 你需要弄清楚TMP环境变量指向的是哪一个文件夹, 还要确保这个文件夹有足够的空间.

    • FileCompression - 这个属性定义了内容是否应该被压缩到一个CAB文件中. 如果你需要存储exported的内容或者需要转移它到另一台机器上, 你就应该选择压缩. 如果你export内容后马上就要import到相同的机器, 那么你就没必要指定压缩选项了, 因为这样操作速度会明显地加快.

    • CommandLineVerbose - 这个参数允许你控制是否API提供详细的输出. 你应该曾经见过使用STSADM –o export的输出结果的吧, 这个标志位就是确保生成同样输出结果的. 如果其值为false, 那么久不会有output生成了.

    第二种方法:

    SPSite site = new SPSite("http://localhost:2000");
    
    SPExportObject exportObject = new SPExportObject();
    exportObject.Id = site.ID;
    exportObject.Type = SPDeploymentObjectType.Site;
    
    SPExportSettings settings = new SPExportSettings();
    settings.SiteUrl = "http://localhost:2000";
    settings.ExportMethod = SPExportMethodType.ExportAll;
    settings.FileLocation = @"c:\export";
    settings.FileCompression = false;
    settings.ExportObjects.Add(exportObject);
    
    SPExport export = new SPExport(settings);
    export.Run();
    
    site.Dispose();

    这里我们都做了什么? 在这个方法里, 我们显示地添加了一个特定的object到了ExportObjects集合中- 这个object就是定义了站点集的SPSite对象. 这使得我们得到相同的结果, 如同第一种方法里, 我们隐式地选择了SPSite对象, 因为并没有显示地选择任何对象来export.

     

    这是对上面使用的代码的配置的一份简短的解释:

    • SPExportObject.Id - 应该被exported的对象的GUID

    • SPExportObject.Type - 应该被exported的对象的类型. 这个可以使下面的值:

      • Site = SPSite object (站点集)

      • Web = SPWeb object (站点)

      • List = SPList object

      • File = SPFile object

      • Folder = SPFolder object

      • ListItem = SPListItem object

    • 其他的一些属性, 请参考上面的方法一.

    2) Export a specific sub web

    ----------------------------------------

    export一个特定的子站点的代码跟在第二种方法中的export整个站点集的代码非常相似:

    SPSite site = new SPSite("http://localhost:2000");
    SPWeb web = site.OpenWeb("/SomeWeb");
    
    SPExportObject exportObject = new SPExportObject();
    exportObject.Id = web.ID;
    exportObject.IncludeDescendants = SPIncludeDescendants.All;
    exportObject.Type = SPDeploymentObjectType.Web;
    
    SPExportSettings settings = new SPExportSettings();
    settings.SiteUrl = "http://localhost:2000";
    settings.ExportMethod = SPExportMethodType.ExportAll;
    settings.FileLocation = @"c:\export";
    settings.FileCompression = false;
    settings.ExcludeDependencies = false;
    settings.ExportObjects.Add(exportObject);
    
    SPExport export = new SPExport(settings);
    export.Run();
    
    web.Dispose();
    site.Dispose();

    注意, 当使用上面的方法export一个特定的子站点的时候, 不光是这个子站点的对象会被export, 被这个子站点的内容依赖的内容也会被export出来, 比方说被这个子站点引用的页面, 还有赋予这个子站点的master page.

     

    这些被依赖的对象是否应该被export可以通过SPExportSettings对象的ExcludeDependencies 属性来控制.

    是否对象的子对象需要被export, 可以通过使用SPExportObject 对象的IncludeDecendents 属性来控制.

    • ExcludeDependencies - 这个属性控制着是否要export 被依赖的对象, 诸如被应用的页面, 或者page layouts. 如果还不清楚是否被依赖的对象已经在目标数据库中存在了, 你就应该export这些被依赖的对象, 来防止发生不必要的问题.

    • IncludeDescendants - This property controls whether to export child objects of the selected objects (like sub webs, lists, list items) or only the selected object. Possible values are None (only the object is exported), Content (List and libraries of a web will be exported but not sub webs) and All (all child content is exported)这个属性控制着是否要export选择了的对象的子对象(比如说子站点, 列表, 列表项). 可能的值有

      • None 只export选择的对象.

      • Content 站点的列表和文档库会被export, 但是子站点不会.

      • All 所有的子内容都会被export

     

    3) Exporting other elements like lists, document libraries, list items or documents from a document library

    ------------------------------------------------

    其他的对象和容器也可以被export的, 所使用的还是同样的方法, 把他们加入到ExportObjects的集合中即可.

    SPSite site = new SPSite("http://localhost:2000");
    SPWeb web = site.OpenWeb("/SomeWeb");  
    SPList list = web.Lists["MyList"];
    SPListItem listItem = list.Items[0]; // select the first list item
    
    SPExportObject exportObject = new SPExportObject();
    exportObject.Id = list.ID;
    exportObject.Type = SPDeploymentObjectType.List;
    
    SPExportObject exportObject = new SPExportObject();
    exportObject.Id = listItem.UniqueId;
    exportObject.Type = SPDeploymentObjectType.ListItem;
    
    ...

    Export文档库可以使用export一个列表一样的代码, 因为在内部, 文档库本身就被实现为了一种列表. 并且文档库中的文档也可以像export列表中的列表项一样. 文档的SPFile对象会被自动地与SPListItem对象一起被export的.

    4) Exporting using compression

    -------------------------------------------------------

    当使用压缩选项的时候, 在SPExportSettings 对象中的其他选项需要跟着调整:

    SPExportSettings settings = new SPExportSettings();
    settings.FileLocation = @"c:\export";
    settings.FileCompression = true;
    settings.FileMaxSize = 10; // defines the maximum filesize as 10 MB
    settings.BaseFileName = "ExportedItems.cmp";
    ... 

    这里是对两个属性的解释:

    • FileCompression - 这个属性定义了内容是否应该被压缩到一个CAB文件中. 如果你需要存储exported的内容或者需要转移它到另一台机器上, 你就应该选择压缩. 如果你export内容后马上就要import到相同的机器, 那么你就没必要指定压缩选项了, 因为这样操作速度会明显地加快.

    • FileLocation - 这个属性定义了在哪里存放export了的文件. 如果使用了压缩, 那么它就定义了生成的压缩的content migration pack(CMP)文件的包位置了.

    • FileMaxSize -  这个属性定义了创建的content migration pack文件的最大尺寸.

    • BaseFileName - 这个属性仅在开启了压缩的时候才用得上. 它定义了压缩了的content migration pack 文件的名字. 默认的后缀(如果没有指定的话), 是"cmp". 如果超过了文件尺寸的最大值, 一个新的文件会在BaseFileName 的基础上生成, 后面带一个整形数值. 举个例子: 根据上面的配置, 下一个文件应该是ExportedItems1.cmp

    5) Incremental Export

    ---------------------------------------------------------

    如果要完成incremental的export的话, 那么你就需要保存上一次成功的incremental export的Change Token. 这个change token需要提供给ExportSettings 对象, 让Content Deployment and Migration API去决定哪些Item已经修改了.

     

    嗯, 前一次export的change tokey可以通过下面的的代码来获取:

    SPExportSettings settings = new SPExportSettings();
    ...
     
    SPExport export = new SPExport(settings);
    export.Run(); 
     
    string ChangeToken = settings.CurrentChangeToken;  

     

    解释:

    • CurrentChangeToken - 这个属性是一个在export过程中的只读参数. 它包含了刚刚完成export后的change token. 所以, 在以后的incremental export中提供这个change token会export在change token生成之后的所有scope内的, 新创建的, 新修改的, 新删除的对象.

    要使用这个change token来开启一次新的incremental export的话, 可以使用下面的代码:

    SPExportSettings settings = new SPExportSettings(); 
    
    settings.ExportMethod = SPExportMethodType.ExportChanges;
    settings.ExportChangeToken = oldChangeToken;
    
    ...  

     

    解释:

    • ExportMethod - 这个属性允许定义是否执行一个incremental export(值是ExportChanges), 或者export所有的东西(值是ExportAll). 注意, ExportChanges 会要求你在另一个分开的属性中提供一个Export Change Token.

    • ExportChangeToken - 这个属性定义了使用incremental deployment要export哪些items. Incremental export仅仅会输出在change token生成之后的所有scope内的, 新创建的, 新修改的, 新删除的对象.

    摘译自:

    Deep Dive into the SharePoint Content Deployment and Migration API - Part 2

    http://blogs.technet.com/stefan_gossner/archive/2007/08/29/deep-dive-into-the-sharepoint-content-deployment-and-migration-api-part-2.aspx

  • 相关阅读:
    react常用的方法
    react手动搭建
    js基础
    原生JavaScript实例之简单放大镜
    ||与&&的返回值
    promise简单小结
    连接服务器一般步骤
    github小总结
    __proto__指向问题
    一些函数返回值
  • 原文地址:https://www.cnblogs.com/awpatp/p/1671538.html
Copyright © 2011-2022 走看看