Nella versione 3.0 di Windows SharePoint Services sono state introdotte delle particolari API utili al deployment e alla migrazione dei contenuti tra siti SharePoint (anche di farm differenti, in quanto il processo di esportazione e importazione dei contenuti si basa sulla creazione di file fisici sul file system).
Queste API vengono utilizzare da SharePoint stesso in tutti questi ambiti:

  • operazioni di export e import nell'utility STSADM
  • tool di migrazione da MCMS 2002
  • operazioni di muovi e copia nell'utility Site Manager
  • utilizzo delle "variations"
Inserendo la referenza alla libreria Microsoft.SharePoint.dll ed utilizzando le classi del namespace Microsoft.SharePoint.Deployment abbiamo la possibilità di utilizzare queste funzionalità all'interno delle nostre applicazione custom e di effettuare operazioni di deployment o migrazioni di dati personalizzate.
Le classi cui dobbiamo far riferimento sono le seguenti:
  • SPExport - controlla il processo di esportazione dei contenuti
  • SPExportSettings - utilizzata per configurare il processo di esportazione dei contenuti
  • SPImport - controlla il processo di importazione dei contenuti
  • SPImportSettings - utilizzata per configurare il processo di importazione dei contenuti
Come usare queste classi, per esempio, per spostare un sito SharePoint da una web applicatinon all'altra ? Ecco qua:

SPSite sourceSite = new SPSite("http://SharePoint:81/");

using (sourceSite)
{
SPWeb sourceWeb = sourceSite.OpenWeb("/SiteToMove/");
using (sourceWeb)
{
SPExportObject exportObject = new SPExportObject();
exportObject.Id = sourceWeb.ID;
exportObject.IncludeDescendants = SPIncludeDescendants.All;
exportObject.Type = SPDeploymentObjectType.Web;

SPExportSettings exportSettings = new SPExportSettings();
exportSettings.SiteUrl = "http://SharePoint:81/";
exportSettings.ExportMethod = SPExportMethodType.ExportAll;
exportSettings.FileLocation = @"C:\export";
exportSettings.FileCompression = false;
exportSettings.ExcludeDependencies = false;
exportSettings.IncludeSecurity = SPIncludeSecurity.All;
exportSettings.ExportObjects.Add(exportObject);

SPExport export = new SPExport(exportSettings);
export.Run();
}
}
Console.WriteLine("Export completato");

SPSite destinationSite = new SPSite("http://SharePoint:82/");
using (destinationSite)
{
SPWebApplication webApp = destinationSite.WebApplication;

webApp.FormDigestSettings.Enabled = false;

SPImportSettings importSettings = new SPImportSettings();
importSettings.SiteUrl = "http://SharePoint:82/";
importSettings.WebUrl = "http://SharePoint:82/";
importSettings.LogFilePath = Path.Combine(Environment.CurrentDirectory, "log.txt");
importSettings.FileLocation = @"C:\export";
importSettings.FileCompression = false;
importSettings.RetainObjectIdentity = true;
importSettings.CommandLineVerbose = true;
importSettings.IncludeSecurity = SPIncludeSecurity.All;
importSettings.UserInfoDateTime = SPImportUserInfoDateTimeOption.ImportAll;

SPImport import = new SPImport(importSettings);
import.Run();

webApp.FormDigestSettings.Enabled = true;
}
Console.WriteLine("Import completato");

Da questo esempio, possiamo vedere che abbiamo la possibilità di decidere se esportare e importare i permessi utente o se tralasciarli (valorizzando la proprietà IncludeSecurity), possiamo decidere se comprimere o meno i file di esportazione (valorizzando la proprietà FileCompression) e di mantenere o meno gli identificativi di partenza per ogni oggetto che stiamo per migrare (valorizzando la proprietà RetainObjectIdentity).
Infine, abilitando la visualizzazione dei log in modalità verbosa, possiamo vedere tutto ciò che non è stato importato, eventuali warning e tutti i contenuti che invece sono stati correttamente importati.

E' sempre tramite queste API che sono stati sviluppati la maggiorparte dei prodotti di amministrazione di SharePoint tutt'ora in commercio.