Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


Valence ComboBoxを絞り込む方法

アプリケーションを作成する中で、ComboBoxの項目を選択することで、別ComboBoxのリスト(項目)を絞り込むような処理を実現したい場合があると思います。
本Tipsでは、Formウィジェットのヘルパープログラムを使用してComboBoxを絞り込む方法についてご紹介します。

ComboBoxの絞り込み

本Tipsでは日本の「地域(八地方区分)」ComboBoxを選択時に「都道府県」ComboBoxのリストを絞り込む機能を例として紹介致します。
使用するファイルは、地域マスタ(REGIONPF)と都道府県マスタ(PREFECPF)です。

地域マスタと都道府県マスタ

地域マスタDDS

     A*==============================================================*
     A*      ファイル名      : REGIONPF                            *
     A*      ファイル記述    : REGIONPR                            *
     A*      作成日          : 2022/09/29                          *
     A*==============================================================*
     A                                      UNIQUE                    
     A          R REGIONPR                  TEXT('地域マスタ')      
     A*                                                               
     A            RGRGCD         1A         COLHDG('地域コード')    
     A            RGRGNM        20O         COLHDG('地域名')        
     A*                                                               
     A          K RGRGCD                                              

都道府県マスタDDS

     A*==============================================================*
     A*      ファイル名      : PREFECPF                            *
     A*      ファイル記述    : PREFECPR                            *
     A*      作成日          : 2022/09/29                          *
     A*==============================================================*
     A                                      UNIQUE                    
     A          R PREFECPR                  TEXT('都道府県マスタ')  
     A*                                                               
     A            PRPFCD         2A         COLHDG('都道府県コード')
     A            PRRGCD         1A         COLHDG('地域コード')    
     A            PRPFNM        20O         COLHDG('都道府県名')    
     A*                                                               
     A          K PRPFCD                                              

地域マスタ(REGIONPF)

地域コード(RGRGCD)地域名(RGRGNM)
1 北海道地方
2東北地方
3関東地方
4中部地方
5近畿地方
6中国地方
7四国地方
8九州地方

都道府県マスタ(PREFECPF)

都道府県マスタは47都道府県が定義されています。

都道府県コード(PRPFCD)地域コード(PRRGCD)都道府県名(PRPFNM)
11北海道
22青森県
32岩手県
42宮城県
458宮崎県
468鹿児島県
478沖縄県

データソースの作成

地域ComboBoxのデータソース
都道府県ComboBoxのデータソース

データソースは地域マスタと都道府県マスタファイルの列をすべて追加したデータソースです。
それぞれ、地域マスタはデータソース名「TIPS2209_REGION_DS」、都道府県マスタはデータソース名「TIPS2209_PREF_DS」で作成しています。

Formウィジェットへのドロップダウン追加

Formウィジェットデータソースの設定

Formウィジェット上にComboBoxを表示するには、Formウィジェットの編集画面でフィールドに「ドロップダウン」にデータソースを追加して設定を行います。
地域フィールドに、地域マスタのデータソース (TIPS2209_REGION_DS)、都道府県フィールドに都道府県マスタのデータソース (TIPS2209_PREF_DS)を追加しました。

Formウィジェットのヘルパープログラム

FormウィジェットのComboBoxを絞り込むにはヘルパープログラムを設定する必要があります。
ヘルパープログラムのテンプレートはVALENCEライブラリのQRPGLESRCファイル内、メンバー名EXNABFHLPです。テンプレートをコピーしてRPGプログラムを作成します。

プログラム例は、EXNABFHLPメンバーをコピーしてFLTCOMBOというソースファイルを作成後、Processサブルーチンの箇所に以下ロジックを記述しています。

01 p Process         b                                   
02 d                 pi                                  
03 D LREGION         S              1a                   
04  /free                                                
05     if gField = 'F1_REG';                             
06       LREGION = vvIn_char('F1_REG');                  
07       if LREGION = *blanks;                           
08        ClearComboFilter('F1_PREF');                   
09       else;                                           
10        FilterCombo('F1_PREF':'F1_PRRGCD': LREGION);   
11       endif;                                          
12     endif;                                            
13  /end-free                                            
14 p                 e                                                                                                 

gField

gFiledフィールドには、Formウィジェットで操作したフィールド名が設定されます。
今回の場合は地域フィールド(F1_REG)が変更された際に都道府県を絞り込みますので、5行目のように「 if gField = ‘F1_REG’ 」と比較して、地域フィールドが選択された場合のみ処理を実行します。

FilterCombo

10行目に記述されている、FilterComboはComboBoxを絞り込むためのプロシージャです。
1つ目の引数:ComboBoxのフィールド名
2つ目の引数:絞り込む対象のComboBoxに使用されているデータソースのフィールド名
3つ目の引数:絞り込む値
を設定します。
LREGIONフィールドには、6行目のvvIn_charの処理で、地域コードを取得しています。

つまり、都道府県のComboBoxのデータソースは、地域ComboBoxで選択された地域の項目値で絞り込まれることになります。

ClearComboFilter

ヘルパープログラム内のClearComboFilterは、FilterComboによって設定されたフィルター条件を削除する際に使用します。
今回の例では、地域ComboBoxが「未選択」の場合に、FilterComboを解除してすべての都道府県が選択できるようになります。

Formウィジェットにヘルパープログラムを設定

ヘルパープログラム

Formウィジェットに作成した「ヘルパープログラム」を設定します。
Formウィジェット編集画面の左側メニューで「フィールド」項目を選択すると、右側画面の右上に「ヘルパープログラム」の設定画面が表示されます。

ヘルパープログラムの設定

「ヘルパープログラム」にプログラム「FLTCOMBO」を指定します。
「呼び出すタイミング」は3つあります。

  • At form createion:フォーム作成時
  • At form creation and each time a field is changed:フォーム作成時とフィールド項目変更時
  • At form creation and each time a field is changed or loses focus: フォーム作成時とフィールド項目変更時、フォーカスを失った際

デフォルトの「At form creation and each time a field is changed」を設定しました。

実行時の絞り込み

ComboBoxの絞り込み

画面表示時、都道府県ComboBoxは全ての項目(47都道府県)が表示されます。

ComboBoxの絞り込み2

地域Comboboxで「項目」を選択した場合、
 ※例では「東北地方」を選択しました。

ComboBoxの絞り込み結果

都道府県ComboBoxが地域ComboBoxの項目により絞り込まれます。