OUTQ内の出力ファイルをユーザー別に一括削除するプログラム例

IBM eSever iSeries専用。CLPのみで構成。i5/OS はV6R1M0。


仕様は、WRKSPLF SELECT(ユーザ名)の結果をもとにスプールファイルを削除する。
パラメータは、&PARM1に削除したいユーザー名、&PARM2に*ALLか個別のOUTQ名を指定する。
&PARM2があるのは、*ALLではQEZJOBLOGまでは削除したくないと思ったからで、
これで個別のOUTQ名のみ処理させることもできる。


(1)プログラム名:XDLTSPLF  タイプ:CLP

             PGM        PARM(&PARM1 &PARM2)

             DCL        VAR(&PARM1) TYPE(*CHAR) LEN(10)
             DCL        VAR(&PARM2) TYPE(*CHAR) LEN(10)
             DCL        VAR(&MSG) TYPE(*CHAR) LEN(80)
             DCL        VAR(&SL) TYPE(*CHAR) LEN(10)
             DCL        VAR(&RC) TYPE(*INT) LEN(4)
             DCL        VAR(&W_SPLNO) TYPE(*DEC) LEN(6)

             DCLF       FILE(TOOLLIB/SPLFLIST) OPNID(F1)

             MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))

             CHGVAR     VAR(&SL) VALUE('TOOLLIB   ')


             CPYF       FROMFILE(&SL/TEXTDATA) +
                          TOFILE(QTEMP/TEXTDATA) MBROPT(*REPLACE) +
                          CRTFILE(*YES)
             CLRPFM     FILE(QTEMP/TEXTDATA)

             WRKSPLF    SELECT(&PARM1) OUTPUT(*PRINT)
             CPYSPLF    FILE(QPRTSPLF) TOFILE(QTEMP/TEXTDATA) +
                          SPLNBR(*LAST)

             CPYF       FROMFILE(&SL/SPLFLIST) +
                          TOFILE(QTEMP/SPLFLIST) MBROPT(*REPLACE) +
                          CRTFILE(*YES)
             CLRPFM     FILE(QTEMP/SPLFLIST)

             CPYF       FROMFILE(QTEMP/TEXTDATA) +
                          TOFILE(QTEMP/SPLFLIST) MBROPT(*REPLACE) +
                          FMTOPT(*NOCHK)


             OVRDBF     FILE(SPLFLIST) TOFILE(QTEMP/SPLFLIST)
READ:
             RCVF       RCDFMT(DTFMT) OPNID(F1)
             MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(END))

             IF         COND(&PARM1 *NE &F1_USER) THEN(DO)
             GOTO       CMDLBL(READ)
             ENDDO
             IF         COND(&F1_STS *EQ 'OPN') THEN(DO)
             GOTO       CMDLBL(READ)
             ENDDO
             IF         COND(&PARM2 *NE '*ALL') THEN(DO)
             IF         COND(&PARM2 *NE &F1_OUTQ) THEN(DO)
             GOTO       CMDLBL(READ)
             ENDDO
             ENDDO
             IF         COND(&PARM2 *EQ '*ALL') THEN(DO)
             IF         COND(&F1_OUTQ *EQ 'QEZJOBLOG') THEN(DO)
             GOTO       CMDLBL(READ)
             ENDDO
             ENDDO


             CALLSUBR   SUBR(EXE_DLTF) RTNVAL(&RC)

             GOTO       CMDLBL(READ)
END:
             DLTOVR     FILE(SPLFLIST)

             RETURN

ERROR:
             RCVMSG     RMV(*NO) MSG(&MSG)
 SNDMSG:     SNDPGMMSG  MSG(&MSG) MSGTYPE(*DIAG)
             RETURN

TAG_DLTF:
             SUBR       SUBR(EXE_DLTF)
             CHGVAR     VAR(&W_SPLNO) VALUE(&F1_SPLNO)
             DLTSPLF    FILE(&F1_SPLNM) +
                          JOB(&F1_JOBNO/&F1_USER/&F1_JOBNM) +
                          SPLNBR(&W_SPLNO)
             MONMSG     MSGID(CPF0000)
             ENDSUBR    RTNVAL(0)
             ENDPGM


(補足1)コマンドの出力を一時的に保存するTOOLLIB/SPLFLIST。事前に準備する。

     A*** WRKSPLF SELECT(USER)  BY V6R1M0                
     A          R DTFMT                                  
     A            X01            2                       
     A            SPLNM         10                       
     A            X02            1                       
     A            USER          10O         TEXT('KEY')  
     A            X03            1                       
     A            OUTQ          10                       
     A            X04            1                       
     A            X05           10                       
     A            X06            1                       
     A            STS            3                       
     A            X07            1                       
     A            X08           33                       
     A            DATE           8                       
     A            X09            1                       
     A            TIME           8    
     A            X10            1    
     A            SPLNO          6    
     A            X11            1    
     A            JOBNM         10    
     A            X13            1    
     A            JOBNO          6    
     A            X14           73    


(補足2)汎用の198桁のテキストデータTOOLLIB/TEXTDATA。事前に準備する。

     A          R DTREC             
     A            TEXTDATA     198O