Dans le guide des "bonnes pratiques de développement SharePoint", il est recommandé de déployer tous les développements via Packages & Features. Quand je parle de "tous les développements" je parle de tout, y compris des types de contenu personnalisés.
Ceux qui se sont aventuré dans le développement d'un type de contenu "à la mano" se sont vite cassé les dents dans la rédaction du fichier XML. En général, on crée un nouveau type de contenu via Web, puis on crée une application console dans laquelle, on ajoute le code suivant :
1: using (SPSite site = new SPSite("http://SHAREPOINT")) 2: { 3: SPWeb web = site.RootWeb;
4: Console.WriteLine(web.AvailableContentTypes["My Content Type Personnalisé"].SchemaXML;
5: }
Ces quelques lignes de code vont nous permettre de récupérer notre type de contenu (grâce à la propriété SchemaXML). Enfin, on développe la feature qui va nous permettre de mettre à disposition ce nouveau type de contenu.
Ok, maintenant, nous allons la jouer "plus moderne" et utiliser PowerShell. Je vous invite à vous reporter dans un premier temps aux articles de Fabrice Romelard autour de PowerShell et à ce SharePoint & Power Shell Quick Start très intéressant.
Je vais donc assumer que vous avez dans votre profile PowerShell au moins les lignes suivantes:
1: # Chargement de l'assembly the Microsoft.SharePoint.dll
2: [System.Reflection.Assembly]::LoadFrom("${env:CommonProgramFiles}\Microsoft Shared\web server extensions\12\
ISAPI\Microsoft.SharePoint.dll")
3:
4: # Renvoie le SPWeb de l'url fournie en paramètre
5: function get-spweb ([String]$webUrl=$(throw 'Parametre -webUrl manquant!'))
6: { 7: $site = New-Object -TypeName "Microsoft.SharePoint.SPSite" -ArgumentList "$webUrl";
8: return $site.OpenWeb();
9: }
Ces commandes sont issues de IloveSharePoint
D'abord on ajoute la référence à la dll SharePoint principale (en la plaçant justement dans le profile PowerShell, cette référence sera toujours présente). Puis on ajoute une fonction globale qui va nous renvoyer l'instance du SPWeb à partir d'une URL passée en paramètre.
Revenons à nos moutons. Je crée mon type de contenu personnalisé via Web. Une fois terminé, j'ouvre une console PowerShell et je tape :
1: PS C:\Users\Administrator> $web = get-spweb http://SHAREPOINT
2: PS C:\Users\Administrator> $web.AvailableContentTypes["My Content Type"].SchemaXML >> c:\MyContentType.xml
En deux lignes, je récupère la description de mon type de contenu, qui sera sauvegardée sur la partition "C". Je n'ai plus qu'à packager tout ça ... [bon ok, il faudra rajouter quand même un $web.Dispose() pour être clean]
Je sens que je vais aimer PowerShell :-)