CL

52. 一定時間の後に処理を実行するには ?

操作員が何か処理をしたあとで一定時間の経過後に実行させたいときがある。
例えば Webアプリケーションで印刷スフールを PDF 化してから、ユーザーに
IFS に保管したPDF をリダイレクトして表示するものとする。
しかしそのままで放置しておいたのであれば、IFS に使用済みのPDF が
ゴミのように山積してしまう。
やはり一定の時間の経過後には、そのPDF は自動消去するようにしておきたい。
このようなときには SBMJOB コマンドの スケジュール日(SCDDATE) と、
スケジュール時刻(SCDTIME) を指定することによって実現することができる。
次は 10分後に稼動するように SBMJOB する例である。

             DCL        VAR(&DATETIME) TYPE(*CHAR) LEN(20)
             DCL        VAR(&DATE) TYPE(*CHAR) LEN(6)
             DCL        VAR(&TIME) TYPE(*CHAR) LEN(6)
             DCL        VAR(&HH) TYPE(*DEC) LEN(2 0)
             DCL        VAR(&HHC) TYPE(*CHAR) LEN(2)
             DCL        VAR(&MM) TYPE(*DEC) LEN(2 0)
             DCL        VAR(&MMC) TYPE(*CHAR) LEN(2)
             DCL        VAR(&SS) TYPE(*DEC) LEN(2 0)
             DCL        VAR(&SSC) TYPE(*CHAR) LEN(2)

              :
              :
             RTVJOBA    DATETIME(&DATETIME)
             CHGVAR     VAR(&DATE) VALUE(%SST(&DATETIME 3 6))
             CHGVAR     VAR(&TIME) VALUE(%SST(&DATETIME 9 6))
              :
/*-------------------------------------------------------------*/
/*( 8 ) 10分後にPDFを削除するようにSBMJOB                  */
/*-------------------------------------------------------------*/
             CHGVAR     VAR(&HH) VALUE(%SST(&TIME 1 2))
             CHGVAR     VAR(&MM) VALUE(%SST(&TIME 3 2))
             CHGVAR     VAR(&SS) VALUE(%SST(&TIME 5 2))
             CHGVAR     VAR(&MM) VALUE(&MM + 10)
             IF         COND(&MM >= 60) THEN(DO)
             CHGVAR     VAR(&HH) VALUE(&HH + 1)
             CHGVAR     VAR(&MM) VALUE(1)
             ENDDO
             CHGVAR     VAR(&HHC) VALUE(&HH)
             CHGVAR     VAR(&MMC) VALUE(&MM)
             CHGVAR     VAR(&SSC) VALUE(&SS)
             CHGVAR     VAR(&TIME) VALUE(&HHC *CAT &MMC *CAT &SSC)
             CHGVAR     VAR(&DIR) +
                          VALUE('/AS400-NET.USR/PROJECT/PRINTER/' +
                          *CAT &PDF_FILE)
             SBMJOB     CMD(RMVLNK OBJLNK(&DIR)) JOB(RMVLNK) +
                          SCDDATE(&DATE) SCDTIME(&TIME) MSGQ(*NONE)