PANEL-WORKER

7. パネル・グループに変数値をセットするには?

パネル・グループのオープン/クローズと表示について理解できたところで、今度はパネル・グループへの変数値のセットの方法について紹介する。
パネル・グループの定義の中でレコードの定義があるがレコードが App とPNLGRPのあいだの変数のやり取りを介在する媒体である。
先の例のレコードには

:VARRCD  NAME=MODRCD   
         VARS='DSPMOD'.

という MODRCD という名前のレコードと :VARRCD NAME=KEYRCD VARS='BKBKCD DMY'.

というKEYRCD という名前のレコードが定義されていた。
レコードへの書き込みは QUIPUTV という APIによって実行できる。
そこで先のソースに

DCL        VAR(&DSPDTA) TYPE(*CHAR) LEN(1024)
DCL        VAR(&DTALEN) TYPE(*CHAR) LEN(4) /* 2 進数  */ 
/*(QUIPUTV: 変数の更新 )*/                                        
           CHGVAR     VAR(&DSPDTA) VALUE(' 変更 ')                
           CHGVAR     VAR(%BIN(&DTALEN)) VALUE(6)                 
           CALL       PGM(QUIPUTV) PARM(&HANDLE &DSPDTA &DTALEN + 
                        'MODRCD    ' &APIERR)                     
           CHGVAR     VAR(&DSPDTA) VALUE('0001')                  
           CHGVAR     VAR(%BIN(&DTALEN)) VALUE(5)                 
           CALL       PGM(QUIPUTV) PARM(&HANDLE &DSPDTA &DTALEN + 
                        'KEYRCD    ' &APIERR)

を追加すると、ソース全体は次のようになる。

