More than a year ago, I released a beta of Scheduler.cfc. Then I promptly forgot to release a full version. So, now I mean to correct that oversight.
Once it is set up, Scheduler.cfc allows any component to schedule a task for itself. This can really grant more power to many components than they would otherwise have.
The code to instantiate Scheduler (into Application scope) is as follows (assuming a datasource stored in the variable "mydsn"):
<cfset Application.Scheduler = CreateObject("component","Scheduler").init(Application.DataMgr)>
The essential step to get Scheduler to work correctly is that you must call the "runTasks" method at least once an hour. I typically do this by creating on page on my site that is called using a ColdFusion scheduled task. The code for that page is as follows:
In one component, I make sure that it has a task every hour from 6 AM to 8 PM. So, I have the following code in the init method:
<cfargument name="Scheduler" type="any" required="yes">
<cfset variables.Scheduler = arguments.Scheduler>
<cfinvoke component="#variables.Scheduler#" method="setTask">
<cfinvokeargument name="Name" value="Send Articles Email">
<cfinvokeargument name="ComponentPath" value="sys. ArticleNotices">
<cfinvokeargument name="Component" value="#this#">
<cfinvokeargument name="MethodName" value="sendMessages">
<cfinvokeargument name="Interval" value="hourly">
<cfinvokeargument name="hours" value="6,7,8,9,10,11,12,13,14,15,16,17,18,19,20">
In this example, the path of the component is sys.ArticleNotices. It doesn't really matter if this path is accurate, only that the string is unique for every component.
This code will cause the "sendMessages" method of the component to be called every hour from 6 AM to 8 PM.
I could have also added an "Args" argument and passed in a structure of arguments that I wanted to be passed to the method when it is called.
Beyond the power that Scheduler.cfc offers to components is the advantage of tracking scheduled tasks that it offers. It stores the tasks themselves in a table named "schTasks" and it stores a record for every time that a scheduled task is called in "schActions".