February 26, 2017

How to develop a Scheduler library for DotNetNuke

1. Create a Visual Basic Class Library project, in project Properties, go to Application tab, and specify the Assembly Name (e.g. NWDS.TestScheduler) (we'll need this later), leave Root Namespace blank.

2. Add the following references:

  • Dotnetnuke.dll
  • Dotnetnuke.SqlDataProvider.dll
  • Microsoft.ApplicationBlocks.Data.dll

3. Delete all the default files from the project

4. Create "Components" folder

5. Go to any of your module folders in App_Code, and copy DataProvider, SqlDataProvider, and Controller classes -- paste those into the "Components" folder from Step 4. Modify methods as necessary. Do not catch any exceptions in your Controller class, let them bubble up to your Scheduler class, and log them there - this will make Debugging a lot easier.

6. Create your business object (if you need one)

7. Add Scheduler class, that inherits from

DotNetNuke.Services.Scheduling. SchedulerClient 

Imports System

Imports System.IO

Imports DotNetNuke

Imports DotNetNuke.Services.Exceptions 

Namespace NWDS.TestScheduler

Public Class Scheduler

        Inherits DotNetNuke.Services.Scheduling.SchedulerClient

        Public Sub New(ByVal objScheduleHistoryItem As DotNetNuke.Services.Scheduling.ScheduleHistoryItem)

            MyBase.new()

            Me.ScheduleHistoryItem = objScheduleHistoryItem

        End Sub

        Public Sub New() 

        End Sub

        Public Overrides Sub DoWork()

            Try

                Me.Progressing()

                Me.ScheduleHistoryItem.Succeeded = True 

                'do work here 

                If SUCCESS Then 

                    Me.ScheduleHistoryItem.AddLogNote("It worked") 

                Else 

                    Me.ScheduleHistoryItem.AddLogNote("Didn't work") 

                End If 

            Catch exc As Exception

                Me.ScheduleHistoryItem.Succeeded = False

                Me.ScheduleHistoryItem.AddLogNote("EXCEPTION: " + exc.ToString)

                Me.Errored(exc)

                LogException(exc)

            End Try 

        End Sub 

    End Class

End Namespace 

8. Build the project, and move .dll file to the /bin folder of your DotNetNuke install

9. Login as Host into your DNN, and go to Host > Schedule

10. In "Add Item to Schedule" form, the most important field is "Full Class Name and Assembly", if your scheduler doesn't run -- chances are you've made a mistake here.

Full Class Name -- name of your Scheduler class (including Namespace), in this example that would be NWDS.TestScheduler.Scheduler

Assembly -- name of the assembly from Step 1, in this example that would be NWDS.TestScheduler

Here's how your Full Class Name and Assembly field should look like:

NWDS.TestScheduler.Scheduler, NWDS.TestScheduler

The rest is easy, enable the schedule by checking the "YES" box, specify the frequency (Time Lapse) (I set this to 1 minute when I test), set "Retain Schedule History" to 10 (for debugging), and click UPDATE.

Check schedule history to see if your scheduler works -- if the history is empty, check Step 10 :)

 

Hope this helps.