If Status = DSJS.RUNFAILED Or Status = DSJS.CRASHED Then * Fatal Error - No Return
ErrCode=GetJobLogs(JobName,FilePath)
Call DSLogFatal(\IFJBXX_DS10CD\
End
* Setup IFJBXX_DS20 ,run it, wait for it to finish, and test for success JobName = \IFJBXX_DS20\ GoToMainExit = \ GoSub RecoveryCheck
If GoToMainExit = \ GoTo MainExit End
hJob2 = DSAttachJob(\IFJBXX_DS20\
If NOT(hJob2) Then
Call DSLogFatal(\IFJBXX_DS20\ Abort
End
ErrCode = DSSetParam(hJob2, \DATE\
ErrCode = DSRunJob(hJob2, DSJ.RUNNORMAL) ErrCode = DSWaitForJob(hJob2)
Status = DSGetJobInfo(hJob2, DSJ.JOBSTATUS)
If Status = DSJS.RUNFAILED Or Status = DSJS.CRASHED Then * Fatal Error - No Return
ErrCode=GetJobLogs(JobName,FilePath)
Call DSLogFatal(\ IFJBXX_DS20\ End
** Setup IFJBXX_DS30 ,run it, wait for it to finish, and test for success JobName = \IFJBXX_DS30\ GoToMainExit = \ GoSub RecoveryCheck
If GoToMainExit = \ GoTo MainExit End
hJob3 = DSAttachJob(\IFJBXX_DS30\ If NOT(hJob3) Then
Call DSLogFatal(\ IFJBXX_DS30\ Abort End
ErrCode = DSSetParam(hJob3, \DATE\ ErrCode = DSSetParam(hJob3, \DEALDATE\
ErrCode = DSSetParam(hJob3, \ ErrCode = DSSetParam(hJob3, \ ErrCode = DSRunJob(hJob3, DSJ.RUNNORMAL) ErrCode = DSWaitForJob(hJob3)
Status = DSGetJobInfo(hJob3, DSJ.JOBSTATUS)
If Status = DSJS.RUNFAILED Or Status = DSJS.CRASHED Then * Fatal Error - No Return
ErrCode=GetJobLogs(JobName,FilePath)
Call DSLogFatal(\IFJBXX_DS30\ End
****###############################################################################
RecoveryCheck:
JobHandle = \
JobHandle = DSAttachJob(JobName, DSJ.ERRFATAL)
If NOT(JobHandle) Then
Call DSLogFatal(\ Abort End
Else
Status = DSGetJobInfo(JobHandle, DSJ.JOBSTATUS)
JobInfoTime = DSGetJobInfo(JobHandle, DSJ.JOBSTARTTIMESTAMP) JobStatusDate = Iconv(JobInfoTime[1,10], \
If JobRunStatus = \
If Status = DSJS.RUNOK Or Status = DSJS.RUNWARN Then
If JobStatusDate < @DATE Then
Call DSLogInfo(\: \: JobName : \job ready to run.\\
ErrCode = DSDetachJob(JobHandle) Return End Else
Call DSLogWarn(\JobInfoTime, \ GoToMainExit = \ Return End
End
End
If JobRunStatus = \
If Status = DSJS.RUNFAILED Or Status = DSJS.CRASHED Or Status = DSJS.STOPPED Or Status = DSJS.RESET Then
Call DSLogInfo(\: \: JobName : \job aborted in previous run\\
ErrCode = DSDetachJob(JobHandle) GoSub ResetJob
JobRunStatus = \ Return End Else
Call DSLogInfo(\: \: JobName : \job status was not aborted or stopped. Therefore job not supposed to be run.\ GoToMainExit = \ Return End End End
******If the Job's status is not compiled or aborted then Reset it. ResetJob:
JobHandle = \
JobHandle = DSAttachJob(JobName, DSJ.ERRFATAL) If NOT(JobHandle) Then
Call DSLogFatal(\ Abort End
Else
Status = DSGetJobInfo(JobHandle, DSJ.JOBSTATUS)
If Status = DSJS.RUNFAILED Or Status = DSJS.CRASHED Or Status = DSJS.STOPPED
Then
Call DSLogInfo(\ ErrCode = DSRunJob(JobHandle, DSJ.RUNRESET) ErrCode = DSWaitForJob(JobHandle)
Status = DSGetJobInfo(JobHandle, DSJ.JOBSTATUS)
If Status = DSJS.RUNFAILED Or Status = DSJS.CRASHED Or Status = DSJS.STOPPED Then
Call DSLogFatal(\: \: JobName : \to reset\\ End Else
Call DSLogInfo(\\: JobName : \sucessfully reset.\\
ErrCode = DSDetachJob(JobHandle) Return End
End Else
ErrCode = DSDetachJob(JobHandle) Return
End End
*退出
MainExit: