他項目の値で選択肢を絞り込む

最終更新日: 2021年6月12日
R8 | R9

例と定義方法

設定イメージ

「当社担当部署」を指定すると「当社担当者」の選択肢が変わる例を示します。

設定イメージ

図2は担当部署を選択していない状態です。このとき、担当者はいずれも選択できません。

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

担当部署を総務部とすると、総務部に所属する担当者が選択肢として表示されます。

担当部署に総務部を選択する

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

担当部署に営業部を選択する

定義方法

モデルは「スタッフ」「職種」「部署」「顧客」を用意しています。なお「職種」は選択肢モデルなので説明を割愛します。

用意したモデル

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

部署モデルの定義

「スタッフ」モデルは「部署」モデルを参照します。

スタッフモデルの定義
スタッフモデルの部署項目の定義

「顧客」モデルは「当社担当部署」として部署モデルを、「当社担当者」としてスタッフモデルをそれぞれ参照します。

顧客モデルの定義
顧客モデルの部署項目の定義
顧客モデルのスタッフ項目の定義

ここで絞り込みの設定を行います。「当社担当者」項目の詳細ダイアログから「入力制御>モデル参照(絞込)」を設定します。

モデル参照(絞込)の設定
項目名
自モデル(ここでは顧客モデル)内の、どの項目が絞込の元かを指定します。
絞込条件
一致していたものを選択するため "等しい" を指定します。
参照先項目名
「当社担当者」項目はスタッフモデルを参照しています。スタッフモデル側の部署項目である "dept" を指定します。
未入力のときの動作
図1にあるように、絞込元が未選択のときは選択肢を用意しないため、"選択肢を作らない" を指定します。

無効となった選択肢の選択状態を維持しない

標準では、絞り込み元の値を変えた場合(上記例では「当社担当部署」の値を変更した場合)「当社担当者」として選択されていた値は維持されます。 (絞り込み元の値をクリアした場合も同様に、絞り込み先の選択肢は維持されます。)

営業部担当者が選択済みの状態で、部署を変更する
選択されていた担当者は維持されるが、無効化されたマークが付与される

この動作を変更することができます。「無効となった選択肢の選択状態を維持しない」を有効にしたとき、絞り込み元の値を変えると選択肢はクリアされます。(この機能はリストボックス-リストボックスの組み合わせでのみ動作します。)

無効となった選択肢の選択状態を維持しない設定

この設定を行うと、絞り込み元の値を変えた場合、選択されていた候補は消去されます。

選択されていた担当者は維持されない

複数の条件で絞込む

複数の絞り込み条件を指定することができます。条件はすべて AND (「かつ」)で絞り込みが行われます。

設定イメージ

図17に示す絞り込みの例を説明します。絞り込み条件を二つ用意します。

設定イメージ

選択肢モデル「職種」が次のように用意されているとします。"一般" という職種のIDは "4" です。

職種の情報

絞込条件に「職種が一般のみ」という条件を追加しました。図4に比較すると選択肢が減っています。

営業部かつ一般職種のみが選択肢として用意される

定義方法

顧客モデルの当社担当者項目の絞込条件を追加します。 職種(title)のID値が"4"という固定条件を加えています。

職種の条件を加える

繰り返しコンテナ内の項目で絞り込む

設定イメージ

絞り込みむための条件に、繰り返しコンテナ内の項目を指定することができます。

設定イメージ

4人の社員を登録しておきます。

社員データ

"プロジェクト1" と "プロジェクト2" にそれぞれ社員を二名ずつ割り当てます。

プロジェクト1にユーザー1とユーザー2を割り当てる
プロジェクト2にユーザー3とユーザー4を割り当てる

作業実績を登録します。選択した社員に連動して、プロジェクトの選択肢が絞り込まれます。

ユーザー1を選択した場合は、プロジェクト1が選択できるようになる

ユーザー3を選択した場合は、プロジェクト2が選択できるようになる

定義方法

モデルは「社員」「作業プロジェクト」「作業実績」を用意しています。

モデル一覧

「社員」モデルは ID と名称から構成されています。

社員モデル

「作業プロジェクト」モデルには、1つのプロジェクトに複数名の社員が連なるようになっています。繰り返しコンテナで実現します。

作業プロジェクトモデル

「作業実績」モデルのプロジェクト項目に絞り込みを設定します。

作業実績モデル

