[SPOL – On Premise] Filtrer une vue Sharepoint avec uniquement les documents assignés à un groupe dont fait partie l’utilisateur courant

[SPOL – On Premise] Filtrer une vue Sharepoint avec uniquement les documents assignés à un groupe dont fait partie l’utilisateur courant

Problème

Sur Sharepoint Online, il n’est pas possible, avec l’interface de paramétrage, de mettre en place un filtre dans une liste pour n’afficher que les documents d’un groupe d’utilisateur dont l’utilisateur courant fait partie.

La solution est d’éditer la requête du filtre sous Sharepoint Designer, après avoir paramétré la vue pour qu’elle soit la plus proche de la vue définitive (sans le filtre d’utilisateurs / groupe bien sur). C’est écrit en langage CAML ( ou Collaborative Application Markup Language, cf  https://docs.microsoft.com/en-us/sharepoint/dev/schema/query-schema ).

Solution

Il faut d’abord avoir paramétré le site pour l’ouvrir sous Sharepoint Designer. Les droits doivent être ouverts pour permettre la connexion de Sharepoint Designer. A noter qu’il y a une manipulation supplémentaire sur le site a une authentification renforcée (avec Microsoft Authenticator). Voir l’article spécifique sur le sujet.

Une fois votre site ouvert dans  Sharepoint Designer, aller dans « Listes et Bibliothèques » et double cliquez sur votre liste.

Dans la page qui s’ouvre, en haut à droite, cliquer avec le bouton de droite sur la vue que vous souhaitez modifier puis « Modifier en mode avancé ».

Un éditeur HTML s’ouvre. Avant de modifier a requête, il est recommander de sauvegarder  le code de toute la page (par copier coller) pour pouvoir revenir en arrière le cas échéant.

Recherchez ensuite le balise « <QUERY>…</QUERY> ». Il est possible d’insérer des retour chariots et tabulation pour la rendre plus lisible. C’est ce qui a été fait ici, ce qui permet de voir que la vue est triée par « FileLeafRef » et ne s’affiche que si l’Auteur est l’utilisateur courant (c’est un exemple.. ce peut être beaucoup plus simple pour vous).

[pastacode lang= »haml » manual= »%3CQuery%3E%0A%09%3COrderBy%3E%0A%09%09%3CFieldRef%20Name%3D%22FileLeafRef%22%2F%3E%0A%09%3C%2FOrderBy%3E%0A%09%3CWhere%3E%0A%09%09%3CEq%3E%0A%09%09%09%3CFieldRef%20Name%3D%22Author%22%2F%3E%0A%09%09%09%3CValue%20Type%3D%22Integer%22%3E%0A%09%09%09%09%3CUserID%20Type%3D%22Integer%22%2F%3E%0A%09%09%09%3C%2FValue%3E%0A%09%09%3C%2FEq%3E%0A%09%3C%2FWhere%3E%0A%3C%2FQuery%3E » message= » » highlight= » » provider= »manual »/]

Nous voulons mettre en place un filtre qui n’affiche que les contenus qui sont dans le groupe de l’utilisateur courant. Le groupe utilisateurs devant avoir accès à ces contenus est stocké dans une colonne « Groupe Sharepoint Processus » (internal name : Groupe_x0020_SharePoint_x0020_Processus). Voici la requête modifiée pour filtrer la vue , en n’affichant que les document accessibles au groupe correspondant à l’utilisateur courant.

[pastacode lang= »haml » manual= »%3CQuery%3E%0A%09%3COrderBy%3E%0A%09%09%3CFieldRef%20Name%3D%22FileLeafRef%22%2F%3E%0A%09%3C%2FOrderBy%3E%0A%09%3CWhere%3E%0A%09%09%3COr%3E%0A%09%09%09%3CMembership%20Type%3D%22CurrentUserGroups%22%3E%0A%09%09%09%09%3CFieldRef%20Name%3D%22Groupe_x0020_SharePoint_x0020_Processus%22%2F%3E%0A%09%09%09%3C%2FMembership%3E%0A%09%09%09%3CEq%3E%0A%09%09%09%09%3CFieldRef%20Name%3D%22Groupe_x0020_SharePoint_x0020_Processus%22%2F%3E%0A%09%09%09%09%3CValue%20Type%3D%22Integer%22%3E%0A%09%09%09%09%09%3CUserID%2F%3E%0A%09%09%09%09%3C%2FValue%3E%0A%09%09%09%3C%2FEq%3E%0A%09%09%3C%2FOr%3E%0A%09%3C%2FWhere%3E%0A%3C%2FQuery%3E » message= » » highlight= » » provider= »manual »/]

Réinjectez le code prélevé et modifié, sauvez la Page et vérifier que le filtre fonctionne dans l’affichage normal Sharepoint. Vous devez faire attention à ne pas modifier de code en dehors des balises « <QUERY>…</QUERY> ».

Par la suite, il  restera possible de continuer de modifier la vue avec l’édition graphique de Sharepoint pour ajouter des champs, etc.. Le filtre personnalisé reste en place.

Toutefois, il est préférable de vérifier que le filtre n’ait pas sauté si vous modifiez les filtres avec l’éditeur graphique, Sharepoint pouvant ne pas prendre en charge les conditions spécifiques que vous avez ajoutées.

Cette méthode devrait également marcher de Sharepoint 2013 à 2019 en affichage classique.

Trucs et astuces

Formatage

A noter que Sharepoint sauve le CAML sous forme agrégée, et nettoie le formatage et l’indentation qui le rend beaucoup moins facile à lire. Il peut être intéressant de disposer d’un outil qui permettre de le rendre lisible avant de le modifier, puis de le recompresser à nouveau avant de le réinjecter dans la page.

C’est outil existe, c’est Notepad ++, éditeur de texte Open Source .  Après installation, il faut aller dans « Modules d’extension », « Gestionnaire de modules d’extension » et ajouter le module « XML Tools ». En effet, CAML, est très roche de la syntaxe XML.

Après avoir sélectionné le texte en CAML à formater, il vous suffira d’aller dans « Modules d’extension » / « XML Tools » / « Pretty Print » pour reformater la requête pour une lecture par un humain, et « Modules d’extension » / « XML Tools » /  « Linearize XML » pour le remettre au format propice à le coller dans votre code de vue.

Édition Graphique : CAML Designer

Si on souhaite vraiment simplifier l’édition CAML, Karine Bosh a développé un outil totalement graphique nommé CAML Designer.  Il fonctionne parfaitement sur Sharepoint Online même avec l’authentification renforcée activée. L’application est téléchargeable ICI et se prend en main en quelques minutes.

Après l’avoir téléchargée, il faut lancer « CamlDesigner2013.exe« . En haut à droite, cliquer sur connexion et sélectionnez le type de serveur Sharepoint souhaité, et l’authentification.

Il vous suffit ensuite de sélectionner la liste Sharepoint (1), la condition à régler (2) , et pour celle sélectionnée basculer les champs ou conditions disponibles (3) en champs ou conditions choisies (4). En sélectionnant CAML (5), vous obtenez le code CAML dans (6).  A noter que l’on peut aussi générer du code pour Powershell, .NET, des webservices Rest, dans la zone (5)..

 

 

 

Partager cette publication

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *