プルダウンメニュー2

4Dのフォームオブジェクトのプルダウンメニューの実装方法について説明する。ちなみにプルダウンメニューは、ポップアップメニューとかドロップダウンリストとか、ドロップダウンメニュー、ポップアップリスト等々、呼び名にもバリエーションがある。

今回の例はテーブルから複数列の値を持ってきてプルダウンに表示する方法。会計ジロウの消費税区分のプルダウンメニューを紹介する。

プルダウンメニューで選択された値を別のプロセス変数に代入している。上記の左の図で、「消費税率10%」のところ。

1)フォームオンロードのメソッド「_frmDefInit」で値リストを格納する配列変数を宣言する

...
//消費税区分 ポップアップ
ARRAY LONGINT(vAC06_popTM_ID; 0)
ARRAY TEXT(vAC06_popTM; 0)
ARRAY TEXT(vAC06_popTM_NAME; 0)
ARRAY REAL(vAC06_popTM_TAX_RATE; 0)
...

プルダウンに表示されるのが「vAC06_popTM」、ほかの3つの配列はデータベースから取り出した値を保持するために用意した。

この例ではAC06_DefInitに次を記述している。_frmDefInitに記述してもいいのだが、データベースから値をロードするプロセス変数は、_DefInitに記述する、という標準化があるため。

C_LONGINT(vAC06_varAC_TM_ID) 
C_REAL(vAC06_varAC_TAX_RATE)

2)フォームオンロードのメソッド「_popXX_make」で配列を作成、初期値をセット

「vAC06_popTM」に表示するのは「区分名(税率%)」のような文字列だ。

//AC06_popTM_make
//20230704 wat
//タックス選択ポップアップメニュー  空白を選択肢に追加

C_LONGINT($sizeOfAry; $i)
C_LONGINT($index)

READ ONLY([TAX_MASTER])
QUERY([TAX_MASTER]; [TAX_MASTER]TM_DEL_FLAG=0; *)
QUERY([TAX_MASTER];  & ; [TAX_MASTER]TM_SHOW_HIDE=0)
ORDER BY([TAX_MASTER]TM_SORT_ORDER; >)

SELECTION TO ARRAY([TAX_MASTER]TM_ID; vAC06_popTM_ID)
SELECTION TO ARRAY([TAX_MASTER]TM_NAME; vAC06_popTM_NAME)
SELECTION TO ARRAY([TAX_MASTER]TM_TAX_RATE; vAC06_popTM_TAX_RATE)

$sizeOfAry:=Size of array(vAC06_popTM_ID)
ARRAY TEXT(vAC06_popTM; $sizeOfAry)
For ($i; 1; $sizeOfAry)
	vAC06_popTM{$i}:=vAC06_popTM_NAME{$i}+" ("+String(vAC06_popTM_TAX_RATE{$i})+"%)"

End for 

//空白を追加
APPEND TO ARRAY(vAC06_popTM_ID; 0)
APPEND TO ARRAY(vAC06_popTM_NAME; "")
APPEND TO ARRAY(vAC06_popTM_TAX_RATE; 0)
APPEND TO ARRAY(vAC06_popTM; "")

// デフォルト選択
vAC06_popTM:=0
$index:=Find in array(vAC06_popTM_ID; vAC06_varAC_TM_ID)
If ($index#-1)
	vAC06_popTM:=$index

Else 
	vAC06_popTM:=$sizeOfAry+1  //20230205 wat

End if 

3)プルダウンメニューにプロセス変数を割り当てて、オブジェクトメソッドに選択されたときの処理を記述

//AC06_popTM
//20230709 wat
// 消費税区分を選択する

vAC06_varAC_TAX_RATE:=vAC06_popTM_TAX_RATE{vAC06_popTM}

vAC06_varAC_TM_ID:=vAC06_popTM_ID{vAC06_popTM}

これで消費税率に実数の税率が表示される。TM_IDは[保存]が実行されるタイミングでこの勘定科目レコードに保存される。

プルダウンメニュー