サポート > リポジトリ > 他モデルの参照 > スクリプトを使った選択肢の絞り込みスクリプト

スクリプトを使って、複雑な絞り込みを行う例を紹介します。

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

(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 each (var element in sample_p.jgroupid) {
  jgroupids.add(element.id);
}

// 所属グループIDを持つ選択肢と「(未選択)」を groups に格納する。
var groups = new java.util.ArrayList();
for each (var element in sample_p.group) {
  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));