(同じモデルに含まれる)「社員ID」項目が、(参照先モデル「作業プロジェクト」の項目)「社員ID (member/staffid)」に含まれているもの、という絞り込みルールを設定します。

絞り込みの設定

固定値に関数を利用する

絞り込み条件の固定値に関数を指定することができます。図32,33はログオン者が所属するグループによって「報告部署」項目が絞り込まれた例です。

システム管理者は複数のグループに所属している
経理グループ所属ユーザでログオンすると、経理グループで絞り込まれる

定義方法

「報告部署」項目はグループモデル(jgroup)をリストボックス形式で参照する、としています。

報告部署項目をモデル参照項目として用意する

絞り込みの設定を行います。固定値ですが、値部分に関数を用いています。

絞り込みの設定

利用できる関数

"検索制御 > 暗黙条件 > 関数を利用する" と同じです。こちらをお読み下さい。

参照先モデルが「検索画面」の場合

参照先モデルが検索画面の場合、固定値に式を記述することはできません。詳細は「検索画面>メインウィンドウの入力値を検索条件として再利用する」をお読みください。

IS NULL/IS NOT NULLで絞り込む

絞り込みの設定で IS NULL/IS NOT NULL 検索を行う場合、次のようにします。

検索方法固定値絞り込み条件
IS NULL null 等しい
IS NOT NULL null 等しくない

絞り込み設定を検索画面にも適用する

「入力制御 > モデル参照(絞込) > 検索画面でも絞込みを行う」を有効にします。

検索画面でも絞込みを行う

仕様・制約

動作の仕組み

本機能は、指定した絞り込み条件を SQL の where 句に含めます。すなわち絞り込み処理はデータベースで行います。そのため、参照先モデルの当該絞り込み項目はデータベースに保存されている必要があります。

固定値と特殊表記now

日付型項目の絞り込みでは、固定値として特殊表記 nowを利用することができます。本日の日付による絞り込みが行えます。

参照連動項目

参照連動項目に絞り込みは設定できません。(設定しても機能しません。)

サジェスト項目

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

繰り返しコンテナ利用時の制約

絞り込み先項目がコンテナ外項目として定義され、かつ、絞り込み元項目が繰り返しコンテナ内項目として定義されている場合は、絞り込みとして利用されるのはコンテナの1行目のデータのみとなります。

2行目以降のデータは絞り込みとしては利用されず、無視されます。

ウィザード利用時の制約

関連する項目(絞り込みの関係をもった項目)は同じ画面に含まれている必要があります。別々のウィザード画面に配置した場合は適切な絞り込みが行われません。

トラブルシューティング

絞り込みが適切に行われない場合、次の点をご確認ください。

  • 複数の絞り込み条件を指定している場合、その中の一つでも値が "null" となっていた場合、絞り込みが行えません。絞り込み条件に用いる値が適切かどうかを確認してください。
  • 絞り込み条件に用いる項目が「参照連動」や「計算式」によって求められる場合、当該絞り込み処理の前にこれらの値が確定している必要があります。未確定の場合は "null" となるため、絞り込みが行えません。設計情報の項目の記載順序を工夫し、参照連動の連動元項目を、絞込を定義している項目よりも前に定義しておくことで問題を回避できる場合があります。
  • 一覧表示画面および一覧更新画面に絞込設定したモデル参照項目を含める場合、絞り込み項目も一覧表示に含めるようにしてください。
  • 対象項目の型が数値型や日付型の場合、絞込条件を「文字列の部分一致」にすることはできません。

応用 消費税の扱い

アドオンギャラリーで提供されている「消費税」モデルを既存のプロジェクトに組み込んで利用する方法を説明します。

消費税率モデルは「税率開始日」と「消費税率」から構成されています。
「税率開始日」は主キーです。

消費税率モデルの内容

インストール

WagbyDesignerで「運用>アドオンギャラリー」を開き、JSHTAXを選択してインストールします。

利用方法

消費税率アドオンを利用するモデル「販売商品」を例に説明をします。

  1. 消費税率アドオンをインストールした後、「販売商品」モデルを次のように定義します。
    「価格(税抜き)」を入力すると、「価格(税込み)」が計算されるよう設定していきます。
    また、このとき「現在の消費税率」項目は、「隠し項目本日日付」の日付に応じて自動的に設定されるように工夫します。
    販売商品モデルの定義
  2. 図2の(1)、(2)、(3)の項目の詳細はそれぞれ次のように設定を行います。

    (1) 隠し項目本日日付

    モデル項目の詳細定義を開き、自動計算の入力欄に本日の日付を求める関数TODAY()を指定します。
    また、「値をデータベースに保存する」のチェックを外します。

    隠し項目本日日付項目の設定

    さらに、この項目を隠し項目にするため「入力制御」タブと「出力制御」タブで以下の通り設定します。

    隠し項目としての設定(1)
    隠し項目としての設定(2)

    (2) 隠し項目税率ID

    型を文字列から「他モデルの項目参照」に変更します。
    参照先モデルは「消費税率(JSHTAX)」を選択します。
    絞り込みルールを適用するため入力タイプは「リストボックス」とします。
    参照先モデル項目は、JSHTAXの主キー項目である「税率開始日」を選択します。

    消費税率モデルの参照

    さらに、こちらも隠し項目とするため、(1) 隠し項目本日日付 と同じように隠し項目の設定を行います。
    (図4,図5参照)

    最後に「絞り込み」設定を適用します。
    「入力制御」タブの「モデル参照」を以下の通り設定します。
    これによって、今日の日付と税率の適用開始日を比較し、データ入力時点の税率を求めます。

    絞り込み設定

    ワンポイント

    この設定のポイントは「選択肢の先頭のみ表示する」を有効にし、かつ、選択肢を STARTDATE の降順でソートしていることです。次の条件が揃った時、複数候補から一つだけを選択し、画面に表示させることができます。

    • モデル参照型で、入力タイプを「リストボックス」としている。
    • 値をデータベースに保存しない。(常にデータベースから値を取得するという意図)
    • 読み込み専用である。
    • モデル参照(絞込)の設定で、複数候補を条件によって絞り込んでいる。
    • 上の絞込みの結果、まだ候補が複数ある場合は、さらにソートキーを指定する。
    • この候補の「先頭のみ」を使う。

    (3) 現在の消費税率

    消費税率モデルの参照連動で求めるよう設定します。
    これによって、まず「隠し項目税率ID」が定まったあと、この値をキーにして実際の税率が定まるという動作になります。

    型を文字列から「他モデルの項目参照」に変更し、以下のように設定します。
    参照先モデル:消費税率 (JSHTAX)
    入力タイプ:参照連動
    連動する項目名:隠し項目税率ID (hiddentaxid)
    参照先モデル項目:消費税率 (RATE)

    現在の消費税率項目の設定

  3. 今回の例では「価格(税抜き)」を入力し、「価格(税込み)」は計算式で求める仕様とします。
    「価格(税込み)」の詳細定義を開き、「自動計算」に以下を指定します。
    小数点の計算は、MUL関数やADD関数を用いることで演算誤差を抑えることができます。

    VALUE(
      MUL(
        ${priceWithoutTax}, 
        ADD(
          "1.0",
          ${taxRate}
        )
      )
    )
    計算式の設定

    以上でモデルの定義は完了です。

  4. 次に、アプリケーション画面のメニューへの登録を行います。
    消費税率モデルと販売商品モデルをそれぞれメニューに登録します。
    メニューへの登録手順の詳細はこちらをご覧ください。
    下図は消費税率モデルを「共通処理」のタブに含め、メニュー名とアイコンを新たに設定した例と、
    販売商品モデルを新しく用意したタブ「販売管理」に含めた例です。
    メニューへの登録(1)
    メニューへの登録(2)

動作の確認

  1. はじめにビルドしたアプリケーションにログインし、
    消費税率モデルの初期データ「data_addon_JSHTAX」をインポートします。
    消費税率モデルの初期データ
  2. インポートしたデータを確認します。
    「メニューへの登録」手順で追加した「消費税率」をクリックします。
    消費税率メニュー
  3. データが以下の通り登録されています。
    消費税率モデルの初期データ
  4. 販売商品モデルの新規登録を行ってみます。
    「価格(税抜き)」に数値を入力すると「価格(税込み)」が計算され、値が表示されます。
    販売商品モデルの新規登録

ここでは消費税率を自動的に算出するようにしましたが、日付をTODAY関数に代えて入力方式とすることで、その時点の消費税率が自動的に適用されます。

販売商品モデルの新規登録(3)日付を入力方式に代える

※ この方法を応用することで、日付別に異なるマスタ値を自動設定させることができます。

関連するページ