選択肢モデル

最終更新日: 2022年10月31日
R8 | R9

選択肢モデルとは

データを登録・検索する時の入力方式のひとつとして、テキスト入力のほかに
セレクトボックスやラジオボタンのような、「用意された選択肢の中から選ぶ」方式があります。
都道府県や血液型など、登録したいデータがいくつかの候補に特定できるような情報は、図のようにテキスト入力ではなく選択方式になっていたほうが便利です。

選択肢の例(セレクトボックス)
これを実現するのが「選択肢モデル」です。

通常、選択肢モデルはリストボックスラジオボタンチェックボックスのいずれかの方式で利用します。

選択肢モデルは、モデル項目として以下の項目があらかじめ定義されています。

項目名項目ID役割
主キーid数値
文字列
日付・時刻
主キー
内容content文字列選択肢として表示される内容
表示優先度priority数値選択肢の並び順を設定できる。
(数値の降順で表示される)
有効期限valid文字列値がセットされていた場合には無効扱いとなる

重要

  • 選択肢モデルの項目名と項目IDは変更できません。
  • 型は主キーのみ変更可能です。「文字列」「数値」「日付・時刻」より選択できます。
  • 選択肢モデルには、モデル項目を新たに追加することはできません。

選択肢モデルの作成方法

「業種」情報を格納する選択肢モデルの作成例です。

  1. 選択肢モデルを追加します。
    モデル一覧画面のギアアイコン > テンプレート の中から
    「選択肢モデル」
    「選択肢モデル(初期データ固定)」
    のいずれかを選択します。
    選択肢モデルの追加
    この2つの違いは以下の通りです。
    タイプ特徴使い方
    選択肢モデル アプリケーション上でデータの追加・変更可能
    =運用中に選択肢を追加変更できる
    運用開始後も内容の変更・追加が想定される選択肢の実装
    選択肢モデル(初期データ固定) アプリケーション上でのデータ変更不可
    =運用中は変更できない
    (再ビルドが必要)
    血液型や都道府県など、内容変更が不要な選択肢の実装
  2. モデル名とモデルIDを設定します。
    モデル名とモデルIDの設定

    以上で、選択肢モデルの作成は完了です。
    モデル項目はあらかじめ用意されているため、定義は不要です。

  3. 次に、初期データの設定を行います。
    選択肢モデルは通常のモデルとは異なり、初期値(初期データ)を設定することができます。
    「初期データ」タブをクリックすると、初期データの設定画面が表示されます。
    初期データの設定

    左端の「No.」は固定(連番)です。画面表示に用いられるのみで、データベースには格納されません。
    「ID」が主キーとなります。

  4. 初期データを複数設定する場合は、ギアアイコン の「新規」をクリックします。
    初期データを複数設定

    ワンポイント

    選択肢の値はアプリケーションの運用開始後でも追加・変更が可能です。
    詳細は「運用中に選択肢を追加する」にて説明しておりますのでそちらをご覧ください。

    重要

    初期データは1件以上、用意してください。(1件も用意しない、ということはできません。)

    注意

    「内容」を空白にすることはできません。(スペースだけの文字列も空白と扱われます。すなわち、内容部が空、という選択肢を用意することはできません。)

選択肢モデルの参照方法

