選択肢の絞り込み
最終更新日: 2022年11月16日
R8 | R9
次のモデル参照項目を用意するものとします。
(a) アカウント(juser)を参照し、リストボックスとして扱う項目。
ここで (b) の選択肢に、(a) が所属するグループのみを表示する設定を行うものとします。
新規登録画面の初期状態は次の通りです。
アカウントを選択します。
アカウントに紐づくグループは参照連動項目「グループID(隠し項目)」に反映されます。
アカウントを選択しなおしたとき、グループの選択肢も変更されます。
サンプルモデルの定義を示します。
アカウント項目は アカウント(juser)モデルをリストボックスとして参照しています。
また、この項目では「入力制御 > 共通 > 値変更時に画面を再描画する」を有効にします。
アカウントに紐づく所属グループを参照連動する項目です。この項目はチェックボックスとなります。
この項目は隠し項目とします。
参照連動項目とは別に、所属グループをリストボックスとして用意します。
参照連動項目(jgroupid)を、リストボックス項目(group)に転記するためのスクリプトを用意します。このスクリプトは Wagby 内部で、ストアモデルからプレゼンテーションモデルを作成するタイミングで呼び出されます。
例
(b) グループ(jgroup)を参照し、リストボックスとして扱う項目。
(※「グループID (隠し項目)」は本来は隠しとするものですが、内容確認のために表示させています。)
二つのリストボックスはいずれも "未選択" となっています。
さらに、これが「所属グループ」項目のリストボックスの選択肢になっています。
定義方法
アカウント
グループID(隠し項目)
所属グループ
if (sample_p === null) {
return;
}
// 選択されたアカウントの所属グループIDを jgroupids に格納する。
var jgroupids = new java.util.ArrayList();
var userid = null;
var accountArry = sample_p.account;
for (var i=0; i < accountArry.length; i++) {
if (accountArry[i].choose) {
userid = accountArry[i].id;
break;
}
}
var entityService = p.appctx.getBean("JuserEntityService");
var juser = entityService.findById(userid);
if (juser === null) {
return;
}
var jgroupids = new java.util.ArrayList();
for(var i=0; i < juser.jgroupid.length; i++) {
jgroupids.add(juser.jgroupid[i]);
}
// 所属グループ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));