Les types de contenu, de leur utilisation au développement

Dans ce tutoriel, nous allons comprendre l'utilisation de types de contenu, à quoi ils servent et comment les déployer au travers de fonctionnalités.

- Titre : Les types de contenu, de leur utilisation au développement

- Parution : 20 février 2008

- Licence : Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.

Sommaire

- I. Les types de contenu, à quoi ça sert?

- II. Création d'un type de contenu

- II-A. Type de contenu simple

- II-B. Association avec un modèle de document

- II-C. Association avec un workflow

- II-D. Création d'un panneau d'information

- II-E. La notion d'héritage

- II-F. Utiliser son type de contenu dans une bibliothèque

- III. Déploiement d'un type de contenu via une fonctionnalité

- III-A. Création de la fonctionnalité

- III-B. Création des colonnes et du type de contenu

- III-C. Création d'une custom action

- III-D. Installation et déploiement de notre fonctionnalité

- III-E. Résulat de notre travail

- IV. Téléchargement

- V. Conclusion

I - Les types de contenu, à quoi ça sert?

Les types de contenu permettent de donner une nature à nos documents, nos informations stockées au sein de listes et bibliothèques Sharepoint.

Imaginons le cas de figure suivant : vous avez une bibliothèque de documents contenant 10 documents Excel. Parmi ces 10 documents, il y a en réalité 5 commandes fournisseurs et 5 factures fournisseurs. Pour le système, ces documents ne sont ni plus ni moins que des documents Excel génériques.

On va pouvoir donner une nature spécifique à ces documents en passant par les types de contenu. En effet, dans le cas présent, nous pourrions créer un type de contenu "Commande Fournisseur" et un type de contenu "Facture Fournisseur"