選択肢モデル「業種」を他モデル「顧客」で参照する例です。

  1. 顧客モデルの定義は次のようになっています。
    モデル項目「業種」の型として「他モデルの項目参照」を選択します。 「他モデルの項目参照」を選択すると「モデル項目の型詳細設定」ダイアログが開きます。
    業種モデル項目の情報を設定
  2. 参照先モデルとして、選択肢モデル「業種」を選択します。
    参照先モデル項目は、「内容(content)」を指定します。
    入力タイプのうち、以下3種が選択形式です。
    • リストボックス
    • ラジオボタン
    • チェックボックス
    モデル項目の型詳細設定

    それぞれの実装プレビューは下表の通りです。

    入力タイプ名 プレビュー
    リストボックス
    選択肢の他に「(未選択)」 という値がデフォルトで用意されます。
    これは何も選択していない状態を示します。
    「(未選択)」 を非表示にする方法はこちらをご覧ください。
    ラジオボタン
    項目名の横にある消しゴムボタンをクリックすると、未選択状態になります。
    チェックボックス
    項目名の横にあるチェックボタンをクリックすると、全選択肢にチェックが入ります。
    全選択状態でクリックした場合、すべての選択状態が解除されます。
  3. 必要に応じて、オプションを設定します。
    選択肢に関する設定は下図の①~③です。
    オプションの設定
    各設定に関する説明は以下の通りです。

    ①ソートルール

    選択肢の表示順を決めるルールを設定できます。デフォルトは「ID」の「昇順」です。
    各設定項目の説明は以下の通りです。

    表示優先度
    ②の表示優先度項目で指定した項目によってソートされます。
    後から選択肢の並び順を変更したいような場合には、あらかじめこちらを選択してください。
    ※②が未設定の場合、「主キー(ID)の昇順」となります。
    ID
    選択肢モデルの主キー(ID)の値によってソートされます。
    内容
    選択肢モデルの内容によってソートされます。
    参照先モデルの固定ソートキー
    選択肢モデルでは設定できません。

    ②表示優先度項目

    ①のソートルールで「表示優先度項目」を指定した場合、ここでソート条件となるモデル項目を指定します。
    指定する項目の型は数値(整数)である必要があります。
    ※①で「表示優先度項目」を選択していない場合はここで指定した内容は適用されません。

    ③無効判定項目

    「無効な選択肢」と判断する条件(モデル項目)を指定します。
    ここで指定したモデル項目に何らかの値が格納された場合に「無効」とみなされます。
    無効とみなされた選択肢は画面に表示されません。

運用中に選択肢を追加する

選択肢の値は、運用中に追加・変更することができます。
以下は、選択肢モデルの一覧更新画面より追加・変更する手順です。

重要

選択肢(初期データ固定)の場合は運用中の変更は行えません。WagbyDesignerで初期データを変更した場合は、再ビルドを行ってください。

  1. 選択肢モデルの検索画面を開き、「一覧更新へ」をクリックします。
    選択肢モデルの検索画面
  2. この画面で選択肢の更新・追加・削除が行えます。
    選択肢の追加は、「新規」ボタンをクリックして入力行を追加します。
    また、削除する場合は「削除」列にチェックを入れます。
    一覧更新画面
  3. 更新が完了したら「保存」ボタンをクリックし、更新内容を保存します。
    更新内容の保存
  4. 選択肢モデルを参照しているモデル(ここでは「顧客」モデル)の新規登録画面で、選択肢が追加されたことが確認できます。
    選択肢が追加された

選択肢の表示順を変更する

選択肢の表示順は以下の手順で運用中に変更できます。

重要

この機能を利用するには、参照先モデル項目のオプション設定にて以下をあらかじめ指定する必要があります。

  • ソートルール:表示優先度項目の降順または昇順
  • 表示優先度項目:表示優先度(priority)
オプション設定

また、選択肢(初期データ固定)の場合は運用中の変更は行えません。WagbyDesignerで初期データを変更した場合は、再ビルドを行ってください。

  1. 業種モデルの一覧更新画面を開きます。 選択肢の「表示優先度」項目に、それぞれ任意の数字を設定します。
    オプションで設定したソートルールの通りの順番で選択肢が表示されます。(今回の例では「表示優先度」項目の「降順」としています)
    上から、
    • 医療機関
    • 食品
    • 金融
    の順に表示する場合の例は下図の通りです。「保存」をクリックして更新内容を保存します。
    表示優先度の設定
  2. 選択肢を参照しているモデルの登録画面で、指定した並び順通りになっていることが確認できます。
    選択肢の並び順変更結果

選択肢を無効にする

Wagbyでは、運用中に選択肢を物理削除することを推奨していません。
選択肢はさまざまなモデルから参照される性質を持っており、データを削除するとデータ上で不整合が発生するおそれがあるためです。
その代わりに、選択肢を無効にする(論理削除)ことができます。ここでは、その方法を説明します。

重要

この機能を利用するには、参照先モデル項目のオプション設定にて以下をあらかじめ指定する必要があります。

  • 無効判定項目:有効期限(valid)
オプション設定

また、選択肢(初期データ固定)の場合は運用中の変更は行えません。WagbyDesignerで初期データを変更した場合は、再ビルドを行ってください。

  1. 「業種」モデルの一覧更新画面を開き、無効にしたい選択肢の「有効期限」欄に任意の文字を登録します。
    ここに何らかの文字が含まれていた場合、データは無効になります。
    有効期限項目に値をセットする

    ワンポイント

    「有効期限」欄に登録する文字列について
    上図の例では、「前期で終了」という文字列を登録しています。
    有効期限項目は文字列型のため、無効にすると同時に「無効にした経緯」や「いつ無効としたか」等、メモを残すことができます。

    有効期限(valid)の特別な書式

    日付形式の文字列(yyyy/MM/dd)を利用した以下の書式を指定することで、選択肢の有効期間を設定できます。

    有効期限の設定値(例) 仕様
    2020/1/1-2020/12/31 2020/1/1 から 2020/12/31 まで有効
    例:本日が 2020/7/1 の場合は有効。本日が 2021/1/1 の場合は無効となる
    -2020/12/31 2020/12/31 まで有効
    例:本日が 2020/7/1 の場合は有効。本日が 2021/1/1 の場合は無効となる。
    2020/1/1- 2020/1/1 から有効
    例:本日が 2020/7/1 の場合は有効。本日が 2019/12/31 の場合は無効となる。
    2020/12/31 2020/12/31 のみ有効
    例:本日が 2020/12/31 の場合は有効。それ以外の日であれば無効となる
    2020/12/31 無効 2020/12/31 のみ有効
    つまり "無効" の文字の有無にかかわらず、"2020/12/31" という表記が解釈され、上と同じ動作になる。
    無効(2020/12/31) 日付は無視される。一切の有効期間は存在しない。

    注意

    日付書式は "yyyy/MM/dd" です。 yyyy-MM-dd形式ではありません。"-" は、開始日付と終了日付の区切り文字として使われます。

  2. 無効な選択肢を参照しているデータでは、下図のように、値の横に「(-)」というマークが表示されます。
    これは「現在は無効の選択肢データを参照している」ことを意味します。
    無効な選択肢を参照しているデータ

    ワンポイント

    無効な選択肢を表すマーク(-)は、変更することができます。
    変更方法はこちらをご覧ください。

  3. 各画面における無効な選択肢の表示は以下の通りです。

    登録画面

    選択肢の表示画面には、無効にした選択肢が表示されなくなります。

    「業種」の選択肢から「食品」が消えている

    検索画面

    こちらも登録画面と同様、無効にした選択肢は表示されません。

    「業種」の選択肢から「食品」が消えている

    更新画面

    無効な選択肢が設定されたデータの更新画面では、無効な選択肢も表示されます。

    無効な選択肢が表示されている

    ワンポイント

    これらの動作はリストボックスラジオボタンチェックボックスのいずれにも対応しています。
    「検索画面」方式では利用できません。

無効な選択肢を示すマークを変更する

"Appendix > 選択肢の無効化マークを変更する"をお読みください。

無効な選択肢も検索対象とする

無効な選択肢は検索画面には表示されないため、通常は検索条件として指定できません。
しかし、以下の設定を行うことで無効な選択肢を指定した検索が可能になります。

  1. 選択肢を参照しているモデル(ここでは「顧客」モデル)の編集画面より、参照モデル項目の詳細定義ダイアログを開きます。
    モデル定義画面
  2. 「検索制御」タブ内の「無効判定項目を無視する」にチェックを入れ、有効にします。
    これで設定は完了です。

    この設定は検索画面のみ有効で、新規登録・更新画面では無効データは表示されません。

    モデル項目詳細定義ダイアログ
  3. アプリケーションの検索画面で無効な選択肢が表示されるようになります。
    検索画面

