Web Config Aendern
In einem FeatureReceiver? die Web.Config ändern (MOSS 2007, WSS 3.0)
Oft kommt es vor dass man in einem selbst entwickelten EventHandler Konfigurationseinstellungen lesen möchte.
Dafür eignet sich z.B. die configuration/appSettings-Sektion, wie z.b.
<configuration>
<appSettings>
<add key="MyURL" value="http://meine.tolle.url.de" />
</appSettings>
</configuration>
die man sehr leicht auslesen kann:
string setting = ConfigurationSettings.AppSettings["MyURL"];
Das Ganze funktioniert auch für Event Handler. Nach der Installation der Solution sind aber die benötigten Keys noch nicht gesetzt.
Um dem Admin zu ersparen dies von Hand zu tun, um dem EventHandler? brauchbare default-Werte mitzugeben und um die eigene Assembly unter SafeControls
einzutragen kann man die web.config
im FeatureActivated Event abhandeln:
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
try
{
Trace.WriteLine("Try to modify web.config");
SPWebApplication myWebApp = ((SPWeb)properties.Feature.Parent).Site.WebApplication;
WebConfigModifier mod = new WebConfigModifier(myWebApp, OwnerString);
mod.AddModification(
"SafeControl[@Assembly='Elsni.WorlsdBestProgram, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e7639c2c71f2f003']",
"configuration/SharePoint/SafeControls",
"<SafeControl Assembly='Elsni.WorlsdBestProgram, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e7639c2c71f2f003' Namespace='GFA.UniversalListSyncSolution' TypeName='*' Safe='True' />"
);
mod.AddModification(
"add[@key='PropertiesSiteUrl']",
"configuration/appSettings",
"<add key=\"PropertiesSiteUrl\" value=\"http://iei-developersy/sites/gfaadmin/\" />"
);
mod.Update();
Trace.WriteLine("Done.");
}
catch (Exception ex)
{
Trace.WriteLine("ERROR while activating feature: " + ex.Message);
}
}
});
}
Beim daktivieren oder deinstallieren des Features sollte die web.config wieder aufgeräumt werden:
// -----------------------------------------------------------------------------
/// <summary>
/// Deactivate our web.config
/// </summary>
/// <param name="properties"></param>
public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
CleanupWebConfig(properties);
}
// -------------------------------------------------------------------------------------
public override void FeatureUninstalling(SPFeatureReceiverProperties properties)
{
CleanupWebConfig(properties);
}
// -------------------------------------------------------------------------------------
private void CleanupWebConfig(SPFeatureReceiverProperties properties)
{
Trace.WriteLine("Cleaning up Web.Config");
SPSecurity.RunWithElevatedPrivileges(delegate()
{
try
{
SPWebApplication myWebApp = ((SPWeb)properties.Feature.Parent).Site.WebApplication;
WebConfigModifier mod = new WebConfigModifier(myWebApp, OwnerString);
mod.RemoveModifications();
mod.Update();
}
catch (Exception ex)
{
Trace.WriteLine("ERROR while deactivating feature: " + ex.Message);
}
});
}