Un type de contenu contient généralement des métadonnées (colonnes d'information) et on peut également lui associer un modèle de document à ouvrir, un ou plusieurs workflow(s), une politique d'expiration, un panneau d'information spécifique...

Les métadonnées vont précisément permettre de définir le contenu et vont apporter une structure lors de la création d'un document soumis au type de contenu. On va pouvoir rendre obligatoire certaines métadonnées afin de s'assurer que toutes les informations requises soient bien saisies par le contributeur.

II - Création d'un type de contenu

II-A - Type de contenu simple

Pour illustrer la création d'un type de contenu, nous allons reprendre l'exemple cité en introduction, à savoir, la création du type de contenu Commande Fournisseur

Pour créer le type de contenu, cliquez sur Site Actions => Site Settings, vous arrivez dans les paramètres du site, ensuite cliquez sur Site Content Types

Lorsque vous cliquez sur Site content types, vous obtenez un écran similaire à celui-ci

En fonction du site dans lequel vous vous trouvez, vous pourrez ou non modifier les types de contenu existants. En effet un type de contenu défini au niveau d'un site peut être réutilisé par les sous-sites mais pas modifié par ceux-ci. Il faut naviguer vers le site où le type de contenu a été défini pour pouvoir le modifier/supprimer.

En haut à gauche de l'écran, vous avez le lien Create, cliquez dessus pour créer le type de contenu Commande Fournisseur

Saisissez les mêmes informations qu'illustrées ci-dessous

Vous noterez que l'on crée un nouveau groupe nommé Commandes et qu'on hérite du type de contenu Document, ce qui est logique puisque nos commandes fournisseurs seront "matéralisées" par des documents Excel. Ensuite, cliquez sur Ok pour obenir ceci

La colonne Title est automatiquement créée et n'est pas supprimable, vous pouvez par contre la renommer si vous souhaitez stocker une autre information que le titre.

Vous disposez de deux liens pour créer vos colonnes, Add from existing site columns qui suppose que vous avez préalablement créer vos colonnes de site et Add from new site column qui vous permet de créer la colonne de site dans la foulée.

Note: Une colonne de site représente une colonne d'information exploitable par toutes les bibliothèques et listes Sharepoint se trouvant dans le site où cette colonne a été définie ou dans l'un des sous-sites. L'intérêt de créer une colonne de site est d'éviter de créer les mêmes colonnes de bibliothèque en bibliothèque...On la crée une seule fois à une place centrale et on peut la réutiliser autant de fois que souhaité.

Passons maintenant à la création des colonnes appartenant à notre type de contenu Commande Fournisseur. Pour faire simple, nous allons en créer deux, le but étant de connaître le principe. Nous allons également nous contenter de colonnes basiques.

Cliquez sur le lien Add from new site column, vous obtenez l'écran suivant, saisissez les mêmes informations

Note : Il est évident que dans un contexte réel, vous créeriez probablement une colonne de type Lookup pointant vers une liste de fournisseurs mais comme je l'ai dit, restons-en à des choses simples.

Créez à présent votre colonne Centre de coût comme illustré ci-dessous

Nous avons simplement créé une colonne de type Choice avec deux choix possibles.

Voici donc le résultat final

Note: lors de la création des colonnes, vous avez probablement remarqué qu'il n'était pas possible de les rendre obligatoires, il vous suffit de cliquer sur l'intitulé de la colonne et de la rendre Required

Rendez la colonne Nom Fournisseur obligatoire.

A ce stade, nous avons créé notre type de contenu Commande Fournisseur et ses métadonnées Nom Fournisseur (saisie obligatoire) et Centre de coût (liste de choix, optionnel).

Voyons à présent comment associer un modèle de document à notre type de contenu.

II-B - Association avec un modèle de document

Avant d'associer le modèle de document, il faut le créer. Créez un document excel ou utilisez un document existant pouvant servir à l'encodage d'une commande fournisseur. Voici pour exemple, une capture d'écran du document que j'ai créé.

Lorsque vous l'avez créé, enregistrez-le sur votre disque dur.

Ceci fait, revenez sur l'écran principal de votre type de contenu. Site Actions -> Site Settings -> Site Content Types et ensuite sélectionnez votre type de contenu. Ensuite cliquez sur Advanced Settings. Dans la section Document Template, cliquez sur Upload a new document template et ensuite sur Browse pour sélectionner votre document se trouvant sur votre disque dur. Tout ceci est illustré ci-dessous

Cliquez ensuite sur OK

II-C - Association avec un workflow

A partir de l'écran principal de votre type de contenu et en cliquant sur le lien Workflow Settings, vous verrez que plusieurs workflows sont probablement déjà associés à votre type de contenu. Ceci est dû au fait que vous héritez du type de contenu Document auquel les workflows standards de MOSS 2007 ont été associés.

En général, ces workflows sont mis en démarrage manuel au niveau du type de contenu Document, rien ne vous empêche de rendre le workflow d'approbation automatique dès la création d'une commande fournisseur et qu'il assigne une tâche d'approbation à un utilisateur ou à un groupe d'utilisateur spécifique. Dans le cadre de notre Commande Fournisseur, on pourrait demander l'approbation à un manager du département finance par exemple.

Je ne vais pas détailler ici l'utilisation des workflows standards, simplement retenez qu'il est tout à fait possible d'associer un workflow standard ou personnel à un type de contenu afin par exemple d'automatiser un certain processus dès qu'un document d'un certain type est créé/modifié.

II-D - Création d'un panneau d'information

Le panneau d'information est la barre apparaîssant dans les clients Office, en l'occurrence Excel pour notre exemple et qui affiche à l'utilisateur les colonnes qu'il doit/peut remplir. Ceci n'est pas vrai pour toutes les versions d'Office. Il faut disposer d'une version capable de gérer l'intégration cliente. Pour ce tutoriel, j'utilise Office 2007.

Voici la barre d'information standard qui apparaît dans Excel lorsque l'on crée une nouvelle commande fournisseur.

Elle expose nos trois colonnes aux utilisateurs.

Nous pouvons créer notre propre panneau en utilisant Infopath, il faut donc que vous ayez ce logiciel. Revenez sur l'écran principal de votre type de contenu et cliquez sur le lien Document Information Panel Settings. Vous obtenez l'écran suivant

Cliquez sur le lien Create a new custom template, Infopath s'ouvre, cliquez sur Finish, vous obtenez l'écran suivant

Soit, le panneau d'information standard. Sélectionnez la zone de Titre et supprimez-là. Ensuite, cliquez sur la colonne Nom Fournisseur avec le bouton droit et cliquez sur Data Validation

Effectuez la même règle de validation que celle présentée ci-dessous

Cliquez maintenant sur Centre de coût avec le bouton droit et choisissez l'option Borders and Shading, choisissez ensuite une couleur de votre choix.

Lorsque vous avez terminé les modifications, cliquez sur le bouton Publish Form Template se trouvant dans la barre des tâches d'Infopath à droite de l'écran. Infopath vous demande d'enregistrer votre document, faites-le et spécifiez un emplacement sur votre disque dur. Ensuite, Infopath vous propose de publier votre template vers votre type de contenu

Cliquez sur Next et ensuite sur Finish

Nous verrons le résultat de notre travail en section II-F.

II-E - La notion d'héritage

Vous l'avez constaté, lorsque l'on crée un type de contenu, on doit d'emblée sélectionner le type de contenu parent. Il y a donc un héritage qui s'opère. Vous pouvez bien sûr réutiliser cette notion d'héritage en créant vos propres types de contenu. Par exemple, rien ne vous empêche de créer une structure comme celle-ci

Pensez-y :).

