Ordonner les propriétés des profils utilisateurs 

Admin, Office Server 2007, Sharepoint

Je me suis retrouvé dans une situation comique : sur une ferme MOSS 2007, le nombre de propriétés de profils existantes dans le Shared Service Provider, était d'environ 150. Seulement, l'ordre d'apparition ne correspondait pas à mes besoins. En effet, l'ordre des propriétés listées dans le SSP, comme ci dessous ...

 

 

... va influer sur l'affichage dans les profils utilisateurs (les MySite et les profils publics) de ces mêmes propriétés :

 

 

On voit bien que la propriété "Custom Prop" apparaît en première position, comme dans la partie administrative.

 

Ceci se voit également dans la page d'édition de ces propriétés par un utilisateur :

 

 

 

 

Pour changer cet ordre d'affichage, on utilise les petites flêches ("change order" sur la première capture d'écran) pour faire monter / descendre les éléments, ce qui n'est vraiment pas pratique, surtout si un élément tout en bas doit être remonté ... tout en haut.

 

Heureusement, qu'une fois de plus, l'API de SharePoint va nous permettre d'automatiser cette tâche en un minimum d'effort.

 

Tout ce dont nous avons besoin se trouve dans l'objet UserProfileManager, dans l'assembly Microsoft.Office.Server.dll.

 

Dans un premier temps, il faut créer une instance de ce type, en utilisant le contexte courant.

 

   1:  using (SPSite site = new SPSite("http://server"))
   2:  {
   3:           UserProfileManager ump = new UserProfileManager(ServerContext.GetContext(site));
   4:          ../..
   5:  }

 

L'objet UserProfileManager possède une référence vers une collection contenant toutes les propriétés des profils disponibles dans le SSP.

Petite remarque, on peut récupérer les propriétés et les sections ("Details" dans la capture 1) en utilisant PropertiesWithSection ou que les propriétés en utilisant Properties. Pour jouer avec les ordres d'apparition, il est préférable de retourner tous les éléments.

Petite remarque 2, dans le SDK, il est dit d'utiliser plutôt la classe UserProfileConfigManager, car UserProfileManager est supposée être en lecture seule. Je n'ai cependant pas réussi à faire fonctionner tout cela avec UserProfileConfigManager.

 

La collection ainsi retournée a une méthode qui nous intéresse, car elle va nous permettre de changer l'ordre d'apparition d'une propriété:

 

   1:  PropertyCollection properties = ump.PropertiesWithSection;
   2:  string property = "AboutMe";
   3:  int order = 30;
   4:  properties.SetDisplayOrderByPropertyName(property, order);
   5:  // Et surtout, à ne pas oublier ....
   6:  properties.CommitDisplayOrder();

 

Dans un premier temps je récupère la référence à ma collection de propriétés, puis je modifie l'ordre d'une d'entre d'elle en utilisant son petit nom, et enfin je sauvegarde ma modification ...

 

Plutôt que de passer du temps à cliquer sur les flèches, j'ai opté pour la solution "lazy developer", plus élégante et surtout qui va nous ouvrir une porte bien intéressante .... porte que j'ouvrirai dans très peu de temps ...

 

- Julien

 
Posté le 10 Apr 08
Commentaire (0)  |  Url de Trackback  | Lien vers ce message (0) | Marquez ce billet avec:        
 

Liens vers ce message

Commentaires


Nom *:
URL:
Email:
Commentaires:

© 2011 Julien Chomarat - Design based on Blue World