Recherche sur des métadonnées créées par l’utilisateur

Dans SharePoint 2010, un utilisateur souhaite faire une recherche du type : « Je cherche dans le projet Audit tous les documents en anglais qui contiennent le mot site dont le niveau de confidentialité est Tres-secret » à partir de l’écran de recherche avancée.

L’écran de recherche avancée est une page standard d’un site créé à partir du modèle de site Centre de recherche de base.

Les notions de projet, langue et confidentialité sont des propriétés des documents. Elles sont gérées sous forme de métadonnées dans un type de contenu spécifique.

Par ailleurs, l’utilisateur est un fervent adepte du no-code: tout doit être fait par paramétrage, sans jamais développer un programme, même un JavaScript !

L’idée retenue est donc de jouer sur les paramètres des fichiers XML de la configuration de la recherche de SharePoint 2010. Ces fichiers XML sont facilement accessibles pour l’administrateur. Celui-ci n’est pas obligé d’aller « fouiller » dans les abscons web.config.

Avant de continuer prenez connaissance de l’article sur le principe de fonctionnement de la recherche SharePoint 2010, qui présente les notions de propriétés analysées (« crawled properties ») et de propriétés gérées (« managed properties »).

La première étape consiste à créer les colonnes de sites et le type contenu.

Création d’un type de contenu

Le type de contenu nommé Paris Core Columns et de type de contenu parent Document est créé.
type de contenu nommé Paris Core Columns
La colonne de site nommée Projet et de type choix est créée avec les valeurs: Audit, Gouvernance, Migration, Performances.

La colonne de site nommée Restriction et de type choix est créée avec les valeurs: Tres-secret, Confidentiel, Restreint, Public.

Ces colonnes, ainsi que les colonnes existantes Auteur, Objet et Langue, sont rattachées au type de contenu Paris Core Columns.
Colonnes des type de contenu nommé Paris Core Columns
Le type de contenu est associé à une bibliothèque nommée Docs (par exemple). C’est le type de contenu par défaut.

Alimentation en documents

Pour que l’indexation fonctionne, il faut déposer des documents dans la bibliothèque Docs. Cette étape est primordiale et doit se faire avant même le paramétrage de la recherche à cause du fonctionnement de l’indexation. En effet, pour pouvoir associer une propriété gérée à une propriété analysée, celle-ci doit être remontée par le programme d’indexation (mssearch.exe). Hors, celui-ci ne peut le faire que s’il existe des documents qui exposent ces propriétés analysées.

Par ailleurs, pour tester convenablement la recherche il est nécessaire d’imaginer les requêtes qui seront faites.

Dans notre cas, les requêtes vont porter sur les critères du type de contenu: Titre, Nom, Auteur, Objet, Projet, Langue, Restriction.

Soit 7 critères, auxquels il faut rajouter la date de dernière modification. La date permet de répondre aux requêtes du type « tous les documents de la semaine dernière ». Les 8 critères donnent 255 combinaisons possibles (2 puissance 8 -1), sans compter le contenu des documents !

Dans la pratique, il est impossible d’avoir un jeu d’essai pour tous les cas possibles. Notre jeu de documents sera donc constitué d’environ 50 documents avec des propriétés différentes.

Vous pouvez accélérer l’indexation en la forçant via la console d’administration centrale > Application Management > Manage service applications > Application de service de la recherche > Content source puis sur la source de contenu : Start Incremental Crawl.

L’indexation incrémentielle est très rapide. Les utilisateurs se plaignent parfois de la lenteur supposée de l’indexation. Le problème vient plutôt du réglage de la fréquence d’indexation qui n’est pas adaptée.

SharePoint 2013, qui dispose d’une architecture de recherche différente de celle de SharePoint 2010 a la possibilité d’indexer en continu. SharePoint 2010 ne sait pas le faire. Toutefois, il est possible de régler une indexation incrémentielle toutes les 5 minutes, sans dégrader les performances.

Une fois le mappage fait (plus loin), il sera nécessaire de lancer une indexation complète.

Lorsque l’indexation des nouveaux documents est terminée, vous pouvez passer à l’étape suivante qui consiste à créer des propriétés gérées associées aux propriétés analysées.

Création de la propriété gérée

Nativement, SharePoint sait faire le mappage entre certaines propriétés analysées et les propriétés gérées d’origine (« Out Of The Box / OOTB »), en particulier les métadonnées des documents Office.

Pour les colonnes de sites que vous avez créées, vous devez créer une nouvelle propriété gérée puis l’associer à une des propriétés analysées.

La manipulation suivante doit dont être faite sur les deux colonnes de sites: Projet et Restriction.

Lancez la console d’administration centrale > Application Management > Manage service applications > Application de service de la recherche.

Ensuite, cliquez sur Metadata Properties puis New Managed Property.

Nommez la propriété : monProjet et vérifiez que le type de données est bien Text. Mettez le nom abrégé de votre organisme à la place de « mon ». Les caractères « _ » ou « # » ne sont pas acceptés.

Ensuite, cliquez sur Add Mapping: la fenêtre Crawled property selection s’ouvre.

Dans cette fenêtre, vous pouvez soit filtrer par catégorie, soit filtrer directement sur le nom. Vous allez utiliser cette méthode car les colonnes de sites SharePoint sont facilement repérables.

En effet, elles sont préfixées par ows_ suivi de leur nom interne.

Tapez directement ows_projet puis cliquez sur le bouton Find.
Crawled property selection
Cet écran affichera toutes les propriétés analysées trouvées du même type que la propriété gérée. Si vous ne voyez pas la propriété analysée, vérifiez:

  • Que le type de contenu Paris Core Columns est bien associé à la bibliothèque de documents Docs,
  • Que la propriété analysée (« Projet ») est bien renseignée pour au moins un document. Si besoin, rajoutez au moins un document avec la propriété analysée renseignée,
  • Que l’indexation a bien été faite depuis. Dans le doute relancez une indexation incrémentale,
  • Que le nom interne est bien Projet et donc le nom de la propriété analysée est ows_Projet. Lisez l’article précité sur le nom interne des colonnes,
  • Que le type de donnée est bien Text.

Si ows_Projet(Text) apparaît bien; cliquez dessus pour le sélectionner puis cliquez sur le bouton OK pour valider: vous revenez sur le fenêtre New Managed Property.

Dans cette fenêtre, cochez Allow this property to be used in scopes pour pouvoir utiliser la propriété gérée dans une étendue de recherche (cf. plus bas), ainsi que Add managed property to custom results set retrieved on each query: la raison est expliquée dans l’article consacré aux principes de fonctionnement de la recherche.
Création d'une propriété gérée
Cliquez sur le bouton OK.

Refaites la même manipulation, en l’adaptant, pour la colonne de site Restriction.

Si vous faites une erreur, ou si vous oubliez de cocher une case par exemple, vous pouvez modifier à nouveau la propriété gérée. Seul le type de données (Texte, Entier, etc.) ne peut pas être modifié: Si vous faites une erreur sur le type de données, vous serez obligé de supprimer la propriété gérée puis de la recréer.

Indexation complète

Une fois les propriétés gérées créées, il est nécessaire de refaire une indexation complète (et non incrémentale) pour que le programme d’indexation les intègre dans l’index.

Si c’est compatible avec votre environnement, il serait préférable de recréer entièrement l’index. Dans notre cas, ce n’est pas strictement nécessaire. L’avantage de recréer un nouvel index est de supprimer les erreurs éventuelles de l’index qui finissent toujours par s’accumuler et qui dégradent les performances.

Attention ! La réinitialisation d’index va supprimer totalement l’index, toutes sources de contenu confondues: aucune recherche n’aboutira tant que l’index ne sera pas reconstitué. Par ailleurs, la reconstitution de l’index est une opération consommatrice de ressources: les performances globales de la ferme SharePoint seront pénalisées. Ces opérations doivent d’abord être testées puis ensuite planifiées, notamment dans le cas d’un index volumineux.

Pour réinitialiser l’index, lancez la console d’administration centrale > Application Management > Manage service applications > Application de service de la recherche.

Ensuite, cliquez sur Index Reset. Laissez cochée la case Deactivate search alerts during reset. Si vous la décochez, les utilisateurs qui ont créé des alertes sur la recherche vont recevoir des emails intempestifs. Cliquez sur bouton Reset Now puis sur le bouton OK de la fenêtre de confirmation.

Lors de la prochaine indexation complète, l’index sera recréé entièrement. Dans le cas où la prochaine indexation est incrémentielle, le programme d’indexation force d’autorité une indexation complète si l’index n’a pas déjà fait l’objet d’une indexation complète.

Pour gagner du temps, ou si vous n’avez pas voulu réinitialiser l’index, vous pouvez forcer une indexation complète.

Pour forcer une indexation complète, lancez la console d’administration centrale > Application Management > Manage service applications > Application de service de la recherche.

Ensuite, cliquez sur Content Sources.

Avec la souris, survolez Local SharePoint sites puis cliquez sur la flèche à droite.
Local SharePoint sites
Cliquez sur Start Full Crawl pour démarrer l’analyse complète.

La durée de l’analyse dépend évidemment du volume de documents à analyser.

Dans l’administration de la recherche, l’historique de l’analyse permet d’avoir une vision d’ensemble des différentes analyses.

Une fois que l’indexation complète est terminée, il reste à ajouter les propriétés gérées à la recherche avancée.

Modifier la recherche avancée

Si vous ne disposez pas d’un site de recherche avancée, vous allez d’abord en créer un.

Pour créer un site de recherche avancée, ouvrez la page d’accueil de votre site puis cliquez sur Actions du site > Nouveau site.

Filtrez sur la catégorie Recherche et sélectionnez le modèle Centre de recherche de base.

Nommez-le Cherche avec l’url cherche cliquez sur le bouton Créer: une fenêtre de recherche toute simple (« A la Google ! ») s’affiche:
centre de recherche
Cliquez sur le lien Paramètres avancées.
centre de recherche avancée
Si vous cliquez sur la liste déroulante propriété, vous voyez apparaître les propriétés gérées qui ont été reconnues nativement par SharePoint: Auteur, Description, Nom, Taille, URL, Date de modification, Créé par, dernière modification par.

Vous allez modifier cette recherche avancée pour ajouter vos propriétés gérées.

Pour cela, cliquez sur Actions du site (le menu habituel en haut à gauche) puis Modifier la page.

Avec la souris, survoler la zone de recherche avancée puis cliquer sur le lien Edition et choisir Modifier le composant WebPart.
Modifier le composant WebPart
Dans les paramètres de la zone de recherche avancée, qui est apparu sur la droit, sous Étendues, cochez la case Afficher le sélecteur d’étendue.
Afficher le sélecteur d’étendue
Le sélecteur d’étendues permet de sélectionner l’étendue souhaitée, si vous en possédez plusieurs. Ce choix est cohérent avec la définition précédente de la propriété gérée.

Ensuite, cliquez sur le moins de Étendues.

Dessous, cliquez sur le plus de Propriétés.

Cliquez dans la zone Propriétés qui débute par <root xmlns:xsi= »http://www.w…

Cliquez sur les 3 petits points qui apparaissent:

La fenêtre web qui s’affiche n’est pas pratique pour faire les modifications.

Aussi, vous allez copier temporairement son contenu dans un éditeur plus pratique comme par exemple Notepad++.

Copiez tout le texte qui apparaît et collez-le dans Notepad++, suivi d’entrée.

Afin de faciliter la lecture du fichier, vous pouvez faire les petites manipulations suivantes. Elles sont facultatives mais elles vous permettront de mieux voir ce que vous faites.

Dans Notepad++, remplacez tous les double-espace par un seul espace. Cette opération est à faire 5 fois de suite.

Dans Notepad++, remplacer en mode étendue la chaîne « > < » par « >rn<« . Les commandes rn font passer à la ligne. Pensez à le faire en mode étendue pour avoir un retour chariot entre > et <.

Une fois ces manipulations faites, vous obtenez le fichier présenté ainsi.
Etendue de recherche mise en forme
Cherchez la balise <PropertyDefs>: vous retrouvez les propriétés gérées reconnues par SharePoint (Auteur, Description, Nom, Taille, URL, etc.)
Propriétés gérées reconnues par SharePoint
Entre les balises <PropertyDefs> et </PropertyDefs>, insérez:

<PropertyDef Name= »monProjet » DataType= »text » DisplayName= »Projet »/>

Refaites cette opération pour la propriété gérée maRestriction.
PropertyDef
Ensuite, cherchez la balise <ResultTypes>: elle se trouve juste en dessous de la balise </PropertyDefs>.
ResultTypes
Dans la balise <ResultTypes>, chercher la balise <ResultType DisplayName= »Tous » Name= »default »>
ResultType
Juste avant </ResultType>, ajouter: <PropertyRef Name= »monProjet » />

Refaites cette opération pour la propriété gérée maRestriction.
PropertyRef
En fait, vous pouvez ajouter les balises ci-dessus à l’endroit que vous voulez dans le bloc <ResultTypes>, selon l’affichage souhaité.

Sélectionnez et copiez tout le contenu du fichier notepad++.

Collez dans la fenêtre de l’éditeur de texte ouvert dans SharePoint puis cliquer sur le bouton OK. Il est totalement inutile de remettre en forme.

Cliquez sur le bouton OK de la Zone de recherche avancée.

Dans le ruban Page, cliquez sur Arrêter la modification.

