Tools

11. CHGOBJSRC オブジェクトのソース登録を行う

ここに紹介する CHGOBJSRC コマンドは直接、オブジェクトにソース情報を変更・登録を
行うコマンドである。

オブジェクトは一般に、どのソースから生成されたかの情報を持っている。
DSPOBJD「8=保守属性の表示」を参照すると原始ファイル情報が表示される。
文書化やオブジェクトのソースを探すときには、この情報が役に立つ。

しかし CRTDUPOBJ コマンドなどによってオブジェクトを複製した場合はこのソース情報は
失われてしまうので保守や文書化ではネックとなってしまう。
そこでソース情報の無いオブジェクトに対して人的にオブジェクトに対してソース情報を
強制的に登録してくれるのが、ここに紹介する CHGOBJSRC コマンドである。

一見、地味な(?)コマンドであるので何の役に立つのだろうかと思われるかも知れないが
正しいソース情報をきちんとしておくことで正確なソースを探す手間を省いてくれるのである。
CHGOBJSRC コマンドは直接、オブジェクトに対して働くがオブジェクトの動作に影響を
与えることはないので再コンパイルなどは不要である。

CHGOBJSRC の実行の様子

【 コマンド CHGOBJSRC 】
0001.00              CMD        PROMPT(' オブジェクト原始の変更 ')            
0002.00              PARM       KWD(OBJ)     TYPE(OBJ)     +                  
0003.00                           PROMPT(' オブジェクト ')                    
0004.00  OBJ:        QUAL       TYPE(*NAME) LEN(10) MIN(1)                    
0005.00              QUAL       TYPE(*NAME) LEN(10) DFT(*LIBL) +              
0006.00                           SPCVAL((*LIBL) (*CURLIB)) +                 
0007.00                           PROMPT(' ライブラリー ')                    
0008.00              PARM       KWD(OBJTYPE) TYPE(*CHAR) LEN(10) RSTD(*YES) + 
0009.00                           VALUES(*FILE *PGM *CMD *ALL *MENU *PNLGRP + 
0010.00                           *QMQRY *QRYDFN) +                           
0011.00                           PROMPT(' オブジェクト・タイプ ')            
0012.00              PARM       KWD(SRCFILE) TYPE(SRCFILE) +                  
0013.00                           PROMPT(' 原始ファイル ')                    
0014.00  SRCFILE:    QUAL       TYPE(*NAME) LEN(10) MIN(1)                    
0015.00              QUAL       TYPE(*NAME) LEN(10) SPCVAL((*LIBL) +          
0016.00                           (*CURLIB)) PROMPT(' ライブラリー ')         
0017.00              PARM       KWD(SRCMBR) TYPE(*NAME) LEN(10) DFT(*OBJ) +   
0018.00                           SPCVAL((*OBJ)) PROMPT(' 原始メンバー ')     
0019.00              PARM       KWD(TEXT) TYPE(*CHAR) LEN(50) +               
0020.00                           DFT(*SRCMBRTXT) +                           
0021.00                           PROMPT(' テキスト '' 記述 ''') 

コンパイルは

CRTCMD CMD(MYLIB/CHGOBJSRC) PGM(MYLIB/CHGOBJSRCC)  SRCFILE(MYSRCLIB/QCMDSRC)
 AUT(*ALL)
