The export/import method provides the flexibility to migrate a site/sub-site from one web application to another web application (in a different content database) within a farm. It also provides the flexibility to export a sub-site and import it as a root site-collection in another web application. In this post I’d be discussing about how to programmatically migrate SharePoint sites using Content Migration APIs.
Code to export a site
string sourceSiteURL = "Your site url";//site to be exported SPExportObject exportObject = "Path where you site to be exported"; string folderPath = "folder path"; using (SPSite sourceSite = new SPSite(sourceSiteURL)) { using (SPWeb sourceWeb = sourceSite.OpenWeb()) { //Create the Export Setting object and update the setting properties. SPExportSettings settings = new SPExportSettings(); settings.SiteUrl = sourceWeb.Url; settings.ExportMethod = SPExportMethodType.ExportAll; settings.BaseFileName = EXPORT_FILENAME; // "export.cmp"; settings.FileLocation = "provide file location"; settings.LogFilePath = @folderPath + LOG_FILENAME; // "LogFile.log"; settings.IncludeSecurity = SPIncludeSecurity.All; setExcludeDependencies(migrationSettings, settings); settings.OverwriteExistingDataFile = true; settings.CommandLineVerbose = true; settings.FileMaxSize = 1024; settings.FileCompression = true; // Add the Export object to the ExportSetting Object settings.ExportObjects.Add(exportObject); // add the Export Settings to the SPExport object and Run the Export . SPExport export = new SPExport(settings); export.Run(); LogAll.logTextWriting(true, ServerConstant.exportSuccessfully); isExportCompleted = true; } }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
Code to import a site
// Get the Site collection Url from the config file. using (SPSite rootSiteColl = new SPSite(destinationSiteURL)) { SPWebApplication webApp = rootSiteColl.WebApplication; rootSiteColl.AllowUnsafeUpdates = true; using (SPWeb rootWeb = rootSiteColl.OpenWeb()) { // Package import System.Uri siteURL = new Uri(destinationSiteURL); string baseDataFileName = EXPORT_FILENAME; // "export.cmp"; string dataFileLocation = @folderPath; string logFileLocation = @folderPath + LOG_FILENAME; // "LogFile.log"; SPImportSettings importSettings = new SPImportSettings(siteURL, dataFileLocation, baseDataFileName); importSettings.IncludeSecurity = SPIncludeSecurity.All; importSettings.RetainObjectIdentity = true; importSettings.CommandLineVerbose = true; importSettings.LogFilePath = logFileLocation; importSettings.WebUrl = destinationSiteURL; importSettings.FileCompression = true; SPImport import = new SPImport(importSettings); import.Run(); rootWeb.AllowUnsafeUpdates = false; webApp.FormDigestSettings.Enabled = true; webApp.FormDigestSettings.Expires = true; rootWeb.Close(); } rootSiteColl.AllowUnsafeUpdates = false; } The power of the import functionality is that we can pick and choose whether to retain the security, versions, object ids etc. The main drawback of this approach
is that it does not preserve workflow instances, workflow associations, history and tasks. Every workflow association must be recreated and there is no way
to restore the running instances from original site. But nonetheless, the export/import has real power or re-arranging the site-hierarchy in the target.
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
Pingback: Migrate SharePoint sites using Content Migration APIs - My experiments with SharePoint, Azure and .NET using Visual Studio