Une des tâches qui peut vous être demandée lorsque vous travaillez avec SharePoint est de déplacer du contenu (ie : Collection de Sites, Sites, Listes, Documents, etc ...) d'un endroit à un autre pour en faire une copie de sauvegarde ou pour déplacer un site, etc.
A priori, ce n'est pas très difficile mais c'est comme tout, c'est toujours simple quand on sait à l'avance comment résoudre le problème avant même qu'on vous le demande :)
Alors voila un petit récapitulatif (non exhaustif), histoire de vous aider à savoir où vous mettez les pieds.
Backup et Restore
Utile pour toute la gestion des sauvegardes dans SharePoint, vous pouvez aussi l'utiliser pour déplacer des collections de site. Attention, les workflows, alertes, la poubelle et notamment les propriétés stockées au niveau de la collection de sites ne sont pas sauvegardées.
Vous pouvez "backup/restore" via l'interface d'administration de SharePoint, STSADM et SharePoint Designer.
Surtout n'oubliez pas de supprimer dans SharePoint le contenu sauvegardé, avant de le restaurer dans votre ferme, sinon votre déplacement ne fonctionnera pas.
Package Web
Utilisez cette fonctionnalité pour partager ou réutiliser des pages Web ou une structure de site, de liste ou de bibliothèque. Les packages Web peuvent s'appliquer à l'intégralité du site ou à des pages, listes ou bibliothèques spécifiques. Ils permettent de copier aisément la structure du site mais ne peuvent pas inclure des données de liste, des sous-sites ou des paramètres de sécurité et de permission. En revanche, un package Web peut inclure des barres de liens personnalisées. Une fois le package créé, vous pouvez importer et déployer le fichier dans tous les sites Web que vous voulez (Description de Microsoft).
Plus d'informations sur Exporter ou importer un package Web
Modèle Objet
Si vous souhaitez vraiment maitriser le processus de migration de contenu ou si vous souhaitez choisir quel contenu d'un site va etre copier (uniquement les élements de liste dont le nom commence par Winwise par exemple) alors il va falloir mettre vos mains dans le cambouis et utiliser l'API pour récupérer les informations nécessaires. Quelque chose dans ce style (de Sahil Malik) :
private void CopyFolderRecursive(
SPFolder folder, SPWeb web, SPList sourceList,
string destinationUrl, SPList destinationList)
{
SPQuery qry = new SPQuery();
qry.Folder = folder;
SPListItemCollection ic = sourceList.GetItems(qry);
SPListItem destinationItem = null;
foreach (SPListItem sourceItem in ic)
{
if (sourceItem.FileSystemObjectType != SPFileSystemObjectType.Folder)
{
destinationItem = destinationList.Items.Add(
destinationUrl + "/" + folder.Url,
sourceItem.FileSystemObjectType);
foreach (SPField destinationField in destinationList.Fields)
{
if ((!destinationField.ReadOnlyField) &&
(destinationField.Type != SPFieldType.Attachments))
{
destinationItem[destinationField.Title] =
sourceItem[destinationField.Title];
}
}
destinationItem.Update();
}
else
{
destinationItem = destinationList.Items.Add(
destinationUrl + "/" + folder.Url,
SPFileSystemObjectType.Folder);
destinationItem["Title"] = sourceItem.Title;
destinationItem.Update();
}
if (sourceItem.Folder != null)
CopyFolderRecursive(
sourceItem.Folder, web, sourceList,
destinationUrl, destinationList);
}
}
Dans le prochain post, j'aborderai d'autres façons de déplacer du contenu SharePoint comme le "Copier Coller", l'utilisation de modèle de site et les commandes Export/Import de l'outil STSADM.
<Philippe/>