II-F - Utiliser son type de contenu dans une bibliothèque

Maintenant que nous avons créé notre type de contenu, il serait bien de pouvoir l'utiliser :). Pour ce faire, choissisez n'importe quelle bibliothèque de votre site où a été défini Commande Fournisseur ou de l'un de ses sous-sites. Créez une bibliothèque au besoin.

Cliquez sur votre bibliothèque et ensuite sur Settings->Document Library Settings

Cliquez ensuite sur le Advanced Settings et choisissez d'autoriser l'utilisation des types de contenu

Maintenant, il ne vous reste plus qu'à ajouter le type de contenu Commande Fournisseur. Pour ce faire, revenez sur Settings->Document Library Settings, dans la section Content Types, cliquez sur le lien Add from existing site content types. Sélectionnez votre type de contenu comme illustré ci-dessous et cliquez sur Ok

Il est temps à présent de créer une nouvelle commande fournisseur. Revenez sur l'écran principal de votre bibliothèque et cliquez sur New => Commande Fournisseur

Excel s'ouvre avec le modèle de document que vous avez défini, le panneau d'information que vous avez défini et les utilisateurs sont obligés de saisir le nom du fournisseur.

Grâce au panneau d'information personnalisé, si l'utilisateur met la colonne Nom Fournisseur à blanc, il recevra ce message

Si l'utilisateur enregistre directement le document sans avoir remplir le nom du fournisseur, il recevra ce message

Comme vous le voyez, nous avons à présent bien plus qu'un simple document Excel pour représenter notre commande fournisseur. Nous avons le document, les métadonnées, un panneau d'information personnalisé et on aurait encore pu ajouter des workflows.

De surcroît, le document est bien enregistré en tant que Commande Fournisseur, il est donc typé. Il est possible de réexploiter cette information dans Sharepoint au travers de vues spécifiques, au travers d'actions personnelles (sections suivantes) pour cibler des fonctionnalités en fonction d'un type de contenu bien précis.

Un autre intérêt à créer ses propres panneau d'information réside dans le fait que les colonnes personnelles ne sont pas éditables dans les clients Office. Elles apparaissent par défaut dans le panneau d'information en grisé, via un panneau personnel, on peut simplement les retirer.

III - Déploiement d'un type de contenu via une fonctionnalité

Dans cet exemple, nous allons déployer un type de contenu similaire à celui que nous avons créé manuellement mais nous nous contenterons de ne déployer que les métadonnées. Nous associerons ensuite une action spécifique à ce type de contenu disponible dans le menu ECB.

