I ran across a feature of SharePoint a few weeks ago that I wanted to share: the SPWebApplication.Properties and SPWeb.Properties property bags. These property bags can be used for many different needs, but I see a great application for them with feature activation/deactivation.
At my current client we have almost a dozen features that make direct modifications to the web.config files of our web applications (see below for excellent link on making changes to the web.config files.) Some of these modifications are simple additions and can be retracted with no residual effects. Others are modifications to existing values and lose whatever was previously there. Since we are not concerned about having to return a web application to the original state it has not been a problem to lose those existing values. What if we didn’t have to lose those existing values though?
After discovering these available property bags I was interested in trying to store existing values during activation and then restoring them during deactivation. All of our web.config changing features are scoped to the web application level, so I investigated the SPWebApplication.Properties piece first.
// ...inside web app feature activation code
SPWebApplication webApp = (SPWebApplication)properties.Feature.Parent;
string existingValue = ... //get existing value from web.config
// reference property later
string savedProperty = webApp.Properties["mySetting"];
Accessing SPWeb.Properties was just as easy except that I referenced the web application differently. Since the feature is scoped to the web, the Feature.Parent will be an SPWeb instance instead of SPWebApplication. Follow this pattern instead.
SPWeb web = (SPWeb)properties.Feature.Parent;
So there you have it, a nice way to store values at the web application and web levels for whatever needs you may have. Given the timeframe at my client we may not have time to implement this update, but it’s good to know that it exists for future reference if nothing else. Wictor Wilen (linked below) has a concise write-up about some additional options available for storing data for SharePoint along with explanations of limitations. Feel free to leave feedback if you found this post helpful.
How To: Modify the web.config file in SharePoint using SPWebConfigModification
Six ways to store settings in SharePoint