Blogs

DotNetNuke Scheduled Jobs Using the API

17 Apr

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.

tags: DNN, DNN Development
comments powered by Disqus

Content provided in this blog is provided "AS-IS" and the information should be used at your own discretion.  The thoughts and opinions expressed are the personal thoughts of Mitchel Sellers and do not reflect the opinions of his employer.

Connect with Mitchel

I hope the information here has been helpful. To stay connected you can also subscribe to blog updates via email, contact Mitchel about consulting services, or reach out for assistance via CodeMendor

Content Copyright

Content in this blog is copyright protected.  Re-publishing on other websites is allowed as long as proper credit and backlink to the article is provided.  Any other re-publishing or distribution of this content is prohibited without written permission from Mitchel Sellers.