Vérifiez que vos modifications ont bien été prises en compte.
Modification de l'étendue
Vous devez voir en bas de la liste les champs Projet et Restriction.

Lancement de la requête personnalisée de recherche

L’utilisateur souhaitait faire une recherche du type : « Je cherche dans le projet Audit tous les documents en anglais qui contiennent le mot site dont le niveau de confidentialité est Tres-secret » à partir de l’écran de recherche avancée.

Cela donne:
Requête personnalisée de recherche
Cet écran de recherche peut être simplifié (suppression des langues inutiles, modification des libellés, etc.) en jouant avec les fichiers XML de configuration.

Vous noterez le panneau d’affinement (sur la gauche) qui permet de filtrer les résultats de recherche:
requête personnalisée de recherche (résultat)
Il est aussi possible de faire apparaître dans le panneau d’affinement, les métadonnées rajoutées par nos soins: Projet et Restriction.

Pour information, la requête complète est ALL(site) (scope: »All Sites ») (DetectedLanguage= »en ») (monProjet:Audit AND maRestriction:Tres-secret).

Impossible de supprimer le service de recherche SharePoint 2010

Suite aux changements d’architecture, la base de données d’analyse de recherche a été corrompue dans l’environnement de développement. L’objectif a donc été de chercher à supprimer le service de recherche puis de le recréer.

Console Administration

Dans un premier temps, il a été tenté de retirer la base de données d’indexation et le composant via l’interface utilisateur.

Le processus boucle indéfiniment.

Il est devient impossible de supprimer le composant à l’aide de la Console d’Administration.

Cmdlets PowerShell

Dans un second temps, la commande Remove-SPServiceApplication a été tentée, avec ou sans l’option RemoveData. Cette dernière option supprime la base de données associée.

Cette manipulation n’a pas fonctionné non plus.
$spapp = Get-SPServiceApplication -Name « Search »
Remove-SPServiceApplication $spapp -RemoveData

Commande stsadm.exe

Finalement, le problème a été résolu avec la « vieille » commande stsadm.exe.
stsadm.exe -o deleteconfigurationobject -id « f7604f42-37k9-4659-83c7 »
La valeur de l’ID a été tronquée pour une question d’esthétique. Normalement, elle est sur 36 caractères.

Pour SharePoint 2010, la commande stsadm est dans le dossier C:Program FilesCommon FilesMicrosoft SharedWeb Server Extensions14BIN sur le serveur.

Il est surprenant (mais heureux !) que cette commande ait été plus efficace que les commandes PowerShell.

Principe de fonctionnement de la recherche SharePoint 2010

Il y aurait beaucoup d’informations à communiquer sur le fonctionnement de la recherche SharePoint. L’objet de cet article est de présenter quelques notions pivot sur ce thème, sans chercher l’exhaustivité.

La recherche de SharePoint repose essentiellement sur un programme d’analyse des documents (« Crawl » en anglais) et un programme de requête (« Query »).

Le programme de « crawl » (mssearch.exe) analyse les documents pour en extraire les propriétés et les mots contenus.

Les propriétés sont le titre, l’auteur, l’objet, la date de création, etc. du document. Les spécialistes préfèrent le terme de métadonnées.

Donc, lorsqu’un document est déposé dans une bibliothèque ses propriétés et tout son contenu est indexé.

Le service SharePoint Server Search 14 exécute le programme C:Program FilesMicrosoft Office Servers14.0Binmssearch.exe.

Index

Un index est un ensemble de fichiers qui contiennent les mots analysés. L’URL du document est associée aux mots de l’index. A partir de l’index, il est alors possible de retrouver les documents qui sont associés au mot recherché.

Pour des raisons de performance, l’index du contenu se trouve sur le disque dur, et non pas en bases de données. Même sur des serveurs virtualisés, il est conseillé d’attacher l’index à un disque physique afin de ne pas dégrader les performances.

Pour améliorer les performances, l’index peut être déplacé sur un disque avec un compteur Avg. Disk Queue Length faible. Attention ! Ces opérations doivent d’abord être testées puis ensuite planifiées, notamment dans le cas d’un index volumineux.

Pour déplacer l’index grâce à la Central Administration, cliquez sur Application Management puis Manage service applications et sur l’application de service de la recherche. Dans cette application de service de la recherche, cliquez sur le bouton Modify sous Search Application Topology.

Ensuite, pour chaque composant de recherche (par exemple Crawl Component 0 / Query Component 0), éditez les propriétés (Edit Properties) et changez le chemin de l’index.

Puis cliquez sur le bouton Apply Topology Changes.

