콘텐츠 배포 및 마이그레이션 API 가져 오지 않음 오류 없음
-
09-12-2019 - |
문제
다음 http://blogs.technet.com/b/stefan_gossner/archive/2007/08/30/deep-dive-into-the-sharepoint-content-deployment-및 이주 -PI-PART-4.ASPX FOLWOINF 코드를 제공하여 콘텐츠 배포 및 마이그레이션 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();
}
}
}
.
좋아.나는 내 목록 이름과 내 사이트 URL을 사용하도록 서식을 변경했습니다.수출은 훌륭한 일이 일하고 있습니다.가져 오기가 작동하지 않습니다.문서 lib에서 코드를 수행하고 있습니다.오류가 발생하지만 콘텐츠 항목이 목록을 변경하지 않습니다.
무엇이 잘못 될 수 있었습니까?내보내기 후 Orginal 항목을 삭제 한 경우에도 상위 목록을 변경하지 않고 가져 오기가 발생하지 않고 가져 오기가 없습니다.
해결책
코드를 테스트했으며 내보내기 중에 생성되는 파일이 로컬 디스크에서 올바르게 정리되지 않았습니다.내보내기 및 가져 오기가 잘 작동하도록 파일 삭제 논리를 구현했습니다.참고, 나는 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에 동의하고 있으며, 적절한 시도 / 캐치 및 SharePoint 표준 코딩 패턴으로 코드를 작성해야한다는 것에 동의합니다.
여기서, 코드가 파일 위치 폴더 을 청소하지 않기 때문에 코드가 완벽하게 실행되어야합니다.copylistitem ".
이것은 당신에게 도움이 될 수 있습니다.