【 CLP CHGOBJSRCC 】
0001.00              PGM        PARM(&OBJOBJLIB &OBJTYPE &SRCFILLIB &SRCMBR +  
0002.00                           &TEXT)                                       
0003.00 /*---------------------------------------------------------*/          
0004.00 /*    CHGOBJSRC  :   オブジェクト原始の変更                */          
0005.00 /*---------------------------------------------------------*/          
0006.00              DCL        VAR(&MSG) TYPE(*CHAR) LEN(80)                  
0007.00              DCL        VAR(&OBJOBJLIB)  TYPE(*CHAR) LEN(20)           
0008.00              DCL        VAR(&OBJ)     TYPE(*CHAR) LEN(10)              
0009.00              DCL        VAR(&OBJLIB) TYPE(*CHAR) LEN(10)               
0010.00              DCL        VAR(&OBJTYPE) TYPE(*CHAR) LEN(10)              
0011.00              DCL        VAR(&SRCFILLIB) TYPE(*CHAR) LEN(20)            
0012.00              DCL        VAR(&SRCF) TYPE(*CHAR) LEN(10)                 
0013.00              DCL        VAR(&SRCLIB) TYPE(*CHAR) LEN(10)               
0014.00              DCL        VAR(&SRCMBR) TYPE(*CHAR) LEN(10)               
0015.00              DCL        VAR(&SRCDSC) TYPE(*CHAR) LEN(30)               
0016.00              DCL        VAR(&TEXT) TYPE(*CHAR) LEN(50)                 
0017.00              DCL        VAR(&SRCMBRTXT) TYPE(*CHAR) LEN(50) +          
0018.00                           VALUE('*SRCMBRTXT                           -
0019.00              ')                                                        
0020.00              DCL        VAR(&BINKEY) TYPE(*CHAR) LEN(4)                
0021.00              DCL        VAR(&BINLEN) TYPE(*CHAR) LEN(4)                
0022.00              DCL        VAR(&DEC08) TYPE(*DEC) LEN(8 0)                
0023.00              DCL        VAR(&APIERR) TYPE(*CHAR) LEN(4)                
0024.00              DCL        VAR(&RECSUR) TYPE(*CHAR) LEN(4)                
0025.00              DCL        VAR(&VALRCD1) TYPE(*CHAR) LEN(38)              
0026.00              DCL        VAR(&VALPRM1) TYPE(*CHAR) LEN(42)              
0027.00              DCL        VAR(&VALRCD2) TYPE(*CHAR) LEN(58)              
0028.00              DCL        VAR(&VALPRM2) TYPE(*CHAR) LEN(62)              
0029.00                                                                        
0030.00              CHGVAR     VAR(&OBJ) VALUE(%SST(&OBJOBJLIB 01 10))        
0031.00              CHGVAR     VAR(&OBJLIB) VALUE(%SST(&OBJOBJLIB 11 10))     
0032.00              CHGVAR     VAR(&SRCF) VALUE(%SST(&SRCFILLIB 01 10))       
0033.00              CHGVAR     VAR(&SRCLIB) VALUE(%SST(&SRCFILLIB 11 10))     
0034.00              RTVOBJD    OBJ(&OBJLIB/&OBJ) OBJTYPE(&OBJTYPE) +          
0035.00                           RTNLIB(&OBJLIB)                              
0036.00              MONMSG     MSGID(CPF9800) EXEC(GOTO CMDLBL(ERROR))        
0037.00              IF         COND(&SRCMBR *EQ '*OBJ      ') THEN(DO)        
0038.00              CHGVAR     VAR(&SRCMBR) VALUE(&OBJ)                       
0039.00              ENDDO                                                     
0040.00              CHKOBJ     OBJ(&SRCLIB/&SRCF) OBJTYPE(*FILE) MBR(&SRCMBR) 
0041.00              MONMSG     MSGID(CPF9800) EXEC(GOTO CMDLBL(ERROR))        
0042.00              IF         COND(&TEXT *EQ &SRCMBRTXT) THEN(DO)           
0043.00              RTVMBRD    FILE(&SRCLIB/&SRCF) MBR(&SRCMBR) TEXT(&TEXT)  
0044.00              ENDDO                                                    
0045.00 /*( 原始ファイルの更新 )*/                                            
0046.00              CHGVAR     VAR(&SRCDSC) VALUE(&SRCF *CAT &SRCLIB *CAT +  
0047.00                           &SRCMBR)                                    
0048.00              CHGVAR     VAR(%BIN(&BINKEY)) VALUE(1)                   
0049.00              CHGVAR     VAR(%BIN(&BINLEN)) VALUE(30)                  
0050.00              CHGVAR     VAR(%BIN(&APIERR)) VALUE(0)                   
0051.00              CHGVAR     VAR(%BIN(&RECSUR)) VALUE(1)                   
0052.00              CHGVAR     VAR(&VALRCD1) VALUE(&BINKEY *CAT &BINLEN +    
0053.00                           *CAT &SRCDSC)                               
0054.00              CHGVAR     VAR(&OBJOBJLIB) VALUE(&OBJ *CAT &OBJLIB)      
0055.00              CHGVAR     VAR(&VALPRM1) VALUE(&RECSUR *CAT &VALRCD1)    
0056.00              CALL       PGM(QLICOBJD) PARM(&OBJLIB &OBJOBJLIB +       
0057.00                           &OBJTYPE &VALPRM1 &APIERR)                  
0058.00 /*( テキストの更新 )*/                                                
0059.00              CHGVAR     VAR(%BIN(&BINKEY)) VALUE(10)                  
0060.00              CHGVAR     VAR(%BIN(&BINLEN)) VALUE(50)                  
0061.00              CHGVAR     VAR(%BIN(&APIERR)) VALUE(0)                   
0062.00              CHGVAR     VAR(%BIN(&RECSUR)) VALUE(1)                   
0063.00              CHGVAR     VAR(&VALRCD2) VALUE(&BINKEY *CAT &BINLEN +  
0064.00                           *CAT &TEXT)                               
0065.00              CHGVAR     VAR(&OBJOBJLIB) VALUE(&OBJ *CAT &OBJLIB)    
0066.00              CHGVAR     VAR(&VALPRM2) VALUE(&RECSUR *CAT &VALRCD2)  
0067.00              CALL       PGM(QLICOBJD) PARM(&OBJLIB &OBJOBJLIB +     
0068.00                           &OBJTYPE &VALPRM2 &APIERR)                
0069.00              SNDPGMMSG  MSG(' オブジェクト ' *TCAT &OBJLIB *TCAT +  
0070.00                           '/' *TCAT &OBJ *TCAT +                    
0071.00                           ' が変更された。 ') MSGTYPE(*COMP)        
0072.00              RETURN                                                 
0073.00  ERROR:      RCVMSG     RMV(*NO) MSG(&MSG)                          
0074.00              SNDPGMMSG  MSG(&MSG) MSGTYPE(*DIAG)                    
0075.00              ENDPGM                                                 

コンパイルは

CRTCLPGM PGM(MYLIB/CHGOBJSRCC)   SRCFILE(MYSRCLIB/QCLSRC) AUT(*ALL)
【 解説 】

オブジェクトの原始登録の変更のために API : QLICOBJD を使用している。