La compréhension de la recherche nécessite d’expliciter les notions de propriétés analysées et propriétés gérées.

Propriétés analysées

Les propriétés analysées sont celles qui sont découvertes lors de l’analyse du contenu au moment de l’indexation. Les propriétés analysées (« crawled ») sont automatiquement extraites du contenu analysé.

Pour des raisons de manipulation, elles sont stockées dans la base de données d’analyse (Search Service Application Crawl Store DB).

Pour prendre connaissance des propriétés analysées sur votre site, allez sur Central Administration > Application Management > Manage service applications > Application de service de la recherche > Metadata properties puis Crawled Properties (dans le menu haut):
Propriétés analysées
Afin de mieux comprendre leur intérêt, le tableau ci-dessous explicite le rôle des propriétés analysées de la catégorie Office.

Explications des propriétés analysées pour Office

Vous voyez qu’une propriété analysée est caractérisée par un nom complet Office:4(Text), par exemple.

Office est la catégorie qui se réfère aux documents Microsoft Office. Il existe d’autres catégories comme Basic qui se réfère notamment au système de fichier, Mail pour la messagerie, Web pour les données des sites web, People, SharePoint, etc.

Entre parenthèse, il est indiqué le type de données. Dans cet exemple, Text pour une ligne de texte. Il existe aussi Integer, Date and Time, Yes/No, Binary Data, etc.

Le nombre (4) est le nom de la propriété analysée.

Office:4(Text) est une propriété analysée native de SharePoint. Elle contient les données de la propriété Auteur des documents Office. Cette information est connue grâce au mappage avec la colonne Author. Le rôle du mappage est détaillé plus loin.

Vous trouverez aussi des propriétés analysées qui sont formatées un peu différemment. Par exemple, Departement(Text). Le type de données (Text) est toujours présent. Par contre, la catégorie n’apparaît pas dans le nom complet. Il faut cliquer sur le nom de la propriété analysée pour connaître sa catégorie.

Avec le temps de nombreuses propriétés analysées ne sont associées à aucune donnée mais elles sont toujours présentes dans la base. Vous pouvez les supprimer en allant sur Central Administration > Application Management > Manage service applications > Application de service de la recherche > Metadata properties puis Categories (dans le menu haut). Ensuite, modifiez la catégorie de votre choix. Cochez Delete all unmapped crawled properties et cliquez sur le bouton OK.
Delete all unmapped crawled properties
De nombreuses propriétés analysées, non mappées, devraient disparaître. Malgré cette manipulation, il peut encore subsister certaines propriétés analysées non mappées.
Propriétés analysées non-mappées
Cliquez sur un de ces propriétés analysées pour la modifier.

Lorsque la case à cocher Include values for this property in the search index est cochée, cela signifie que la recherche peut être faite dans les valeurs de cette propriété analysée. Autrement dit, ces valeurs seront placées dans l’index de recherche.

Si la case est cochée, une recherche sur l’auteur « Raimbaud » renverra les éléments dont la propriété d’auteur est « Raimbaud ». Dans le cas où cette case est décochée, la requête devra être rédigée de manière explicite. Autrement dit, la requête devra être sous la forme: « auteur:Raimbaud » pour trouver les mêmes éléments.

L’ajout de propriétés inutiles peut avoir des répercussions négatives sur les performances et la pertinence des recherches.
Include values for this property in the search index
Aussi, décochez la case Include values for this property in the search index et cliquez sur le bouton OK. Refaites-le pour toutes les propriétés analysées de la catégorie.
Propriétés analysées non-mappées non-indexées
Modifiez la catégorie concernée: cochez à nouveau Delete all unmapped crawled properties:
Delete all unmapped crawled properties
Vous pouvez supprimer la catégorie qui est vide.
Suppression d'une catégorie de recherche vide

Propriétés gérées

De prime abord, la notion de propriété gérée peut sembler superflue.

En effet, toutes les métadonnées des documents ont été collectées à travers les propriétés analysées. Ensuite, il faut associer (« mapper ») une propriété analysée à une propriété gérée car les requêtes sont faites sur les propriétés gérées.

Le rôle des propriétés gérées (« Managed properties ») est de réconcilier des propriétés qui peuvent être nommées différemment dans les documents.

L’auteur d’un document peut être stocké dans une métadonnée nommée Auteur ou Office:4(Text) ou encore Mail:6(Text) selon le type de document.

Le rôle de la propriété gérée est d’être une interface pour faire le lien entre toutes ces propriétés analysées.

 

Listes déroulantes en cascade dans SharePoint

