サポート > リポジトリ > 他モデルの参照 > 参照モデル同士の関係性で選択肢を絞り込む

一方のモデル参照の値を決めると、関連する別のモデル参照の選択肢を絞り込むことができます。

動作例

例として、社員モデルの社員名を参照するケースを扱います。ここで参照先の社員数が多いとリストボックスから探すことが難しくなってしまいます。
そこで最初に「部署」を選択し、その部署に所属する「社員」を選択するといった絞り込み機能を実現します。

「営業担当部署」によって「営業担当者」の選択肢が変わります。図1は営業担当部署が未選択の状態です。

図1 営業担当部署を決定しないと営業担当者の選択肢も表示されない

担当部署を"営業一部"とすると、同部に所属する担当者が選択肢として表示されます。

図2 営業一部を選択する

同じく担当部署を"営業二部"とすると、同部に所属する担当者が選択肢として表示されます。

図3 営業二部を選択する

検索条件に用いる

両項目を検索条件に用いることもできます。

図4 営業担当部署と営業担当者項目を検索条件に用いる

定義方法

3つのモデル「部署」「社員」「顧客」を用意します。

部署モデル

「部署」モデルは主キー「部署ID」と、「部署名」を用意します。

図5 部署モデル

社員モデル

「社員」モデルは「部署」モデルを参照します。(図6,図7)

図6 社員モデルの定義

図6 社員モデルにおける部署項目の関連設定

顧客モデル

「顧客」モデルは「営業担当部署」として部署モデルを、「営業担当者」として社員モデルをそれぞれ参照します。(図7,図8,図9,図10)

図7 顧客モデルの定義
図8 顧客モデルにおける営業担当部署の関連設定
図9 顧客モデルにおける営業担当者の関連設定(1)
図10 顧客モデルにおける営業担当者の関連設定(2)

設定のポイントは図10における「オプション>絞り込み項目」です。

  • このモデルに用意されたモデル参照項目であること。(数字、文字列、日付型は利用できません。モデル参照です。)
  • 参照先モデル(ここでは社員モデル)にも含まれる項目であること。

この設定を図示すると次のようになります。

図11 設定イメージ

営業担当部署項目をラジオボタンとし、営業担当者項目をリストボックスとした例を図12に示します。

図12 ラジオボタン-リストボックスの組み合わせ

営業担当部署項目をチェックボックスとし、営業担当者項目をリストボックスとした例を図13に示します。

図13 チェックボックス-リストボックスの組み合わせ

チェックボックスを複数選択すると、絞り込み項目も増えます。(図14)

図14 チェックボックス-リストボックスの組み合わせ (2)

営業担当部署項目をリストボックスとし、営業担当者項目をチェックボックスとした例を図15に示します。 リストボックスが未選択の場合、営業担当者は表示されません。

図15 リストボックス-チェックボックスの組み合わせ (1)

営業担当部署を選択すると、チェックボックスの選択肢が表示されます。(図16)

図16 リストボックス-チェックボックスの組み合わせ (2)

営業担当部署項目をラジオボタンとし、営業担当者項目をチェックボックスとした例を図17に示します。

図17 ラジオボタン-チェックボックスの組み合わせ

営業担当部署項目と営業担当者項目のいずれもチェックボックスとした例を図18に示します。

図18 チェックボックス-チェックボックスの組み合わせ

動作の仕組み

この機能は、絞り込み元データをいったんすべてメモリに取り込み、Javaプログラムで条件判定を行います。[パフォーマンスについて...]

指定できないパターン

次の場合は、絞り込み項目に指定することはできません。

  • モデル参照ではない項目(数字型、文字列型、日付型など)
  • モデル参照(検索画面)
  • 指定した項目の参照先モデルの主キーが複合キーの場合

この場合は、もう一つの絞込設定である「他項目の値で選択肢を絞り込む」をご利用ください。

絞り込み元の値が変わった場合の動作

絞り込み元の値を変えた場合(上記例では「営業担当部署」の値を変更した場合)、「営業担当」として選択されていた値はクリアされます。

サジェスト項目

サジェスト項目に絞り込みは設定できません。(設定しても機能しません。)

二つ以上の項目間での絞り込み

本機能は二つの項目間の関係性に着目した絞り込み動作を行います。 これを応用することで、二つ以上の項目間での絞り込みを定義することができます。

例えば「組織」「所属」「氏名」という項目について、「組織」と「所属」および「所属」と「氏名」に絞り込み関係を定義することができます。 このとき、組織に "営業部" を選択すると、所属に "第一営業部" "第二営業部" が絞込まれるといったことができます。 さらに "第一営業部" を選択すると、氏名に "田中" "佐藤" が絞込まれるように設定することができます。

このとき、組織が "本社" だが、所属が空白で、氏名が "斉藤" というデータを用意することはできないということにご注意ください。 この場合、組織を "営業部" としつつ、所属を未決定とした場合でも、氏名欄には "斉藤" が選択肢として表示されてしまいます。なぜなら、氏名は「組織と所属のペア」で絞込まれるのではなく、あくまでも「所属」で絞込まれるためです。所属が未決定の場合、組織が何であっても氏名欄には "斉藤" が選択肢に加わってしまいます。

これを避けるため、ダミーの所属をご用意ください。例えば上の例ですと、組織 "本社" に対する所属として "(本社直轄)" などをご用意いただくことで解決できます。

この機能は、絞り込み元のデータをいったんメモリにすべて読み込み、Javaプログラムで1件ずつ条件に合致するかどうかを判定します。そのため、絞り込み元データが大量の場合は不向きです。絞り込み元(上記の例では「営業担当部署」)は画面に表示できる程度の数(数個から十数個程度)で用いるようにしてください。

例えば、絞り込み元はリストボックスだが数百件以上あり、これを画面上は隠し項目にするという設計では問題となります。この場合は「他項目の値で選択肢を絞り込む」方式をご利用ください。これは SQLで絞り込みを行うため、大量データを扱う場合は本方式よりも高速に動作します。

一覧表示画面で絞込が動作しない

一覧表示画面に絞込設定したモデル参照項目を含める場合、絞り込み項目も一覧表示に含める必要があります。(図10を例にとると、「営業担当者」項目を一覧表示に含める場合、絞り込み項目となる「営業担当部署」も一覧表示に含めるようにします。)

一覧更新画面で絞込が動作しない

  1. 一覧更新画面に絞込設定したモデル参照項目を含める場合、絞り込み項目も一覧表示に含める必要があります。上の説明(「一覧表示画面で絞込が動作しない」)と同様です。
  2. 絞り込み項目に「入力制御 > 共通 > 値変更時に画面を再描画する」を設定してください。画面再描画によって絞り込みが機能します。