参照モデル同士の関係性で選択肢を絞り込む

最終更新日: 2022年5月11日
R8 | R9

リストボックスで絞り込み、リストボックスで選択する

社員モデルの社員名を参照する例で説明します。
この場合、参照先の社員数が多いとリストボックスから探すことが困難です。
そこで、最初に「部署」を選択し、その部署に所属する「社員」を選択する という絞込み機能を実現します。

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

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

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

第一営業部を選択する

担当部署を「第二営業部」に変更すると、同部に所属する担当者が選択肢として表示されます。

第二営業部を選択する

検索条件に用いる

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

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

定義方法

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

部署モデル

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

部署モデル

社員モデル

「社員」モデルの「部署」項目は「他モデルの項目参照」とし、部署モデルの「部署名」項目を参照します。
入力タイプはリストボックスとします。

社員モデル
「部署」項目の参照設定

顧客モデル

「顧客」モデルの定義です。

顧客モデル

「営業担当部署」項目は部署モデルの「部署名」を参照します。

顧客モデルにおける営業担当部署の関連設定

「営業担当者」項目は社員モデルの「社員名」を参照します。

「営業担当者」の参照設定(1)

さらに、「営業担当者」項目は「オプション > 絞り込み項目」を設定します。
絞り込み項目として指定できる項目の条件は次の通りです。

  • 同モデル内の他モデル参照項目であること。(数字、文字列、日付型は利用できません)
  • 参照先モデル(ここでは「社員」モデル)にも含まれる項目であること。
「営業担当者」の参照設定(2)

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

設定イメージ

ラジオボタンで絞り込み、リストボックスで選択する

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

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

チェックボックスで絞り込み、リストボックスで選択する

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

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

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

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

リストボックスで絞り込み、チェックボックスで選択する

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

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

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

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

ラジオボタンで絞り込み、チェックボックスで選択する

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

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

チェックボックスで絞り込み、チェックボックスで選択する

営業担当部署項目と営業担当者項目のいずれもチェックボックスとした例です。

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

仕様・制約

動作の仕組み

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

指定できないパターン

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

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

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

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

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

サジェスト項目

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

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

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

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

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

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

パフォーマンス

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

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

トラブルシューティング

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

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

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

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