While working on a Timer Job project, I needed a flexible way to store one-time configuration settings. I was using a SharePoint Feature and FeatureReceiver to install and activate the Timer Job, so I decided to use the Feature.XML file as a repository for the initial configuration settings Job.
I used the Properties node of the feature.xml file to store the settings:
| 1 | <Feature xmlns=<span style="color: #006080">"http://schemas.microsoft.com/sharepoint/"</span>...> | 
| 1 |   <Properties xmlns=<span style="color: #006080">"http://schemas.microsoft.com/sharepoint/"</span>> | 
| 1 |     <!-- The name of the timer job (will appear <span style="color: #0000ff">in</span> Central Admin). --> | 
| 1 |     <Property Key=<span style="color: #006080">"JobTitle"</span> Value=<span style="color: #006080">"Your Timer Job Name Here"</span>/> | 
| 1 |     <!-- Connection String that the TimerJob will use --> | 
| 1 |     <Property Key=<span style="color: #006080">"ConnString"</span> Value=<span style="color: #006080">"ConnectionString..."</span>/> | 
| 1 |     <!-- The schedule to run the job <span style="color: #0000ff">in</span> (24 hour format) --> | 
| 1 |     <Property Key=<span style="color: #006080">"Schedule"</span> Value=<span style="color: #006080">"daily at 02:00:00"</span>/> | 
| 1 |   </Properties> | 
| 1 | </Feature> | 
Then, during the FeatureActivated event, I passed those values into the Properties bag on the Timer Job class:
| 1 | <span style="color: #0000ff">public</span> <span style="color: #0000ff">override</span> <span style="color: #0000ff">void</span> FeatureActivated(SPFeatureReceiverProperties properties) | 
| 1 | { | 
| 1 | 
| 1 |     <span style="color: #008000">// Get all the properties from the feature.xml file</span> | 
| 1 |     <span style="color: #0000ff">string</span> jobTitle = properties.Feature.Properties[<span style="color: #006080">"JobTitle"</span>].Value; | 
| 1 |     <span style="color: #0000ff">string</span> connString = properties.Feature.Properties[<span style="color: #006080">"ConnString"</span>].Value; | 
| 1 |     <span style="color: #0000ff">string</span> dailySchedule = properties.Feature.Properties[<span style="color: #006080">"Schedule"</span>].Value; | 
| 1 | 
| 1 |     <span style="color: #008000">// Create the job.</span> | 
| 1 |     CustomTimerJob customTimerJob = <span style="color: #0000ff">new</span> CustomTimerJob((SPWebApplication)properties.Feature.Parent, jobTitle); | 
| 1 | 
| 1 |     <span style="color: #008000">// Set the properties for the job to run properly</span> | 
| 1 |     customTimerJob.Properties.Add(<span style="color: #006080">"ConnString"</span>, connString); | 
| 1 |     customTimerJob.Properties.Add(<span style="color: #006080">"Schedule"</span>, dailySchedule); | 
| 1 | 
| 1 |     <span style="color: #008000">// Set the schedule</span> | 
| 1 |     SPSchedule mainSchedule = SPSchedule.FromString(dailySchedule); | 
| 1 |     customTimerJob.Schedule = mainSchedule; | 
| 1 | 
| 1 |     <span style="color: #008000">// Activate the schedule</span> | 
| 1 |     customTimerJob.Update(); | 
| 1 | 
| 1 | } | 
Then, in the Timer Job’s Execute method, grabbed those settings and used them:
| 1 | <span style="color: #0000ff">public</span> <span style="color: #0000ff">override</span> <span style="color: #0000ff">void</span> Execute(Guid targetInstanceId) | 
| 1 | { | 
| 1 |     <span style="color: #008000">// Set up configuration values</span> | 
| 1 |     <span style="color: #0000ff">string</span> connString = <span style="color: #0000ff">this</span>.Properties[<span style="color: #006080">"ConnString"</span>] <span style="color: #0000ff">as</span> <span style="color: #0000ff">string</span>; | 
| 1 | 
| 1 |     ... | 
| 1 | } | 
I didn’t have a need to make run-time changes to the configuration settings, so this worked out really well. To change the defaults and apply new settings, the process was as simple as:
- Deactivate the feature (uninstalls the Timer Job)
- Change the feature.xml file
- Re-activate the feature














