You pose a very interesting question. It sounds like Michael has some thoughts about this but I'll throw out my ideas too.
Challenge #1: Only running the jobs every 90 days and on the correct days. By using some logic in the beginning of the application before any jobs are actually generated we can do this. The following solution uses a Global Variable Table to keep track of the last time the series of jobs actually was scheduled. It also uses a series of IF statement to check the other requirements. As soon as a requirement check fails, the logic skips over other processing and generates just JOBX in the application.
Challenge #2: Running JOBX daily and running JOBC/JOBD the day after JOBA/JOBB
See if the following meets your requirements. I have simulated the processing for July 2nd/3rd but have not jumped any further ahead. Simulate thoroughly to make sure it works as you expect. There are more comments than code but I have tried to add enough documentation so that the process can be understood.
APPL COM24MAY
/* CONTROL WHEN JOBS A/B/C/D RUN WITH A VARIABLE. WHEN SET TO
/* 'YESTERDAY' THE JOBS WILL NOT RUN. WILL BE CHANGED TO 'TODAY'
/* WHEN THE PROPER CONDITIONS ARE MET.
RUNJOBAB='YESTERDAY'
RUNJOBCD='YESTERDAY'
GENTIME T90 TODAY
/* DETERMINE IF IT HAS BEEN 90 DAYS SINCE LAST RUN AND IF TODAY IS A
/* VALID DAY. USE A GLOBAL VARIABLE TABLE TO SAVE THE LAST TIME THE
/* JOB RAN. FETCH THE VARIABLE AND TEST IF 90 DAYS HAVE ELAPSED. ALL
/* TESTS ARE SETUP TO BYPASS ADDITIONAL PROCESSING IF THE REQUIRED
/* CONDITIONS ARE NOT MET.
VGET (LASTRUN) TABLE(SAVEDATE) CLANG
/* CHECK TO SEE IF JOBC/JOBD SHOULD RUN TODAY BECAUSE JOBA/JOBB RAN
/* YESTERDAY.
IF YESTERDAY('%LASTRUN') THEN DO
RUNJOBCD='TODAY'
JUMPTO JOBX
ENDDO
/* THE DAYS_FROM FUNCTION RETURNS A POSITIVE NUMBER REPRESENTING THE
/* NUMBER OF DAYS FROM A DATE IN THE PAST. TEST IF IT HAS BEEN 90
/* DAYS SINCE THE LAST RUN. IF NOT, SKIP ALL OTHER PROCESSING.
IF DAYS_FROM('%LASTRUN') LT 90 THEN JUMPTO JOBX
/* %T90DOW# CONTAINS A VALUE WHICH REPRESENTS THE CURRENT DAY OF
/* THE WEEK, STARTING WITH 1 FOR SUNDAY THROUGH 7 FOR SATURDAY. IF
/* DOW# IS 6 (FRIDAY) OR 7 (SATURDAY) THEN JUMP
IF %T90DOW# GT 5 THEN JUMPTO JOBX
/* THE TODAY FUNCTION COMPARES THE SCHEDULE EXPRESSION THAT YOU
/* SPECIFY TO TODAY'S SCHEDULE DATE. IT RETURNS A TRUE OR A FALSE
/* VALUE, DEPENDING ON WHETHER THE EXPRESSION MATCHES TODAY. IT
/* WILL BE USED TO JUMP IF THE CURRENT DAY IS A HOLIDAY OR THE DAY
/* BEFORE A HOLIDAY.
IF TODAY('HOLIDAY') THEN JUMPTO JOBX
IF TOMORROW('HOLIDAY') THEN JUMPTO JOBX
/* WE MADE IT THIS FAR SO HAVE A VALID DATE TO RUN THE WORK.
/* BUILD A VARIABLE TO CAPTURE THE RUN DATE AND SAVE IT.
/* THE VARIABLE WILL BE IF THE FORMAT OF 02APR2012 (DDMMMYYYY).
/* THIS WORKS UNIVERSALLY REGARDLESS OF THE DATEFORM STATEMENT.
/* ALSO SET VARIABLE SO THAT JOBA/JOBB WILL RUN
LASTRUN='%T90DD.%T90MMM.%T90YEAR'
VPUT (LASTRUN) TABLE(SAVEDATE) CLANG
RUNJOBAB='TODAY'
JOBX:
/* NOW DEFINE THE ACTUAL JOBS AND FILE_TRIGGER. HERE, GOING THROUGH
/* THE VERBAL DESCRIPTION THINGS WERE A BIT FUZZY. YOU WILL PROBABLY
/* NEED TO MAKE SOME ADJUSTMENTS.
JOB JOBX LINK
RUN TODAY
RELEASE ADD(JOBA)
RELEASE ADD(JOBB)
RELEASE ADD(JOBC)
RELEASE ADD(JOBD)
ENDJOB
JOB JOBA LINK
RUN %RUNJOBAB
ENDJOB
JOB JOBB LINK
RUN %RUNJOBAB
ENDJOB
JOB FILETRIG LINK
/*CODE THIS AS A FILE TRIGGER. JUST A LINK FOR TESTING...
/*FILENAME C:\ABC\DEF\GHI.TXT
RUN %RUNJOBCD
RELEASE ADD(JOBC)
RELEASE ADD(JOBD)
ENDJOB
JOB JOBC LINK
RUN %RUNJOBCD
ENDJOB
JOB JOBD LINK
RUN %RUNJOBCD
ENDJOB
Hopefully this comes close to satisfying all your requirements. The logic uses generic CLANG statements, no REXX. All you would need to do is define a Global Variable Table (pick your own name) and set the initial value for the LASTRUN variable. You can enter the following from Page Mode:
VTDEFINE SAVEDATE
LASTRUN='02APR2012'
VPUT (LASTRUN) TABLE(SAVEDATE) CLANG
VTLIST SAVEDATE
Let us know if this works as expected.
Gene Budbill
Associate Engineering Services Architect
CA Technologies
From: CA Workload Automation (Mainframe) Global User Community [mailto:
CommunityAdmin@communities-mail.ca.com]
Sent: Thursday, May 24, 2012 1:14 PM
To:
mb.2271275.98175122@myca-email.ca.com
Subject: [CA Workload Automation ESP Edition] Schedule jobs every 90 days
Running CA WA EE R11.3
We are trying to set up a schedule based on the below criteria. Any suggestions would be appreciated.
All of these are mainframe jobs.
jobX runs daily
On 4/2/2012, jobX triggers jobA and jobB
Next day, 4/3/2012, jobX triggers jobC and jobD (but these also wait for a FileTrigger)
90 days after jobA and jobB are run (7/2/2012), we want jobX to trigger jobA and jobB again.
The next day, 7/3/2012, jobX triggers jobC and jobD (but these also wait for a FileTrigger)
After 90 days from last run of jobA and jobB, we start the cycle again.
Restrictions:
jobA and jobB can never run on a FRIDAY, SATURDAY, HOLIDAY or DAY BEFORE A HOLIDAY. They need to wait for a valid Sunday thru Thursday to run.
jobC and jobD are always scheduled to come in after JobA and jobB have run and will also have a requirement for a file to be created on a server.
jobA and jobB must wait at minimum 90 days, from the last time they actually ran, before they can run again.
(They can run between 90 and 95 days from the last time they ran.)
Thanks
Sal
Posted by:sal.costanzo
--
CA Communities Message Boards
98177662
mb.2271275.98175122@myca-email.ca.com