Une demande récurrente dans SharePoint est de créer des listes déroulantes en cascade entre deux listes minimum. Cette technique permet de limiter les valeurs affichées en fonction du choix précédent. Par exemple, la première liste peut contenir la liste des régions françaises. Lors du choix d’une région, la seconde liste ne fait apparaître que les départements de la région sélectionnée.

Il existe de nombreuses possibilités pour obtenir ce résultat. Toutefois, l’utilisateur voulait une méthode simple pour le faire, sans l’apport de produits tiers.

Création des deux listes

La première liste contiendra la Régions: elle est nommée Régions. Cette liste sera aussi appelée la liste parent.

La seconde liste contiendra la liste des départements: elle est nommée Départements. Cette liste aura une colonne de recherche, nommée Région (nom affiché) qui pointera sur la liste des régions.

La procédure pour créer ses deux listes est détaillée dans l’article intitulée Comment créer une colonne de recherche.

Créer le questionnaire

Le questionnaire est un formulaire qui permet d’interroger l’utilisateur sur la région de la liste parent puis le département de la liste enfant.

Concrètement, il suffit de créer une simple liste personnalisée, nommée Questionnaire. Cette liste aura 2 colonnes supplémentaires de type Recherche (informations déjà sur ce site). La première colonne s’intitule Region (sans accent, pour le nom interne), la seconde colonne s’intitule Departement (sans accent aussi).

Créer la liste qui relie les listes parent et enfant

Pour créer la liste Questionnaire, cliquez sur Actions du site > Autres options > Liste > Liste personnalisée.

Nommez la liste Questionnaire puis cliquez sur le bouton Créer.

Ajout de la première colonne qui relie la liste « parent »

Pour ajouter la colonne Region (sans accent), cliquez sur le ruban Liste (en haut) et sur le menu Créer une colonne.

Nommez la colonne Region (sans accent) puis sélectionnez le type Recherche (informations déjà sur ce site)

Puis, dans Paramètres de colonne supplémentaires, sous Obtenir des informations à partir de, sélectionnez la liste Régions. Sous Dans cette colonne, sélectionnez la colonne Titre (pas Titre lié à un élément) puis cliquez sur le bouton OK.

Pour des raisons esthétiques, vous allez renommer la colonne Region (sans accent) en Région (avec accent). La raison pour laquelle la saisie directe du nom Région n’a pas été faite directement est expliquée dans l’article consacrée au nom interne.

Allez dans les paramètres de la liste puis cliquez sur la colonne Region.

Modifiez le nom de la colonne en Région puis cliquez sur le bouton OK.

Ajout de la première colonne qui relie la liste « enfant »

Pour ajouter la colonne Departement (sans accent), cliquez sur le ruban Liste (en haut) et sur le menu Créer une colonne.

Nommez la colonne Departement (sans accent) puis sélectionnez le type Recherche (informations déjà sur ce site)

Puis, dans Paramètres de colonne supplémentaires, sous Obtenir des informations à partir de, vérifiez que la liste Départements est bien sélectionnée. Si ce n’est pas le cas, sélectionnez-là. Vérifiez aussi que la colonne Titre est bien sélectionnée (pas Titre lié à un élément). Si ce n’est pas le cas, sélectionnez-là puis cliquez sur le bouton OK.

Pour des raisons esthétiques, vous allez renommer la colonne Departement (sans accent) en Département (avec accent).

Allez dans les paramètres de la liste puis cliquez sur la colonne Departement.

Modifiez le nom de la colonne en Département puis cliquez sur le bouton OK.
Liste déroulante en cascade relie parent enfant
Si vous cliquez sur le lien Ajouter un nouvel élément, vous n’aurez pas de liaison entre la liste parent et la liste enfant: pas de JavaScript, pas de liste déroulante en cascade !

JavaScript

En effet, pour indiquer à SharePoint de faire des listes déroulantes en cascade entre la liste parent et la liste enfant, il est nécessaire d’introduire quelques lignes de JavaScript.

Pour simplifier le travail, nous utilisons JQuery et SPServices.

Les procédures pour utiliser ses deux bibliothèques sont détaillées dans les articles d’initiation à jQuery et d’initiation à SPServices.

Implémenter la logique métier en JavaScript

Une fois que vous savez que les bibliothèques JQuery et SPServices fonctionnement correctement, vous pouvez implémenter la logique métier qui permet d’avoir deux listes en cascade.

Créez un fichier ListeDeroulanteEnCascade.js avec Notepad avec le contenu suivant:
<script type= »text/javascript » src= »/Scripts/jQuery.js »></script>
<script type= »text/javascript » src= »/Scripts/jQuery.SPServices.js »></script>
<script type= »text/javascript »>

$(document).ready(function() {
$().SPServices.SPCascadeDropdowns({
relationshipList: « Départements »,
relationshipListParentColumn: « Region »,
relationshipListChildColumn: « Title »,
parentColumn: « Région »,
childColumn: « Département »,
});
});
</script>
relationshipList doit contenir le nom de la liste qui fait le lien avec la liste parent (« Régions »). Dans notre cas, c’est la liste Départements.

Au lieu du nom, vous pouvez mettre aussi le GUID de la liste Départements.

relationshipListParentColumn doit contenir le nom interne de la colonne de la liste enfant (« liste Départements ») qui pointe vers la colonne de la liste parent (« Régions »). Dans notre cas le nom interne de la colonne est Region.

Pour savoir comment récupérer le nom interne, consultez l’article sur le nom interne.

relationshipListChildColumn doit contenir le nom interne de la colonne de la liste enfant (« liste Départements ») qui affiche les valeurs filtrées. Dans notre cas le nom interne de la colonne Département est Title.

parentColumn doit contenir le nom d’affichage de la colonne du formulaire (« Questionnaire ») qui pointe vers la colonne de la liste parent (« Régions »). Dans notre cas le nom d’affichage de la colonne est Région.

childColumn doit contenir le nom d’affichage de la colonne du formulaire (« Questionnaire ») qui pointe vers la colonne de la liste parent (« Départements »). Dans notre cas le nom d’affichage de la colonne est Département.

Normalement, vous n’avez pas à modifier le script (ListeDeroulanteEnCascade.js) sauf si vous avez nommé différemment vos colonnes.

Modifier le formulaire avec SharePoint Designer

L’ajout du JavaScript doit être fait dans la liste Questionnaire. Plus précisément, il est nécessaire de modifier les formulaires NewForm.aspx et EditForm.aspx de la liste. Le formulaire NewForm.aspx sert à créer un nouvel élément, tandis qu’EditForm.aspx permet de modifier les éléments existants.

La modification des formulaires de la liste Questionnaire se fait à l’aide de SharePoint Designer.

A partir de votre site, cliquez sur Actions du site puis Modifier dans SharePoint Designer.

Dans SharePoint Designer, cliquez sur Listes et bibliothèques (à gauche).
Liste déroulante en cascade SharePoint Designer Listes bibliotheques
Cliquez sur la liste Questionnaire pour gérer ses paramètres.

Pour vérifier le bon fonctionnement du script ListeDeroulanteEnCascade.js, vous allez modifier le fichier NewForm.aspx.

Pour cela, faites un clic droit sur le fichier NewForm.aspx puis choisissez Modifier le fichier en mode avancé.
modifier-le-fichier-en-mode-avancé
Basculez dans la fenêtre Code, si ce n’est pas déjà fait.
Lancez une recherche dans le code source sur la chaîne de caractères « <asp:Content ContentPlaceHolderId= »PlaceHolderMain » runat= »server »> »
Recherche dans SharePoint Designer
En dessous de la chaîne recherchée, copiez tout le contenu du fichier ListeDeroulanteEnCascade.js.
Import du JavaScript dans NewForm.aspx
Enregistrez les modifications faites sur NewForm.aspx: une fenêtre apparait qui vous informe que l’enregistrement de vos modifications personnalise la page de telle sorte qu’elle ne se base plus sur la définition de site. Cliquez sur le bouton Oui pour enregistrer vos modifications. Ce message n’apparaîtra plus sur ce fichier.

Appuyez directement sur la touche F12 pour lancer le navigateur web.

Dans le questionnaire qui s’affiche, saisissez un titre (par exemple Question 1) puis cliquez sur la zone déroulante du Région.

Sélectionnez Corse grâce à un double clic. Si la liste déroulante ne se ferme pas, appuyez sur la touche tabulation de votre clavier.

Dans la zone Département, vous devez voir apparaître:
Création réussie d'un élément avec la liste déroulante
Sélectionnez Corse-du-Sud puis cliquez sur le bouton Enregistrer: laissez ouvert votre navigateur Internet.
Revenez à SharePoint Designer.

Dans SharePoint Designer, refaites exactement les mêmes manipulations que vous venez de faire sur le formulaire EditForm.aspx.

Une fois vos modifications terminées, retournez sur le navigateur Internet puis modifiez l’élément Question 1.
Modification en cours de l'élément
Dans Région, double-cliquez sur Franche-Comté.

