Publié samedi 7 mai 2011 14:04 par Arnault Nouvel

SharePoint : Gestion des paramètres applicatifs dans le Property Bag

sharepoint-server

Dans la plupart des développements SharePoint, il est nécessaire de stocker des paramètres applicatifs (chemin d’un répertoire temporaire, url d’un web service, clé de série d’un composant tiers, etc.). Le reflexe habituel des diverses équipes que j’ai pu côtoyer est de créer de nouvelles entrées dans la section AppSettings du Web.Config. Je préfère en général utiliser une autre approche que nous allons évoquer aujourd’hui, le property bag.

Tout d’abord, pourquoi faudrait-il éviter de stocker un paramètre dans le Web.Config ?

  • Déployer le paramètre provoque un redémarrage de l’application web
  • Modifier sa valeur provoque aussi un redémarrage de l’application web
  • La valeur est inaccessible hors du contexte la web application : la central admin, aux SPJobDefinition, scripts PowerShell, etc. ne pourraient pas y accéder de manière directe 
  • Le paramétrage à répliquer sur chaque frontal de la ferme (risque d’erreur de saisie)
  • Problématiques liées aux backup/restore

Dans SharePoint, la quasi totalité des paramètres se configurent à l’aide l’interface web (centrale admin, ou paramètres du site pour les fonctionnels) ou de lignes de commandes (stsadm ou PowerShell). Il parait donc naturel de faire de même avec les développements spécifiques. Je stocke donc toujours mes paramètres applicatifs dans le property bag.

Les avantages sont multiples :

  • Les paramètres peuvent être associés à un périmètre précis : Application web, mais aussi ferme, collection de sites, site, liste et élément de liste.
  • Ils peuvent être modifiés sans nécessiter de redémarrage de l'application web
  • Ils sont persisté dans la base de données SharePoint, et sont donc backupés avec
  • Ils sont administrables par interface graphique (dev) ou par ligne de commande PowerShell
  • Les modifications n’ont pas à être faites sur chaque serveur

Administration par ligne de commande PowerShell

Afin d’éviter le développement d’une page de configuration pour ces paramètres, on aurait pu proposer une administration avec PowerShell. Voici un exemple qui récupère et redéfinit un paramètre :

image


 

Administration avec une interface générique

Le projet communautaire SharePoint Property Bag Settings permet l’administration de tous les property bags de la ferme depuis l’administration centrale.

image

L’interface proposée est générique, efficace, mais réservée aux administrateurs de ferme.

Téléchargement :

 

Administration personnalisée avec une interface spécifique

Pour une interface administration personnalisée, on pourra développer une CustomAction et une page applicative, ou tout simplement une web part. C’est l’approche que j’utilise le plus souvent. En voici un exemple.

Déclaration de la custom action :

image

On obtient alors une nouvelle dans les paramètres du site :

image

Page applicative cible :

image

Pour la partie graphique de la page, on peut s’inspirer des pages présentes nativement dans 14\TEMPLATE\LAYOUTS, comme SiteNavigationSettings.aspx. Cela permet de conserver le look & feel de SharePoint.

Enregistrement des données dans le property bag :

protected void Validate_Click(object sender, EventArgs e)

{

    if (!Page.IsValid)

        return;

 

    //Récupération du property bag de la collection de sites

    SPPropertyBag properties = Site.RootWeb.Properties;

 

    //Enregistrement des valeurs

    properties["Account_GoogleAnalytics"] = txtGoogleAnalytics.Text;

    properties["Account_ShareThis"] = txtShareThis.Text;

    properties["Search_Site_Url"] = txtSiteSearch.Text;

    properties["Search_Catalog_Url"] = txtCatalogSearch.Text;

    properties["WebService_Catalog_Url"] = txtTrainingWebServiceUrl.Text;

 

    //Persiste les modifications dans la base de données

    properties.Update();

 

    //Redirection vers l'URL source

    SPUtility.Redirect(Web.Url, SPRedirectFlags.UseSource, HttpContext.Current);

}

Récupération de la valeur d’un paramètre :

//Récupération de l'adresse du web service

String catalogServiceUrl = site.RootWeb.Properties["WebService_Catalog_Url"];

 

 

Autres alternatives

Nous avons parlé du web.config, du property bag, mais il existe 2 autres options intéressantes pour le stockage de paramètres : le Hierarchical Object Store, et les listes SharePoint.

Vous trouverez ici un comparatif de ces 4 techniques  : http://msdn.microsoft.com/en-us/library/ff649798.aspx

 

Arnault Nouvel
Winwise

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Classé sous ,

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01