Creating "retry on fail" jobs (self-rescheduling jobs)

// Normally this job  runs daily at 11:30. It executes several database stored procedures after
// all required files arrived and successfully loaded into database. However, if some files "failed"
// to arrive on time,  this jobs reschedules itself to repeat file check again in 30 minutes. When
// all required files exist, it restores original schedule and calls another job that actually
// loads files and executes stored procedures.

Dim found, boolean

// ... check for files
CHECK_ACCOUNTS:
        FileExists( "k:\network\data\account.dat", found )
        if( found, CHECK_HOLDINGS, RETRY_LATER )
CHECK_HOLDINGS:
        FileExists( "k:\network\data\holding.dat", found )
        if( found, CHECK_TRADES, RETRY_LATER )
CHECK_TRADES:
        FileExists( "k:\network\data\trade.dat", found )
        if( found, START_DB_LOAD, RETRY_LATER )
START_DB_LOAD:
        JobRun( "Daily Database Load" )
TOMORROW_SCHEDULE:
        Dim today, date
        Dim tomorrow, date
        Dim start_time, datetime
        Today( today )
        DateAdd( today, 1, tomorrow )
        DateTime( tomorrow, 11:30,  start_time )
        JobModify( "File Watcher", "START_TIME",  start_time )
        // all done
        exit

RETRY_LATER:
        Dim today, date
        Dim system_time, time
        Dim start_time, datetime
        Today( today )
        Now( system_time)
        DateTime( today, system_time,  start_time )
        DateTimeAdd( start_time, 1800, start_time )
        JobModify( "File Watcher", "START_TIME",  start_time )