New Community Website

Ordinarily, you'd be at the right spot, but we've recently launched a brand new community website... For the community, by the community.

Yay... Take Me to the Community!

The Community Blog is a personal opinion of community members and by no means the official standpoint of DNN Corp or DNN Platform. This is a place to express personal thoughts about DNNPlatform, the community and its ecosystem. Do you have useful information that you would like to share with the DNN Community in a featured article or blog? If so, please contact .

The use of the Community Blog is covered by our Community Blog Guidelines - please read before commenting or posting.

DotNetNuke Scheduled Jobs Using the API

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
   //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;

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.


Comment Form

Only registered users may post comments.


Aderson Oliveira (22)
Alec Whittington (11)
Alessandra Daniels (3)
Alex Shirley (10)
Andrew Hoefling (3)
Andrew Nurse (30)
Andy Tryba (1)
Anthony Glenwright (5)
Antonio Chagoury (28)
Ash Prasad (37)
Ben Schmidt (1)
Benjamin Hermann (25)
Benoit Sarton (9)
Beth Firebaugh (12)
Bill Walker (36)
Bob Kruger (5)
Bogdan Litescu (1)
Brian Dukes (2)
Brice Snow (1)
Bruce Chapman (20)
Bryan Andrews (1)
cathal connolly (55)
Charles Nurse (163)
Chris Hammond (213)
Chris Paterra (55)
Clint Patterson (108)
Cuong Dang (21)
Daniel Bartholomew (2)
Daniel Mettler (181)
Daniel Valadas (48)
Dave Buckner (2)
David Poindexter (12)
David Rodriguez (3)
Dennis Shiao (1)
Doug Howell (11)
Erik van Ballegoij (30)
Ernst Peter Tamminga (80)
Francisco Perez Andres (17)
Geoff Barlow (12)
George Alatrash (12)
Gifford Watkins (3)
Gilles Le Pigocher (3)
Ian Robinson (7)
Israel Martinez (17)
Jan Blomquist (2)
Jan Jonas (3)
Jaspreet Bhatia (1)
Jenni Merrifield (6)
Joe Brinkman (274)
John Mitchell (1)
Jon Henning (14)
Jonathan Sheely (4)
Jordan Coopersmith (1)
Joseph Craig (2)
Kan Ma (1)
Keivan Beigi (3)
Kelly Ford (4)
Ken Grierson (10)
Kevin Schreiner (6)
Leigh Pointer (31)
Lorraine Young (60)
Malik Khan (1)
Matt Rutledge (2)
Matthias Schlomann (16)
Mauricio Márquez (5)
Michael Doxsey (7)
Michael Tobisch (3)
Michael Washington (202)
Miguel Gatmaytan (3)
Mike Horton (19)
Mitchel Sellers (40)
Nathan Rover (3)
Navin V Nagiah (14)
Néstor Sánchez (31)
Nik Kalyani (14)
Oliver Hine (1)
Patricio F. Salinas (1)
Patrick Ryan (1)
Peter Donker (54)
Philip Beadle (135)
Philipp Becker (4)
Richard Dumas (22)
Robert J Collins (5)
Roger Selwyn (8)
Ruben Lopez (1)
Ryan Martinez (1)
Sacha Trauwaen (1)
Salar Golestanian (4)
Sanjay Mehrotra (9)
Scott McCulloch (1)
Scott Schlesier (11)
Scott Wilkinson (3)
Scott Willhite (97)
Sebastian Leupold (80)
Shaun Walker (237)
Shawn Mehaffie (17)
Stefan Cullmann (12)
Stefan Kamphuis (12)
Steve Fabian (31)
Steven Fisher (1)
Tony Henrich (3)
Torsten Weggen (3)
Tycho de Waard (4)
Vicenç Masanas (27)
Vincent Nguyen (3)
Vitaly Kozadayev (6)
Will Morgenweck (40)
Will Strohl (180)
William Severance (5)
What is Liquid Content?
Find Out
What is Liquid Content?
Find Out
What is Liquid Content?
Find Out