On pourrait utiliser un seul et même fichier XML pour faire le tout mais je préfère découper les opérations et les répartir sur 3 fichiers. Ceux-ci sont détaillés dans les sections ci-dessous

III-A - Création de la fonctionnalité

Si vous ne savez pas ce qu'est une feature/fonctionnalité, je vous encourage à lire le tutoriel de Dieudonné N'tamack Apprendre à travailler avec les fonctionnalités

Voici le fichier XML qui décrit notre fonctionnalité

<?xml version="1.0" encoding="utf-8" ?>
<Feature xmlns="http://schemas.microsoft.com/sharepoint/"
Id="8744F392-8397-47ce-A12D-AEC53012388E"
Title="Déploiement d'un type de contenu"
Description="Déploiement d'un type de contenu"
Scope="Site"
Hidden="false"
>
<ElementManifests>
<ElementManifest Location="fieldsandct.xml"/>
<ElementManifest Location="customaction.xml"/>
</ElementManifests>
</Feature>

On attribue simplement un ID (guid), un titre et une description. On déclare son Scope à Site, ce qui signifie que c'est une fonctionnalité activable au niveau d'une collection.

Ensuite on indique à la fonctionnalité que les fichiers fieldsandct.xml et customaction.xml contiennent d'autres instructions à effectuer.

III-B - Création des colonnes et du type de contenu

Dans le fichier fieldsandct.xml, on crée nos colonnes et notre type de contenu.

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<!--Colonne centre de coût-->
<Field Type="Choice"
DisplayName="Centre Cout"
Group="Commandes"
Format="Dropdown"
FillInChoice="FALSE"
ID="{FCAE7CBF-0E96-4a98-886F-28ECFABE07C5}"
SourceID="http://schemas.microsoft.com/sharepoint/v3"
StaticName="CentreCout"
Name="CentreCout"
ColName="nvarchar10"
>
<CHOICES>
<CHOICE>IT001 - Recherche et Développement</CHOICE>
<CHOICE>IT002 - Infrastrcuture</CHOICE>
</CHOICES>
</Field>
<!--Colonne Nom fournisseur-->
<Field Type="Text"
DisplayName="Nom Fournisseur"
Group="Commandes"
Required="FALSE"
MaxLength="25"
ID="{9DE6C4DD-D23A-42a1-A688-005F2F494658}"
SourceID="http://schemas.microsoft.com/sharepoint/v3"
StaticName="NomFournisseur"
Name="NomFournisseur"
ColName="nvarchar11" />

<!--Notre type de contenu CommandeFournisseur-->

<ContentType ID="0x010100F19332B9AEAC47c2A5067A1A7BEC0AB2"
Name="Com Fournisseur"
Description="Commande fournisseur"
Group="Commandes"
Version="0">
<FieldRefs>
<FieldRef ID="{FCAE7CBF-0E96-4a98-886F-28ECFABE07C5}" DisplayName="Centre Cout" Name="CentreCout" />
<FieldRef ID="{9DE6C4DD-D23A-42a1-A688-005F2F494658}" DisplayName="Nom Fournisseur" Name="NomFournisseur"/>
</FieldRefs>
</ContentType>
</Elements>

Ici, on crée nos deux colonnes de site, similaires aux colonnes que nous avions créé via l'interface dans la première partie du tutoriel. On crée ensuite notre type de contenu et on y référence les deux colonnes.

Les ID des colonnes sont de simples GUID, par contre, ce n'est pas le cas de l'ID du type de contenu. Celui-ci doit être structuré d'une manière bien précise. Je vous redirige vers les liens MSDN détaillant la marche à suivre pour constuire des ID de type de contenu.
Construction d'un ID
Les ID des types de contenu de base

Tip 1 : n'oubliez pas de lier vos fichiers XML au schéma C:\Program Files\Microsoft Visual Studio 8\xml\Schemas\wss.xsd. Ceci vous permettra de bénéficier de l'intelisense. Tip 2 Pour écrire le CAML, vous pouvez utiliser Sharepoint Solution Generator qui permet de re-générer le CAML de certains modèles de listes et de site

