2010-06-09 4 views
6

Une chose qui m'a rendu fou à propos de SharePoint2007 est l'incapacité apparente d'avoir des paramètres définissables qui s'appliquent spécifiquement à un site ou une collection de sites lui-même, et non le contenu. Je veux dire, vous avez des paramètres prédéfinis comme le logo du site, le nom du site, et bien d'autres choses, mais il ne semble y avoir aucun endroit pour ajouter de nouveaux types de paramètres.Quelle est la méthode appropriée pour stocker des variables globales au niveau du site dans un site SharePoint?

L'application sur laquelle je travaille doit pouvoir créer plusieurs types de «collections de sites de projet» qui suivent un modèle de base, mais certains paramètres supplémentaires s'appliquent spécifiquement à cette collection de sites et à cette seule. En plus du nom de site standard, nous devons également définir le numéro de projet, le nom du projet et le nom du client. Et compte tenu des demandes de certains de nos clients, nous arrivons également à un point où nous devons avoir des paramètres configurables qui modifient le fonctionnement de certains flux de travail, comme si les fichiers sont marqués avec des lettres ou des nombres.

Notre solution actuelle, qui me fait hésiter, a été de stocker un fichier XML sur le serveur SharePoint. Ce fichier contient un noeud pour chaque collection de sites, identifié par l'URL du site racine. A l'intérieur du noeud, tous les éléments doivent être définis pour cette collection de sites. Lorsque nous en avons besoin, nous devons accéder au fichier XML (qui aura toujours besoin de SPSecurity.RunWithElevatedPrivileges pour accéder aux fichiers directement sur le serveur) chaque fois pour le charger et récupérer les données. Il y a beaucoup de processus automatisés qui vont devoir faire cela, et je suis hésitant quant à la stabilité de cette méthode quand nous atteignons des centaines de sites avec des milliers de fichiers qui exécutent des dizaines de milliers de workflows, tous désireux d'accéder à ce fichier. Peut-être sont-ils des soucis infondés, mais je préfère m'inquiéter que de risquer de tout casser en quelques années. Je regardais dans l'objet SPWeb et a trouvé la table de hachage AllProperties. Cela ressemble au genre de chose qui pourrait fonctionner, mais je ne sais pas dans quelle mesure il est prudent de modifier cela. J'ai lu à travers MSDN et le WSS SDK, mais n'a rien trouvé qui clarifié sur l'ajout de propriétés complètement nouvelles dans AllProperties. Est-il sûr d'utiliser AllProperties pour ce genre de chose? Ou existe-t-il encore une autre caractéristique qui me manque, qui pourrait gérer le concept de variables globales sur la collection de sites ou la portée du site?

Répondre

5

La méthode recommandée pour le faire est d'utiliser PropertyBag (Les paires clé/valeur) à travers les .Properties de SPFarm, SPWeb.RootWeb (pour les collections de sites), SPWeb, SPList etc (selon la portée dont vous avez besoin).

MSDN - Managing Custom Configuration Options for a SharePoint Application

Il y a une production de code prêt disponible dans le cadre du

MSDN - The SharePoint Guidance Library

Voir Hierarchical configuration manager

Cela vous donne un accès programmatique à lire/écrire ces valeurs. Si vous voulez le faire sans utiliser la bibliothèque de guidage, alors vous utiliserez quelque chose comme le code suivant.

SPWeb web = SPContext.Current.Web; 
if (web.Properties.ContainsKey("MyProperty")) 
    string myProperty = web.Properties["MyProperty"]; 

Si vous voulez une interface utilisateur pour permettre aux administrateurs de fixer facilement les valeurs utilisent alors soit SharePoint Designer (urghhhh!) Ou quelque chose comme SharePoint Property Bag Settings

+0

J'ai écrit une page d'application personnalisée pour la définition de ces valeurs, donc heureusement pas SharePoint Designer. Merci pour les articles, il a non seulement mis en évidence les options, mais a également aidé à clarifier l'applicabilité de toutes les propriétés contre les propriétés. Cela ressemble à la voie à suivre! –

+0

Plus de confusion pour vous - http://trentacular.com/2009/06/sharepoint-the-wicked-spwebproperties-propertybag/ Je ne suis pas sûr d'être d'accord avec l'auteur - je pense que Properties est la voie à suivre - il vaut la peine de noter la sensibilité à la casse cependant. – Ryan

1

Le Propertybag peut être utilisé pour stocker des propriétés de type clé/valeur. Je pense que cela est destiné à ce que vos objectifs semblent être.

Personnellement j'ai plus besoin de propriétés de collecte intersites (tels que db chaînes de connexion) et j'utiliser this pour stocker ceux-ci.

Questions connexes