Automatically Running a Function Every So OftenBy Anthony Biondo
Have you ever had certain tasks that you wanted to automate throughout your Web site? Perhaps there was a specific function in an ASP script that you would like executed every hour, or once a day? If it is essential that this task occur every hour, on the hour, or exactly once a day at a particular time, then read Automating Tasks with WSH. This article focuses on how to have certain tasks executed roughly every hour, or roughly once a day. The benefit of this article over Automating Tasks with WSH is that with the previous article you need to be able to setup the Windows Scripting Host (WSH), which means you need access to the Web server. With this article, you just need to add some code to each of your ASP pages!
You may be wondering what types of tasks can be executed sporadically, not on a rigid schedule. I know I have written a lot of applications where I've said, "I wish that I could automatically delete the old records in this forum," or, "I wish old greeting cards can be archived and deleted." Tasks such as these are ones that do not require a precise schedule. For example, deleting those old greeting cards need not happen exactly once an hour. If it happens at noon, and then at one thirty, and then at 2:45, it's not a big deal. A good example of when code like this would be useful can be seen in this article: A Real-World Example of Caching Data in the Application Object. In that article, database-generated HTML code that takes a long time to generate is executed once every 15 minutes or so. It employs similar techniques as described in this article to determine when to bust the cache and requery the database.
The approach I took was to make it possible to execute code on a timed basis, specifically once an hour or once a day. This is all managed with an application variable that records when the last time a particular function was executed through an ASP page. If, when an ASP page is loaded, a certain amount of time has passed since the last time the function was executed, the application variable is updated with the current time and the function is called.
Another application variable,
execution_feq, specifies how often a particular
function should execute. The code below checks to see if the variable
is set to a
D or an
H. If a
D is specified we will
execute code on a daily basis; conversely, specifying a
H will execute code on
a daily basis.
In the code below we check to see if the application variable is
null using the
function. If the application variable is
null, then it is the first time we
are executing the script. We set the application variable equal to today’s date.
If the application variable is not
null we do a check to see if the application
variable is equivalent to today’s date. If the dates are not equal, we execute the code.
If the dates are the same we do nothing (since that means that the function has been called at
an earlier time today).
So, if you have an ASP page that contains a function that you only want to have executed
every so often, you can cut and paste the above code into your script and change the
fn_ToExecute() to the name of the function you want run intermittenly.
Now that we have looked at how to have code execute daily, let's look at how to have a function
that is called hourly. The following code has the same idea behind it; it simply uses some
other techniques to get the hour. We first check to see if the application variable is
null. If the application variable is
null we populate the
application variable with the current hour. We get the hour by getting the digits before the
first colon using the
function. If the application variable is not
null we compare the hour currently
with the hour saved in our application variable. If the hour is different, we execute the
code otherwise we do nothing.
This script is great for he times when you want to automate certain tasks. I keep this code in an include file and usually include this code on a homepage, or a page that I know will be visited frequently. This way the code has a higher percentage of being executed each day. Since the ASP page itself needs to be visited to have the above code executed, if you do not have any visitors visiting your Web site, the scheduled function will never be called!