in

didierdanse.net

Site personnel de Didier Danse
Didier Danse's Personnal Website
Microsoft Most Valuable Professional SharePoint

This Blog

Syndication

didierdanse.net - Les news Developpement

August 2008 - Posts

  • SharePoint: Introduction à la Content Migration API

    La Content Migration API, voilà une librairie importante de SharePoint et qui s'avère souvent trop peu connue. Comprendre cette API permet de réaliser des opérations de transfert de données d'un environnement SharePoint à un autre et de ce manière efficace. C'est pour cette raison que j'ai décidé de publier un ensemble de posts à ce sujet afin de montrer ce qu'il est possible de faire grâce à cette librairie. Mais commençons par le début et voyons ce qu'est cette API.

    Qu'est ce que la content migration API?

    La Content Migration API permet d'effecuter le transfert de données d'un site SharePoint. Ce transfert peut s'effectuer entre des environnements connectés (éventuellement le même environnement) ou entre des énvironnements totalement déconnectés. 

    Qu'entend-t-on par le terme données? En fait tout (ou presque) ce qu'il est possible de définir via l'interface web de SharePoint, à savoir:

    • Listes
    • Eléments de liste (lists items)
    • Web Parts
    • Page customisées
    • Pages maîtres (master pages)
    • Types de contenu (content types)
    • CSS
    • Page layouts
    • Colonnes de sites
    • Images référencées dans des pages
    • ...

    Ne font pas partie des données qui peuvent être transportées par la Content Migration API et définis via l'interface web de SharePoint:

    • Alertes
    • Statuts Check in/Check out
    • Eléments de la corbeille
    • Statuts des Workflows
    • Logs des modifications

    On notera également que les éléments suivants ne sont également pas pris en compte lors de l'export:

    • Features
    • Workflows personnalisés
    • Solutions

    La raison pour laquelle les features et les workflows personnalisés ne peuvent être exportés est qu'ils se trouvent dans le système de fichiers et non pas dans la base de données comme pour les autres éléments. Si on devait résumer ceci, on dirait que tout ce qui résulte d'un développement ou d'une customisation (ajouter une liste n'est pas pour moi une customisation ;-) ), et donc déployable via les solutions, doivent être déployés en suivant les principes courants, en utilisant par exemple STSADM.

    Le transfert de données d'un site à l'autre se fait en trois étapes:

    1. Export: Choix des éléments à exporter et génération d'un ensemble de fichiers contenant les données;
    2. Transport: Les fichiers générés doivent être placés afin d'être accessibles lors d'opérations vers l'environnement cible. Le transport peut se faire par n'importe quel moyen (FTP, clé USB, ...) puisqu'il s'agit de simples fichiers;
    3. Import: Sur base des fichiers générés et mis à disposition, l'import peut se faire dans l'environnement cible.

    Les fichiers intermédiaires étant basés sur une structure de fichiers connue (voir Content Migration XML Schema Reference), il est possible de générer ces fichiers de données depuis une application tierce et ce afin de faciliter l'import d'information provenant d'un autre système d'information.

    Par quelles fonctionnalités SharePoint utilise-t-il la C.M. API?

    Il ne s'agit pas d'une liste exhaustive loin de là mais un aperçu des fonctionnalités utilisées régulièrement et pour lesquelles on ne soupçone pas toujours l'utilisation de l'API.

    Copier / Déplacer depuis les menus de gestion du contenu et de structure 

    image

    Pour faire simple, quelles sont les opérations qui sont effectuées lorsque l'on veut copier un site? On pourrait penser qu'il y a une boucle pour réaliser une copie du site source vers le site cible (la copie devant se faire dans le même site collection, le site source et le site destination sont d'office connectés entre eux) mais il n'en est rien. Il s'agit de la suite d'actions désormais si bien connue:

    • Export: vers le système de fichiers local;
    • (Transport: non nécessaire dans ce cas puisque la cible et la destination se trouve sur le même serveur; )
    • Import: vers un nouveau site SharePoint.

    On notera que lors de la copie d'un site vers un autre à l'aide de cette fonctionnalité, la sécurité du site n'est pas dupliquée. Nous comprendrons pourquoi très bientôt. N'oubliez donc pas de réappliquer vos règles de sécurité.

    STSADM

    STSADM, que certains nomment Super admin tool, est un outil utilisable en ligne de commande fourni avec SharePoint qui permet d'effectuer un ensemble considérable d'opérations autour de SharePoint. Si vous ne connaissez pas encore les possibilités (et les limites) de cet outil, foncez sur votre moteur de recherche préféré et faites une petite recherche à ce sujet... en attendant que je poste à ce sujet :))

    image

    Comme à l'accoutumée, comment peut-on copier des données d'un site à l'autre à l'aide de STSADM? En suivant nos éternelles trois étapes bien entendu:

    • Export: du site source vers un fichier (compressé dans l'exemple ci-dessous)

    stsadm -o export -url http://monserveur/monsitesource -filename "c:\un repertoire\content.cmp"

    Un rapide aperçu des options liées à la sélection des éléments à exporter de cette fonctionnalité de STSADM:

    stsadm.exe -o export
               -url <URL du site à exporter>
               -filename <Chemin vers le fichier ou le répertoire intermédiaire>
               [-includeusersecurity]
               [-versions <1-4>
                   1 - Dernière version majeure des fichiers et des list items (valeur par défaut)
                   2 - Version courante, qu'elle soit mineure ou majeure
                   3 - Dernière version majeure et dernière version mineure des fichiers et des lists items
                   4 - Toutes les versions]

    Au vu des propriétés, on se rend rapidement compte qu'il n'est possible d'exporter que des sites complets.

    • Transport des fichiers: A vous de choisir ce qui vous convient le mieux. Tous les chemins mènent au serveur de destination ;-);
    • Import: d'un fichier (compressé dans l'exemple ci-dessous) vers le site cible

    stsadm -o import -url http://monserveur/monsitecible -filename "c:\un repertoire\content.cmp"

    Un petit tour du côté des options liées à la manière d'importer les éléments:

    stsadm.exe -o import
               -url <URL du site dans lequel importer les données>
               -filename <Chemin vers le fichier ou le répertoire intermédiaire>
               [-includeusersecurity]
               [-updateversions <1-3>
                   1 - Ajoute de nouvelles versions au fichier (valeur par défaut)
                   2 - Remplace le fichier et ses versions (suppression avant insertion)
                   3 - Ignore le fichier si il est déjà existant sur la destination]

    On notera qu'il existe d'autres propriétés/options liées aux fichiers générés (compression ou non, ...) qui sont certes importantes mais sont moins parlantes que celles qui nous intéresse ici.

    Web Services

    Le WebService Sites, disponible à l'adresse http://<Site>/_vti_bin/Sites.asmx, permet d'effectuer des exports et des imports de données. Comme pour STSADM, le niveau le plus bas qu'il est possible d'exporter est le site.

    image  image

    Gestion de contenu web

    Le Web Content Management, que l'on retrouve au travers des publishing sites suit la même procédure en ce qui concerne la publication d'information sur un site particulier. La source et la destination étant directement connecté, il n'y a ainsi que les opérations d'export et d'import qui sont effectuées. L'export se fait sur un  sous-ensemble de données, à savoir uniquement celles-qui doivent être publiées. Cette opération de filtre des données à exporter se nomme l'export sélectif.

    Pourquoi utiliser la Content Migration API?

    Export sélectif

    Que ce soit les web services ou STSADM, il n'est pas possible, nous l'avons vu, de réaliser un export de données d'un niveau plus bas que le site. Ce n'est cependant qu'une limite de l'outil et non pas de la Content Migration API puisque dans le cas du Web Content Management, l'API est utilisée pour exporter un sous-ensemble de données. Ainsi, seuls les éléments de liste qui ont été ajoutés ou mis à jour depuis une date donnée sont exportées afin de permettre une réplication d'un site à un autre.

    Utilisant la même API, nous pouvons effectuer la même opération et sélectionner les éléments à exporter. Nous verrons dans un prochain post que cela peut avoir plusieurs utilités. Bien entendu, les premiers intérêts que l'on peut trouver sont la publication d'éléments et la réplication de données d'un site vers un autre.

    Dans un prochain post, nous verrons comment effectuer un export sélectif du point de vue développement. Nous nous rendrons rapidement compte qu'il est aisé d'implémenter sa propre logique pour la sélection des données.

    Maintien des identifiants des éléments d'un site

    Dans certains cas, il est important de préserver les identifiants d'un site à l'autre. On retrouve cette nécessité lors d'un export sélectif (pour savoir quel élément mettre à jour) mais aussi si un webpart référence une liste via son identifiant, il est nécessaire de retrouver le même identifiant pour cette dite liste.

    Nous verrons que dans certains cas, le maintien des identifiants n'est pas nécessaire et que pire que ça, cela peut poser parfois des problèmes. Effectivement, toutes les données sont stockées en base de données. Le GUID (identifiant unique) est utilisé comme clé primaire au sein de cette base. Le principe d'une clé primaire est d'interdire les doublons. Or que se passe-t-il si vous importez un package vers deux sites différents en maintenant les identifiants? Vous dupliquez les identifiants.

    Les packages de migration de données

    De quoi est composé un package de migration de données?

    Pour qu'une migration de données soit effective, il est nécessaire que tous les éléments nécessaires soient présents sur le serveur source. Un package de migration de données contient donc, en plus des données proprement dit, un ensemble de fichiers dans lesquels sont stockés les informations sur les éléments requis ou encore ceux à importer (groupes et utilisateurs pour la partie sécurité par exemple).

    Succintement, le package est formé des fichiers suivants:

    image

    • Manifest.xml: est le fichier de base lors de toute migration;
    • Requirements.xml: contient la liste des éléments requis par le contenu à migrer. La vérification de l'existence de ces ressources se fait préalablement à toute migration de données;
    • ExportSettings.xml: contient la logique utilisée lors de l'export pour vérifier que tous les éléments attendus dans le package soient présents;
    • RootObjectMap.xml: contient l'élément de plus haut niveau à importer;
    • SystemData.xml: utilisé principalement lorsque l'on maintient les identifiants, il contient l'ensemble des éléments installés et requis sur le serveur. En cas d'absence de l'un ou plusieurs de ces éléments arrêtent l'import;
    • UserGroup.xml: contient les informations provenant du site d'origine concernant les utilisateurs et les groupes SharePoint utilisés dans le site;
    • LookupListMap.xml: contient les liens entre items liés (c'est à dire utilisés dans les champs lookup);
    • ViewFormsList.xml: contient la liste des Web Parts en indiquant si il s'agit de vues ou de formulaires;
    • fichiers .dat: contiennent les données proprements dites.

    Il existe un outil très utile pour parcourir le Content Migration Package Explorer: http://blogs.msdn.com/ronalus/archive/2007/10/02/content-migration-package-explorer.aspx

    image

    Sous quel format peut être le package?

    Deux possibilités s'offrent à nous pour stocker l'ensemble des fichiers précédemment cité:

    • Fichier Compressé: théoriquement avec une extension .cmp, il s'agit de l'option par défaut lors d'un export;
    • Répertoire: les fichiers sont situés dans un répertoire unique.

    Le premier a l'avantage de rassembler tous les fichiers nécessaires au sein d'un seul et même fichier, qui plus est, compressé. L'inconvénient est que cette compression est couteuse en temps et nécessite de disposer sur disque de deux fois la taille du package. Notez que pour de gros packages, une erreur peut survenir durant la compression, arrêtant l'export en cours.

    Dans le second cas, il est important de faire attention à bien transférer tous les fichiers d'un environnement source vers l'environnement cible.

    Peut-on modifier un package de migration de données?

    Bien entendu! Comme nous l'avons vu précédemment la référence au sujet de la syntaxe de ces fichiers est fournie. Nous verrons d'ailleurs comment utiliser la Content Migration API (et surtout comment modifier les fichiers intermédiaire) il est possible d'effectuer des opérations qui ne sont pas possibles Out-of-the-box, par exemple passer d'un template en français à un template en anglais et inversément.

    Pour faciliter les modifications, il est conseillé d'utiliser des fichiers non compressés.

    Conclusion

    Désormais, nous avons une connaissance suffisante de la Content Migration API afin de passer à la réalisation d'exemples concrets. 

    Dans un prochain post, je présenterai au travers d'un poste le développement d'une application permettant d'effectuer des exports ainsi que des imports de sites ou d'un ensemble quelconque d'informations provenant de sites SharePoint. Nous verrons également comment utiliser la C.M. API pour permettre de changer le parent d'un élément exporté.

    Plus tard, nous verrons également comment réaliser des exports incrémentals de données, utilisés lors de la réplication par exemple.

    Enfin, après voir vu comment développer des outils utilisant ces fonctionnalités nous verrons comment les utiliser à bon escient pour réaliser des opérations qui pourraient s'avèrer complexes sans ceux-ci.

More Posts
L'auteur du site ne peut être tenu responsable des dommages que les informations fournies pourraient entraîner. Tout est cependant mis en oeuvre pour éviter tout désagrément.
Powered by Community Server (Non-Commercial Edition), by Telligent Systems