参照先モデルのデータが削除されていた場合

選択肢が物理削除された場合、その選択肢を設定しているデータの詳細表示画面には「存在しないデータ」と表示されます。
横の数字は削除された選択肢の主キーの値を示しています。

削除された選択肢を参照しているデータの表示

この「存在しないデータ」という文言は、次の手順で変更することができます。

  1. カスタマイズ用のリソースファイル myjfcapp_ja.properties.UTF8 を新規に作成します。
    このファイルを customize/resources フォルダに保存します。
  2. 次のエントリを用意します。
    __jfc_common.data.noexist=XXX
    XXXには任意の代替文字を指定します。なお、空文字とすると空白で表示されます。

データベース内部の詳細

選択肢モデルを参照する側(ここでは「顧客」モデル)の項目では、選択肢モデルの主キー(ID)の値を保持します。
内容(content)は保持されません。

データベース上のテーブルを確認すると、IDの値が格納されていることがわかります。

入力タイプ「チェックボックス」を用いた場合は複数の選択肢(ID)を保持するため、専用のテーブルが作成されます。詳細...

選択肢モデル(初期データ固定)

「選択肢モデル(初期データ固定)」は、運用中に選択肢を変更することができません。
固定値として扱われるため、内部ではテーブルを作成せず、メモリ上で管理されます。

選択肢モデルの追加メニュー

初期データ固定の選択肢モデルには、次のルールが適用されます。

Designer上の設定は無視され、強制的に上のルールが適用されます。

注意

本設定は「選択肢モデル」のみで利用できます。(通常のモデルでは利用できません。)

設計上の注意点

初期データ固定とした場合、内部では一切のデータベース操作を無効として扱います。
前述したルールの通り、システム稼働中のデータの追加、更新、削除は行えません。
検索も検索条件を指定した絞り込みは行えず、常に全件のデータを取得します。

そのため、次の設定と組み合わせることはできません。

  • 外部キー
  • メインモデルまたはサブモデル
  • 全文検索
  • ワークフロー
  • 楽観ロック
  • カレンダビュー、集計ビューをはじめとする各種ビュー
  • 暗黙条件
  • データ権限
  • この選択肢モデルのIDをキーに、自身のモデルの項目(内容、表示優先度など)を参照連動するような使い方

これらの制約から、本設定は選択肢としての初期データとして扱うのみとしてご利用ください。

運用上の注意点

  • 選択肢モデルに項目を追加することはできません。同様に、用意されている項目を削除することもできません。
  • 「テーブルを作成しない選択肢モデル」をサブデータベースで用意することはできません。

仕様

  • アプリケーション起動時に WEB-INF\export\init\<モデルID> フォルダ内に格納されている xml ファイルを読み込み、メモリに格納します。

入力フィルタ

選択肢モデルの内容(content)項目の入力フィルタには「文字列(一般)」が設定されています。
そのため、WagbyDesigner上での初期データ登録時でも、全角文字は半角文字に変換されます。
この設定は次の手順で変更することができます。

入力フィルタの変更手順

  1. 選択肢モデルの編集画面を開き、ギアアイコンより「詳細定義一括設定」をクリックします。
    モデル定義画面
  2. カテゴリ欄で「入力制御」を選択し、リポジトリキー欄に「@filter」または「入力フィルタの選択」と入力します。
    入力すると、下図のようにリポジトリキー欄に「model/modelitem/@filter:入力フィルタの選択」が表示されます。
    これを選択します。
    モデル項目詳細一括定義ダイアログ
  3. 変更対象の「内容」行の左側のチェックボックスにチェックを入れ、設定値のリストボックスから任意のフィルタを選択します。
    選択したら、右下の「保存」ボタンをクリックします。
    モデル項目詳細一括定義ダイアログ
  4. 更新確認ダイアログで「はい」をクリックすると、変更が完了します。