RPG

125. コンボボックスを DSPF 上で表示するには?

5250画面を GUI化またはWeb化するときに、開発者が真っ先に希望するコントロールが

プルダウン候補を可能とするコンボボックスである。

DDS記述でコンボボックスを表示することができればよいのだが残念ながらDSPF には

コンボボックスの機能はない。

良く似た機能としてメニュー・バーがあるが、メニュー・バーは機能の選択に利用されるもので

コンボボックスとは異なっている。

コンボボックスを利用したい理由はユーザーに選択候補を見せることである。

選択候補自体は DDS で VALUES キーワードによって定義することができるので

EnterpriseServer Ver5.0 の AutoWeb では VALUESTEXT を組み合わせることで

コンボボックスを実現することができる。

【 AutoWeb によるコンボボックスの例 】

【 DSPFソース 】
0001.00      A*%%TS  SD  19940302  221529  QTR         REL-V2R2M0  5738-PW1     
0002.00      A*            11:59:33    QSECOFR     REL-R06M00  5714-UT1         
0003.00      A*%%EC                                                             
0004.00      A                                      DSPSIZ(24 80 *DS3)          
0005.00      A                                      MSGLOC(24)                  
0006.00      A                                      PRINT                       
0007.00      A          R DSPDTA01                                              
0008.00      A*%%TS  SD  19940302  221529  QTR         REL-V2R2M0  5738-PW1     
0009.00      A                                      TEXT(' 明細画面 01')        
0010.00      A                                      CF03(03 ' 終了 ')           
0011.00      A                                      SETOF(99)                   
0012.00      A                                      BLINK                       
0013.00      A                                  1 27' コンボボックッス '        
0014.00      A                                      DSPATR(HI)                  
SOSI         A                                  3  2' 下記はコンボボックッスの  
0016.00      A                                       ルです '                   
SOSI         A                                  4  3'DDS の VALUES キーワード * 
SOSI         A                                       コンボボックスに変換され * 
0019.00      A                                  8  2' 担当者 '                  
0020.00      A            JUTANT         4A  B  8 12VALUES('0001' '0002' '0003' 
SOSI         A                                      TEXT('" 中村 " " 田中 " "鈴木") 
0022.00      A                                 23  2'F3= 終了 '
【 解説 】

指定は簡単で VALUE('候補1' '候補2' ... '候補N') に対応してテキストを二重引用符で

囲んでTEXT('"テキスト1" "テキスト2" ... "テキストN") と定義すれば

テキスト1, テキスト2, … テキストN がコンボボックスの候補として表示されてその選択値が

候補1, 候補2, … 候補N のいずれかとしてフィールド値として渡されることになる。

【 CLP ソース 】
0001.00              PGM                                                  
0002.00 /*---------------------------------------------------------*/     
0003.00 /*    COMBO     :    コンボボックッス                      */     
0004.00 /*---------------------------------------------------------*/     
0005.00              DCL        VAR(&MSG)      TYPE(*CHAR) LEN(80)        
0006.00              DCLF       FILE(QTROBJ/COMBOFM)                      
0007.00                                                                   
0008.00              CHGVAR     VAR(&JUTANT) VALUE('0003')                
0009.00  DSPLY:      SNDRCVF    RCDFMT(DSPDTA01)                          
0010.00              IF         COND(&IN03 *EQ '1') THEN(RETURN)          
0011.00              GOTO       DSPLY                                     
0012.00              RETURN                                               
0013.00                                                                   
0014.00  ERROR:      RCVMSG     RMV(*NO) MSG(&MSG)                        
0015.00  SNDMSG:     SNDPGMMSG  MSG(&MSG) MSGTYPE(*DIAG)                  
0016.00              ENDPGM