A while back I blogged about Creating DotNetNuke Scheduled Jobs and promised a "part two" article, this is that article. In the previous installment I talked about the process of creating and manually installing a scheduled job. This article is designed to take this to the next step and discuss how you interact with the Scheduler System to handle installation and other validation methods of scheduled jobs. I will explain the finer points in regards to checking to see if a job exists and creating or modifying a job.
Getting Started
Before I get too far into the example code. For all of the below code samples please be sure that you have a using statement to include the namespace DotNetNuke.Services.Scheduling as all examples will assume this namespace is included. Also all of these examples assume that you have a constant defined called "Assembly_Name" that contains the fully qualified name and assembly for your Scheduled Job.
For example for my Scheduled SQL Jobs Module the value is "ICG.Modules.ScheduledSqlJobs.Components.JobRunnerTask, ICG.Modules.ScheduledSqlJobs". Having both of these items handled before we get into the specifics will help make things easier to understand.
Checking If Job Installed
One of the most common activites when working with Scheduled Jobs is making sure that the user actually has the job configured in their install. Thankfully there is a simple API method to handle this check.
ScheduleItem oItem =
SchedulingProvider.Instance().GetSchedule(Assembly_Name, "");
if(oItem != null)
//Job exists, can do other work from here
else
//Job not configured.
As you can see it is very easy to request a copy of the ScheuleItem by assembly name. The second parameter in this example is the "ServerName" which by default is not configured unless uses are in a load balanced environment and restricting jobs to a single server.
Once you have the ScheduleItem, you can make any needed modifications or checks. The most common properly to check once you know that the job exists is the value of the "Enabled" properly which actually allows the job to execute on the server.
Creating The Job
If you find out that the job is not yet installed on the target DotNetNuke installation, you can use the following snippet to create the job.
ScheduleItem oItem = new ScheduleItem();
oItem.CatchUpEnabled = false;
oItem.Enabled = true;
oItem.NextStart = System.DateTime.Now.AddMinutes(4);
oItem.RetainHistoryNum = 60;
oItem.RetryTimeLapse = 30;
oItem.RetryTimeLapseMeasurement = "m";
oItem.ScheduleSource = ScheduleSource.NOT_SET;
oItem.TimeLapse = 30;
oItem.TimeLapseMeasurement = "m";
oItem.TypeFullName = Assembly_Name;
SchedulingProvider.Instance().AddSchedule(oItem);
The settings that you see here are the exact same items that you work in via the interface. In my example I set the next run time to 4 minutes from the current time and the retry interval for 30 minutes. This allows you to quickly configure the job and install it on the target machine.
This blog post is cross-posted from my personal blog.