Après le précédent post sur l'activation de features et les ActivationDependencies, je voulais vous parler d'un manière très personnelle de créer des Fields et ContentTypes (en français : colonnes de sites et types de contenu).
Comme vous le savez sans doute, il existe plusieurs possibilités pour créer ce genre de composants SharePoint :
- Via l'interface sharepoint : Facile à faire mais a l'inconvénient de devoir être fait sur l'environnement de destination, ce qui requiert des manipulations manuelle et chronophage.
- Via le modèle objet en utilisant des FeatureReceiver : On se retrouve dans l'environnement de prédilection du développeur mais requiert beaucoup de plomberie pour pas grand chose au final.
- Via les fichier XML : Facilement packageable mais sujet à des erreurs de typos.
Souvent dans le contexte du développement d'application SharePoint et du packaging qui va avec, on va avoir tendance à préférer les deux dernières options en choisissant en fonction de votre préférence.
Pour ma part j'utilise un mix des trois :). J'espère vous convaincre de l'intérêt de ma méthode.
Création des Fields et ContentType via l'interface SharePoint
Tout commence sur votre VPC SharePoint en accèdant à l'interface d'administation :
Il vous suffit de créer les champs qui vous intéressent, en précisant vos configuration pour chaque champs :
Dans mon cas, j'ai crée 4 champs : Catégorie, Choix, Question, Réponses. Une petite précision cependanta, Catégorie est un champ de recherche pointant sur le titre des éléments contenus dans une liste Catégorie crée précédemment.
Je n'ai plus qu'à créé mon type de contenu en configurant l'ordre de mes champs, leur état (obligatoire, optionnel, masqué), etc... :
C'est vrai que c'est vraiment rapide avec l'interface SharePoint, peut être 10 mn au maximum alors qu'il m'en aurait fallu bien plus avec les deux autres options
Export des Fields et ContentTypes
Le problème est que je souhaiterais packager le tout dans une ou plusieurs feature, "histoire de faire les choses proprement" et de les intégrer à ma Solution (fichier wsp).
Pour ce faire, je vais utiliser quelques outils/projets développée par la communauté qui vont me permettre d'exporter tout ce que je vient de faire sous la forme de plusieurs fichiers XML.
L'outil en question se nomme Fields Explorer : http://www.codeplex.com/tmt/Release/ProjectReleases.aspx?ReleaseId=17330 et vous pourrez le trouvez sur Codeplex comme d'habitude :)
PS : Pour ceux qui se demandent pourquoi j'ai plusieurs champs Question lorsque je fais un export, je vous raconterais ça dans un autre post.
Une fois tout ces fichiers XML récupérés, il ne me reste plus qu'à organiser un peu tout ça, retravailler rapidement les fichiers pour y intégrer l'utilisation de ressources, mettre des noms internaux "pratiques" (sans espaces), etc.. Quelque chose qui ressemblerait à ça dans votre Visual Studio.
Il ne nous reste plus qu'à packager ça gràce à WSPBuilder (http://codeplex.com/wspbuilder) et le tour est jouer :).
Néanmoins, il nous reste un petit problème... la gestion du champ Catégorie.
En effet, il n'existe pas de moyen simple dans ce contexte de déclarer un champ de Recherche (lookup) en XML. Celui généré par l'outil (qui ne fait qu'exporter la représentation du champ dans SharePoint) ressemble à ça :
0:
1: <Field Type="Lookup" DisplayName="Catégorie" Required="FALSE" List="b23273d2-946b-41e8-81cb-8911dadc2f92" ShowField="Title" Sortable="FALSE" UnlimitedLengthInDocumentLibrary="FALSE" ID="{48b006bf-5e14-43cb-b5cb-9a3dae4f0646}" Group="Demo" StaticName="QuizzCategory" Name="QuizzCategory" SourceID="http://schemas.microsoft.com/sharepoint/v3" xmlns="http://schemas.microsoft.com/sharepoint/" WebId="1483aa7c-a45b-410e-977c-45174ccbce5d" Version="1" />
2:
En traduction pour les non SharePointeurs, ce bout d'XML précise à SharePoint que le champ Catégorie recupère la valeur "Title" de chaque éléments de la liste qui est référencé par le Guid : b23273d2-946b-41e8-81cb-8911dadc2f92 dans le Web référencé par le Guid : 1483aa7c-a45b-410e-977c-45174ccbce5d de la collection courante....
Bref pas très lisible et surtout pas très utilisable quand on sait que lorsqu'on passera sur d'autres environnement (d'intégration, recette et production), le même site SharePoint (même URL, Nom, etc...) sera référencé par un nouveau Guid et c'est la même chose pour les listes.
Bref, comment faire ? Et bien, on verra ça dans le prochain post :)
<Phil/>