スクリプトを使った選択肢の絞り込み最終更新日: 2020年3月14日

次のモデル参照項目を用意するものとします。

(a) アカウント(juser)を参照し、リストボックスとして扱う項目。
(b) グループ(jgroup)を参照し、リストボックスとして扱う項目。

ここで (b) の選択肢に、(a) が所属するグループのみを表示する設定を行うものとします。

新規登録画面の初期状態は次の通りです。「グループID (隠し項目)」は本来は隠しとするものですが、内容確認のために表示させています。二つのリストボックスはいずれも "未選択" となっています。

図1 サンプルアプリケーション新規登録画面(1)

アカウントを選択します。

図2 サンプルアプリケーション新規登録画面(2)

アカウントに紐づくグループは参照連動項目「グループID(隠し項目)」に反映されます。さらに、これが「所属グループ」項目のリストボックスの選択肢になっています。

図3 サンプルアプリケーション新規登録画面(3)

アカウントを選択しなおしたとき、グループの選択肢も変更されます。

図4 サンプルアプリケーション新規登録画面(4)

定義方法

サンプルモデルの定義を示します。

図5 サンプルモデルの定義(1)

アカウントは juser モデルをリストボックスとして参照しています。また、この項目は "値が変更されたときに画面を再描画する" も有効にします。

図6 サンプルモデルの定義(2)

アカウントに紐づく所属グループを参照連動する項目です。この項目はチェックボックスとなります。

図7 サンプルモデルの定義(3)

参照連動項目とは別に、所属グループをリストボックスとして用意します。

図8 サンプルモデルの定義(4)

参照連動項目(jgroupid)を、リストボックス項目(group)に転記するためのスクリプトを用意します。このスクリプトは Wagby 内部で、ストアモデルからプレゼンテーションモデルを作成するタイミングで呼び出されます。

図9 サンプルモデルの定義(5)
if (sample_p === null) {
  return;
}
// 選択されたアカウントの所属グループIDを jgroupids に格納する。
var jgroupids = new java.util.ArrayList();
for(var i=0; i < juser_p.jgroupid.length; i++) {
 jgroupids.add(juser_p.jgroupid[i].id);
}
// 所属グループIDを持つ選択肢と「(未選択)」を groups に格納する。
var groups = new java.util.ArrayList();
for(var i=0; i < sample_p.group.length; i++) {
 var element = sample_p.group[i];
 if (element.noId // 「(未選択)」選択肢
     || jgroupids.contains(element.id)) {
   groups.add(element);
 }
}
// groups を配列に変換して sample_p.group にセットする。
var groupArry = Java.type("jp.jasminesoft.wagby.model.sample_p.Group[]");
sample_p.group = groups.toArray(new groupArry(groups.size));