III-C - Création d'une custom action

Si vous ne savez pas ce qu'est une custom action, je vous encourage à lire le tutoriel de Ludovic Lefort, Les custom actions

Le but ici étant simplement de démontrer qu'il est tout à fait possible de créer une action particulière pour un type de contenu et de ne pas proposer ces actions pour d'autres documents non typés ou ayant un autre type de contenu.

Voici le fichier XML customaction.xml

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<CustomAction
Id="922501D0-819A-46db-8E34-1CE2C5F47088"
Rights="ViewListItems"
RegistrationType="ContentType"
RegistrationId="0x010100F19332B9AEAC47c2A5067A1A7BEC0AB2"
Location="EditControlBlock"
Sequence="2000"
Title="Action Commande Fournisseur"
>
<UrlAction Url="javascript:alert('Coucou');"/>
</CustomAction>
</Elements>

On définit un ID (simple GUID), on dit que l'action n'est accessible qu'aux utilisateurs ayant la permission de visualiser les éléments. On dit que cette action doit être proposée dans le menu EditControlBlock seulement aux éléments dont le type de contenu est Com. Fournisseur via les attributs RegistrationType et RegistrationId qui contient l'ID de notre type de contenu.

On définit ensuite une action, qui dans notre cas n'est qu'un simple message d'alerte javascript. Il est évident que vous pouvez développer à la fois du code client et serveur derrière une custom action. Ici, le but est simplement de vous montrer comment effectuer une action spécifique pour un type de document spécifique.

III-D - Installation et déploiement de notre fonctionnalité

Pour installer notre fonctionnalité, il suffit de créer un répertoire et d'y copier les 3 fichiers XML. Ceci est illustré par l'image ci-dessous

J'ai créé le répertoire TypeContenu et j'y ai copié les fichiers XML. Vous pourriez bien sûr créer une solution qui effectuerait le déploiement automatiquement, c'est d'ailleurs la meilleure manière de déployer des composants quels qu'ils soient mais le déploiement de solution mérite un tuto à lui tout seul.

Lorsque vous avez créé votre répertoire au bon endroit, vous n'avez plus qu'à ouvrir une fenêtre DOS et exécuter les commandes suivantes

- stsadm -o installfeature -name TypeContenu

- stsadm -o activatefeature -filename TypeContenu\feature.xml -url http://votre_collection_cible

III-E - Résulat de notre travail

Vous devriez retrouver votre type de contenu dans la galerie des types de contenu de la collection où vous avez activé la fonctionnalité

De la même manière, vous retrouverez les deux colonnes définies en tant que colonnes de site. Ensuite, lorsque vous aurez associé ce type de contenu à l'une de vos bibliothèque, comme expliqué en section II-F, et lorsque vous aurez créé un document basé sur ce type de contenu, vous pourrez constater ceci

Pour un document non typé "Comm Fournisseur", le menu reste le menu standard.

Alors que pour un document typé "Comm Fournisseur", vous obtenez une option en plus

Et lorsque vous cliquez dessus, vous obtenez cette incroyable fonctionnalité :)

IV - Téléchargement

Vous pouvez récupérer une archive qui contient le répertoire de la fonctionnalité avec les 3 fichiers XML, le modèle de document Excel que j'ai utilisé, le formulaire Infopath pour le panneau personnel.

V - Conclusion

Ce qu'il fallait retenir sur les types de contenu, c'est

- Ils permettent de typer l'information, de leur donner une nature grâce aux métadonnées

- Ils permettent d'automatiser certains processus en associant des workflows

- Ils permettent de personnaliser les interfaces clientes des logiciels Office (Excel, Word etc..)

- Ils permettent d'associer des politiques de rétention (pas abordé ici mais bon à savoir)

- Ils permettent d'associer des fonctionnalités spécifiques au travers des custom actions notamment

- Ils peuvent hériter les uns des autres

- Ils permettent d'associer un modèle de document qui sera automatiquement utilisé lors de la création d'un document basé sur le type de contenu.