Tools

58. データ待ち行列をクリヤーする CLRDTAQ

データ待ち行列 ( *DTAQ ) は、プロセス間通信などのプログラム間の
情報通信によく利用される。
データ待ち行列の作成は CRTDTAQ コマンドで作成することができるし
削除は DLTDTAQ コマンドによって削除することができる。
ところがデータ待ち行列 ( *DTAQ ) の中身をクリヤー(消去)するための
コマンドは用意されていない。
そこで CLRDTAQ というコマンドをここで用意した。

【 コマンド : CLRDTAQ 】
0001.00              CMD        PROMPT(' データ待ち行列のクリヤー ')  
0002.00              PARM       KWD(DTAQ) TYPE(DTAQ) +                
0003.00                           PROMPT(' データ待ち行列 ')          
0004.00  DTAQ:       QUAL       TYPE(*NAME) LEN(10) MIN(1)            
0005.00              QUAL       TYPE(*NAME) LEN(10) DFT(*LIBL) +      
0006.00                           SPCVAL((*LIBL) (*CURLIB)) +         
0007.00                           PROMPT(' ライブラリー ')            
[ コンパイル ]
CRTCMD CMD(MYLIB/CLRDTAQ) PGM(MYLIB/CLRDTAQCL) SRCFILE(MYSRCLIB/QCMDSRC)AUT(*ALL)

【 CLP : CLRDTAQCL 】
0001.00              PGM        PARM(&DTAQLIB)                                  
0002.00 /*-------------------------------------------------------------------*/ 
0003.00 /*   CLRDTAQCL :    データ待ち行列のクリヤー                         */ 
0004.00 /*                                                                   */ 
0005.00 /*   2017/06/17  作成                                                */ 
0006.00 /*-------------------------------------------------------------------*/ 
0007.00              DCL        VAR(&DTAQLIB) TYPE(*CHAR) LEN(20)               
0008.00              DCL        VAR(&DTAQ) TYPE(*CHAR) LEN(10)                  
0009.00              DCL        VAR(&DTALIB) TYPE(*CHAR) LEN(10)                
0010.00              DCL        VAR(&MSG) TYPE(*CHAR) LEN(132)                  
0011.00              DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)                  
0012.00              DCL        VAR(&MSGF) TYPE(*CHAR) LEN(10)                  
0013.00              DCL        VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)               
0014.00              DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(132)               
0015.00              DCL        VAR(&TYPE) TYPE(*CHAR) LEN(1)                   
0016.00              DCL        VAR(&TOPGMQ) TYPE(*CHAR) LEN(10)                
0017.00              DCL        VAR(&MSGTYPE) TYPE(*CHAR) LEN(10) +             
0018.00                           VALUE('*ESCAPE   ')                           
0019.00              DCL        VAR(&APIERR) TYPE(*CHAR) LEN(116) +             
0020.00                           VALUE(X'000074') /* 2 進数  */                
0021.00              DCL        VAR(&NULL4) TYPE(*CHAR) LEN(4) +                
0022.00                           VALUE(X'00000000')                            
0023.00              MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))         
0024.00                                                                         
0025.00 /*( 環境の取得 )*/                                                      
0026.00              RTVJOBA    TYPE(&TYPE)                                     
0027.00              IF         COND(&TYPE *EQ '0') THEN(DO) /*  バッチ  */     
0028.00              CHGVAR     VAR(&TOPGMQ) VALUE('*SYSOPR   ')                
0029.00              ENDDO      /*  バッチ  */                                  
0030.00              ELSE       CMD(DO) /*  対話式  */                          
0031.00              CHGVAR     VAR(&TOPGMQ) VALUE('*TOPGMQ   ')                
0032.00              ENDDO      /*  対話式  */                                  
0033.00                                                                         
0034.00 /*( パラメータの取得 )*/                                                
0035.00              CHGVAR     VAR(&DTAQ) VALUE(%SST(&DTAQLIB 01 10))          
0036.00              CHGVAR     VAR(&DTALIB) VALUE(%SST(&DTAQLIB 11 10))        
0037.00                                                                         
0038.00 /*( DTAQ のクリヤー )*/                                                 
0039.00              CALL       PGM(QCLRDTAQ) PARM(&DTAQ &DTALIB)               
0040.00                                                                         
0041.00 /*( 完了メッセージ )*/                                                  
0042.00              CHGVAR     VAR(&MSG) VALUE(' データ待ち行列 ' *CAT +      
0043.00                           &DTALIB *TCAT '/' *CAT &DTAQ *TCAT +         
0044.00                           ' をクリヤーしました。 ')                    
0045.00              CHGVAR     VAR(&MSGTYPE) VALUE('*DIAG     ')              
0046.00              GOTO       SNDMSG                                         
0047.00              RETURN                                                    
0048.00                                                                        
0049.00  APIERR:                                                               
0050.00              CHGVAR     VAR(&MSGID) VALUE(%SST(&APIERR 9 7))           
0051.00              CHGVAR     VAR(&MSGDTA) VALUE(%SST(&APIERR 17 100))       
0052.00              CHGVAR     VAR(&MSGF) VALUE('QCPFMSG   ')                 
0053.00              CHGVAR     VAR(&MSGFLIB) VALUE('QSYS      ')              
0054.00              GOTO       SNDMSG                                         
0055.00                                                                        
0056.00  ERROR:      RCVMSG     MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) +            
0057.00                           MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) +  
0058.00                           MSGFLIB(&MSGFLIB)                            
0059.00  SNDMSG:     IF         COND(&MSGID *EQ ' ') THEN(DO)                  
0060.00              SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) +    
0061.00                           TOMSGQ(&TOPGMQ) MSGTYPE(&MSGTYPE)            
0062.00              ENDDO                                                     
0063.00              ELSE       CMD(DO)                              
0064.00              SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) + 
0065.00                           MSGDTA(&MSGDTA) TOMSGQ(&TOPGMQ) +  
0066.00                           MSGTYPE(&MSGTYPE)                  
0067.00              ENDDO                                           
0068.00              ENDPGM                                          
[ コンパイル ]
CRTCLPGM PGM(MYLIB/CLROUTQCL) SRCFILE(MYSRCLIB/QCLSRC) AUT(*ALL)

【 解説 】

データ待ち行列をクリヤーする API : QCLRDTAQ が i5/OS によって用意されているので、
これを呼び出して実行するだけの簡単なものである。