Dans Département, sélectionnez Doubs puis cliquez sur le bouton Enregistrer.
Modification réussie d'un élément
Si tout va bien, fermez SharePoint Designer.

Remarques

  • Par analogie avec cet exemple, il est facile de l’étendre pour mettre en oeuvre des listes déroulantes sur 3 ou 4 niveaux.
  • Des problèmes apparaissent à cause des noms de colonnes tronqués au-delà des 32 caractères. Une cause possible d’un nom interne tronqué est l’utilisation d’accent ou d’espace dans le nom de la colonne à sa création.

 

Tutoriel d’initiation de base à SPservices

Ce tutoriel se limite à une introduction élémentaire à la bibliothèque SPservices dans SharePoint.

SPServices est une bibliothèque qui s’appuie sur JQuery et simplifie l’appel aux services Web de SharePoint.

Pour exécuter avec succès ce tutoriel sur SPservices, vous devez suivre au préalable celui qui est dédié à JQuery, et qui est expliqué dans l’article Tutoriel d’initiation de base sur JQuery dans SharePoint.

Télécharger la bibliothèque SPservices

Téléchargez la dernière version de SPServices.

Stockez le fichier zip sur votre ordinateur, décompressez-le et renommez le fichier jQuery.SPServices-2013.01.js en jQuery.SPServices.js. Dans les environnements complexes, il peut être intéressant d’identifier chaque version de SPservices. Dans notre cas, il est plus simple d’avoir une seule référence.

Pour pouvoir utiliser le fichier jQuery.js, il est nécessaire de le téléverser (« uploader ») dans la bibliothèque Scripts, créée dans le tutoriel dédié à JQuery.

Allez dans la bibliothèque Scripts puis cliquez sur le bouton Ajouter un document.

Cliquez ensuite sur Parcourir et « uploader » jQuery.SPServices.js dans la bibliothèque.
Bibliotheque jQuery et SPServices

Vérifier le bon fonctionnement de SPservices

Avant toute chose, il est important de vérifier que SPservices est valide et fonctionne bien dans votre environnement. Il est supposé que vous avez déjà vérifié que JQuery fonctionne parfaitement bien.

Avec le Bloc-notes (notepad.exe), créez un petit fichier VerifierSPservices.js avec le texte suivant:
<script type= »text/javascript » src= »/Scripts/jquery.js »></script>
<script type= »text/javascript » src= »/Scripts/jquery.SPServices.js »></script>
<script type= »text/javascript »>
$(document).ready(function() {
alert($().SPServices.SPGetCurrentSite());
});
</script>

Seules les lignes nouvelles par rapport à VerifierJQuery.js seront présentées.

La seconde ligne sert à référencer l’appel à SPServices. Vous devez donc modifier votre fichier pour que la première instruction src pointe bien vers l’emplacement du fichier jQuery.js hébergé dans la bibliothèque Scripts.

Le code exécuté est:
alert($().SPServices.SPGetCurrentSite());
Si tout va bien, ce code affiche un message avec l’URL complète de votre site.

Enregistrez vos modifications faites dans le fichier VerifierSPservices.js.

Uploadez aussi votre fichier VerifierSPservices.js dans la bibliothèque Scripts.

Une fois le fichier VerifierSPservices.js uploadé, faites un clic-droit dessus puis Copier le raccourci. Dans un instant, vous aurez besoin de coller le chemin.

Pour tester le bon fonctionnement du script, vous allez utiliser la page Test, créée dans le tutoriel jQuery. Si vous n’avez plus de page Test, consultez le tutoriel pour en créer une.

Ouvrez un nouvel onglet dans votre navigateur puis allez sur la page d’accueil de votre site puis cliquez sur Actions du site puis Afficher tout le contenu du site.

Cliquez sur la bibliothèque Pages du site.

Dans le volet de gauche, cliquez sur le lien Test. Si un message jQuery s’affiche, fermez-le.

Cliquez sur Actions du site puis Modifier la page.

Avec la souris, survolez le composant Editeur de contenu pour faire apparaître son menu d’édition:
Composant webpart editeur de contenu
Cliquez sur Modifier le composant Webpart: sur la droite de l’écran, les paramètres de l’Editeur de contenu s’affiche. Si un message jQuery s’affiche, fermez-le.
Sous Lien du contenu, coller le contenu du presse-papier. Normalement, il contient l’emplacement du fichier VerifierSPservices.js.

Ensuite, cliquez sur le bouton OK.

Vous devez voir une fenêtre qui s’affiche en indiquant l’URL du site.

Enregistrez votre page: le message s’affiche à nouveau.