内容部署和迁移API不导入不抛出错误
-
09-12-2019 - |
题
以下内容 http://blogs.technet.com/b/stefan_gossner/archive/2007/08/30/deep-dive-into-the-sharepoint-content-deployment-and-migration-api-part-4.aspx 提供follwoinf代码,以使用内容部署和迁移API导入和导出项目。
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Deployment;
namespace WssOMtest
{
class Program
{
static void Main(string[] args)
{
// export
SPSite site = new SPSite("http://localhost:4000");
SPWeb web = site.OpenWeb("/");
SPList list = web.Lists["MyList"];
SPListItem listItem = list.Items[0];
SPExportObject exportObject = new SPExportObject();
exportObject.Id = listItem.UniqueId;
exportObject.Type = SPDeploymentObjectType.ListItem;
SPExportSettings exportSettings = new SPExportSettings();
exportSettings.ExportObjects.Add(exportObject);
exportSettings.FileLocation = @"c:\export\CopyListItem";
exportSettings.FileCompression = false;
exportSettings.SiteUrl = "http://localhost:4000";
SPExport export = new SPExport(exportSettings);
export.Run();
web.Dispose();
// import
SPImportSettings importSettings = new SPImportSettings();
importSettings.SiteUrl = "http://localhost:4000";
importSettings.FileLocation = @"c:\export\CopyListItem";
importSettings.FileCompression = false;
importSettings.RetainObjectIdentity = false;
SPImport import = new SPImport(importSettings);
EventHandler<SPDeploymentEventArgs> startedEventHandler = new EventHandler<SPDeploymentEventArgs>(OnStarted);
import.Started += startedEventHandler;
import.Run();
// cleanup
site.Dispose();
}
// event handler to assign a new parent to the orphaned image in the package
static void OnStarted(object sender, SPDeploymentEventArgs args)
{
SPSite site = new SPSite("http://localhost:4000");
SPWeb web = site.OpenWeb("/PressReleases");
SPList list = web.Lists["TargetList"];
SPImportObjectCollection rootObjects = args.RootObjects;
foreach (SPImportObject io in rootObjects)
{
io.TargetParentUrl = list.RootFolder.ServerRelativeUrl;
}
web.Dispose();
site.Dispose();
}
}
}
好的,太好了。我已经改变了seetings,所以它使用我的列表名称和我的网站url。出口很好.导入不起作用.我正在文档lib上执行代码。不会抛出任何错误,但内容项未更改列表。
可能出了什么问题?即使我在导出后删除原始项目,然后在不更改父列表的情况下进行导入,也不会发生任何事情。
解决方案
我已经测试了你的代码,发现问题是在导出过程中创建的文件没有在本地磁盘上正确清理。我实现了文件删除逻辑,以确保导出和导入工作正常。注意,我运行了有和没有的导出和导入 FileCompression
两者都工作正常。我在两个图片库上运行了我的测试。
对不起,我没有太多时间来改进你的代码。正确处理SPWeb和SPSite对象。希望你会自己做。
更新后的代码粘贴在下面:
class Program
{
static void Main(string[] args)
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
// implementation details omitted
SPSite site = new SPSite("http://mylocaldev/");
SPWeb web = site.OpenWeb("/");
SPList list = web.Lists["ParentPic"];
SPListItem listItem = list.Items[0];
try
{
//delete the old files
DirectoryInfo dir = new DirectoryInfo(@"c:\export\CopyListItem");
foreach (System.IO.FileInfo file in dir.GetFiles()) file.Delete();
// export
SPExportObject exportObject = new SPExportObject();
exportObject.Id = listItem.UniqueId;
exportObject.Type = SPDeploymentObjectType.ListItem;
SPExportSettings exportSettings = new SPExportSettings();
exportSettings.ExportObjects.Add(exportObject);
exportSettings.FileLocation = @"c:\export\CopyListItem";
exportSettings.FileCompression = false;
//exportSettings.BaseFileName = "exportfile.cmp";
exportSettings.SiteUrl = "http://mylocaldev/";
SPExport export = new SPExport(exportSettings);
export.Run();
}
catch (Exception ex)
{
}
finally { web.Dispose();}
// import
SPImportSettings importSettings = new SPImportSettings();
importSettings.SiteUrl = "http://mylocaldev/";
importSettings.FileLocation = @"c:\export\CopyListItem";
importSettings.FileCompression = false;
//importSettings.BaseFileName = "exportfile.cmp";
importSettings.RetainObjectIdentity = false;
SPImport import = new SPImport(importSettings);
EventHandler<SPDeploymentEventArgs> startedEventHandler = new EventHandler<SPDeploymentEventArgs>(OnStarted);
import.Started += startedEventHandler;
import.Run();
// cleanup
site.Dispose();
});
}
// event handler to assign a new parent to the orphaned image in the package
static void OnStarted(object sender, SPDeploymentEventArgs args)
{
SPSite site = new SPSite("http://mylocaldev/");
SPWeb web = site.OpenWeb("/");
SPList list = web.Lists["ChildPic"];
SPImportObjectCollection rootObjects = args.RootObjects;
foreach (SPImportObject io in rootObjects)
{
io.TargetParentUrl = list.RootFolder.ServerRelativeUrl;
}
web.Dispose();
site.Dispose();
}
}
其他提示
幸运的是,在几天之前,我正在研究类似的任务。
我尝试过您的代码。几乎是它的工作。
但我同意@falak,你应该用正确的尝试/ catch和sharepoint标准编码模式编写代码。
这里,我发现一旦你的代码应该完全运行,第二次你应该得到错误,因为你没有清理你的文件位置文件夹哪一个:“ c:\ export \Copylistitem “。
这可能对您有所帮助。