PROGRAMMATICALLY CREATE THUMBNAIL PHOTO ON SHAREPOINT USERS PROFILES

Vous connaissez surement la commande powershell : Update-SPProfilePhotoStore.

Cette commande bien pratique, permet de redimensionner les images des profils utilisateurs lorsque celles-ci sont positionnées par code. Voir https://kouilb.wordpress.com/2010/09/10/import-des-photos-du-profil-sharepoint-2010/

Tout cela est très bien lorsque l’on fait du PowerShell.

Mais lorsque l’on fait des mises à jour des photos des utilisateurs par programmation il n’est pas pratique de recourir à une commande PowerShell.

J’ai donc récupéré le code exécuté par la commande Update-SPProfilePhotoStore (merci ILSpy) et j’en ai fait une classe C# Helper (voir document  ci-joint en bas de page).

 

Principe des photos de profils SharePoint

Pour rappel, lorsqu’un utilisateur ajoute une photo dans son profil SharePoint. Celle-ci est stockée dans la bibliothèque d’image « Users Photos » à la racine de la collection de site MySite.

La photo sélectionnée par l’utilisateur est tout d’abord redimensionnée selon trois formats (300px, 72px et 48 px).

Attention les formats changent entre SharePoint 2010 et 2013.

Les images sont stockées avec le login de l’utilisateur suivi d’un suffixe :

  • _LThumb pour le format 300px
  • _MThumb pour le format 72px
  • _SThumb pour le format 48px.

 

Exemple :UsersPhoto

Enfin le profil utilisateur utilise l’url de l’image au format Medium pour la propriété « PictureUrl ».

 

Le code

La classe Helper

Tout d’abord, la classe Helper. Je n’ai rien inventé tout est repris de la commande PowerShell, mais petite explication quand même 🙂

 

On commence par écrire quelques propriétés et méthodes pour récupérer les largeurs définies (300 px, 72px et 48px) et les suffixes associés.

HelperImage1

Puis la méthode de resize « CreateThumbnail », je l’ai adapté pour quelle prenne en paramètre l’image d’origine en tableau de byte.

Elle prend donc en paramètre :

  • L’image à redimensionner (Byte[] OriginalFile)
  • La largeur souhaitée (int idealWidth)
  • La hauteur souhaitée (int idealHeight)
  • Le répertoire ou la docLib où enregistrer l’image redimensionnée (SPFolder folder)
  • Le nom de l’image redimensionnée (string fileName)

HelperImage2

L’utilisation

J’utilise un travail du minuteur SharePoint pour réaliser la mise à jour des photos.

Je récupère la liste de stockage des Photos (dans le MySite).

Resize1

Les photos sont stockées dans une base de données métier (Oracle).

Je récupère le login (samAccountName) et la photo au format byte[].

Resize2

Je récupère le profil SharePoint (attention la récupération est réalisée à l’aide d’une autre classe Helper)

Resize3

Je réalise le redimensionnement dans les 3 formats.

Resize4

Je viens modifier le profil utilisateur pour utiliser le format medium.

Resize5

Lien pour télécharger les fichiers sources : SPHUserProfilePhoto.cs , ImportHermesPhoto.cs

 

Vous avez tout pour réaliser une synchronisation des photos SharePoint à partir d’une base de données métier.

 

Damien NOBLET

%d blogueurs aiment cette page :