【 CLPソース】
0001.00              PGM
0002.00 /*---------------------------------------------------------*/          
0003.00 /*   BNK001CL :  パネル表示                                */          
0004.00 /*---------------------------------------------------------*/          
0005.00              DCL        VAR(&MSG) TYPE(*CHAR) LEN(80)                  
0006.00              DCL        VAR(&HANDLE) TYPE(*CHAR) LEN(8) /* +           
0007.00                            摘要業務ハンドル  */                        
0008.00              DCL        VAR(&PNLGRPLIB) TYPE(*CHAR) LEN(20) +          
0009.00                           VALUE('BNK001    TESTOBJ   ')                
0010.00              DCL        VAR(&AREA)   TYPE(*CHAR) LEN(4) /* 2 進数  */  
0011.00              DCL        VAR(&DEC08) TYPE(*DEC) LEN(8 0)                
0012.00              DCL        VAR(&EXITPG) TYPE(*CHAR) LEN(4) +              
0013.00                           VALUE(X'00000000') /* 2 進数  */             
0014.00              DCL        VAR(&FNCTON) TYPE(*CHAR) LEN(4) /* 2 進数  */  
0015.00              DCL        VAR(&PANEL) TYPE(*CHAR) LEN(10) +              
0016.00                           VALUE('DSPHEAD   ')                          
0017.00              DCL        VAR(&AGAIN) TYPE(*CHAR) LEN(1) VALUE(Y)        
0018.00              DCL        VAR(&APIERR) TYPE(*CHAR) LEN(4) +              
0019.00                           VALUE(X'00000000') /* 2 進数  */             
0020.00              DCL        VAR(&USRTSK) TYPE(*CHAR) LEN(1) VALUE(N)       
0021.00              DCL        VAR(&STACK) TYPE(*CHAR) LEN(4) +               
0022.00                           VALUE(X'00000000') /* 2 進数  */             
0023.00              DCL        VAR(&UIMMSG) TYPE(*CHAR) LEN(10) VALUE(*CALLER)
0024.00              DCL        VAR(&MSGKEY) TYPE(*CHAR) LEN(4)                
0025.00              DCL        VAR(&CSROPT) TYPE(*CHAR) LEN(1) VALUE(D)       
0026.00              DCL        VAR(&LASLST) TYPE(*CHAR) LEN(4) VALUE(NONE)    
0027.00              DCL        VAR(&ERRLST) TYPE(*CHAR) LEN(4)                
0028.00              DCL        VAR(&WAITTIME) TYPE(*CHAR) LEN(4) +            
0029.00                           VALUE(X'FFFFFFFF') /* 2 進数  */             
0030.00              DCL        VAR(&CF03) TYPE(*CHAR) LEN(4) +                
0031.00                           VALUE(X'00000003') /* 2 進数  */             
0032.00              DCL        VAR(&ENTER) TYPE(*CHAR) LEN(4) +               
0033.00                           VALUE(X'0000001B') /* 2 進数  */             
0034.00              DCL        VAR(&DSPDTA) TYPE(*CHAR) LEN(1024)             
0035.00              DCL        VAR(&DTALEN) TYPE(*CHAR) LEN(4) /* 2 進数  */  
0036.00          /*  MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) */     
0037.00                                                                        
0038.00 /*( QUIOPNDA : パネル・グループのオープン )*/                          
0039.00              CHGVAR     VAR(&DEC08) VALUE(-1)                          
0040.00              CHGVAR     VAR(%BIN(&AREA)) VALUE(&DEC08)                 
0041.00              CALL       PGM(QUIOPNDA) PARM(&HANDLE &PNLGRPLIB &AREA +  
0042.00                           &EXITPG 'N' &APIERR)                      
0043.00 /*(QUIPUTV: 変数の更新 )*/                                          
0044.00              CHGVAR     VAR(&DSPDTA) VALUE(' 変更 ')                
0045.00              CHGVAR     VAR(%BIN(&DTALEN)) VALUE(6)                 
0046.00              CALL       PGM(QUIPUTV) PARM(&HANDLE &DSPDTA &DTALEN + 
0047.00                           'MODRCD    ' &APIERR)                     
0048.00              CHGVAR     VAR(&DSPDTA) VALUE('0001')                  
0049.00              CHGVAR     VAR(%BIN(&DTALEN)) VALUE(5)                 
0050.00              CALL       PGM(QUIPUTV) PARM(&HANDLE &DSPDTA &DTALEN + 
0051.00                           'KEYRCD    ' &APIERR)                     
0052.00 /*( QUIDSPP : パネル表示 )*/                                        
0053.00  DSPLY:      CALL       PGM(QUIDSPP) PARM(&HANDLE &FNCTON &PANEL +  
0054.00                           &AGAIN &APIERR &USRTSK &STACK &UIMMSG +   
0055.00                           &MSGKEY &CSROPT &LASLST &ERRLST &WAITTIME)
0056.00              MONMSG     MSGID(CPF6A95)                              
0057.00 /*( CF03 )= 終了 */                                                 
0058.00              IF         COND(&FNCTON *EQ &CF03) THEN(DO)            
0059.00 /*( QUICLOA : パネル・グループのクローズ )*/                        
0060.00              CALL       PGM(QUICLOA) PARM(&HANDLE 'M' &APIERR)      
0061.00              RETURN                                                 
0062.00              ENDDO                                                  
0063.00 /*( 実行キー )*/                                            
0064.00              IF         COND(&FNCTON *EQ &ENTER) THEN(DO)   
0065.00              GOTO       CMDLBL(DSPLY)                       
0066.00              ENDDO                                          
0067.00                                                             
0068.00  ERROR:      RCVMSG     RMV(*NO) MSG(&MSG)                  
0069.00              SNDPGMMSG  MSG(&MSG) MSGTYPE(*DIAG)            
0070.00              ENDPGM
【 実行結果 】

銀行コードの右上のモードが表示されて実行結果は次のようになる。

 BNK001                       銀行マスターの登録
                                                               モード :   変更
                                                                              
 銀行コード . . . . .   0001                                                  
                                                                              
                                                                              
                                                                              
                                                                              
登録または変更するコードを打鍵して実行キーを押してください。

この例では変数のセットに QUIPUTV を使用したが変数の値の取得には QUIGETV API を使用する。