他項目の値による入力制御

最終更新日: 2024年6月19日
R8 | R9

入力可制御

レポートモデルのステータス項目で「トラブル」を選択したときに「原因」項目を入力できるようにする例です。
ステータスマスタの初期データは、下図の通り用意されているとします。

ステータスマスタの設定
  1. レポート新規登録画面の初期状態は、「原因」項目の入力が行えません。
    原因項目は入力できない
  2. ステータス「トラブル」を選択すると、「原因」項目が入力できるようになります。
    原因項目の入力が可能になる

定義方法

「レポート」モデルは次の通り設定します。

レポートモデルの定義

「原因」項目の詳細定義ダイアログを開きます。 「入力制御 > 入力可・不可制御 > 他項目の値によって入力可にする」に "項目名=値" という形式で式を記述します。

status=2
他項目の値によって入力可にする設定

複数の値を指定する場合

一つの項目に対して複数の値を指定する場合は、"," (カンマ)区切りで指定します。以下の例は優先度が 1 または 2 の場合という意味になります。

status=1,status=2

他項目に値が入力されている場合に入力可とする

ある項目に値が入力されている場合のみ入力可とする(未入力の場合に入力不可とする)こともできます。
他項目の項目IDがstatusのとき、下記のように記述します。

status=

変更時の既存データの扱い

上記例において、新規登録時に「原因」を記載、「ステータス」を "トラブル" 以外に変更したとします。このとき、すでに入力済みの「原因」の扱いをどうするかについて、二つの方法を提供しています。

選択肢挙動
空白で上書き(標準) すでに入力済みの項目値は画面上に維持されますが、サーバには送信されません。
値を保持入力不可となった場合でも、すでに入力された値は残します。
※ 入力可・不可制御は、条件により入力項目の disabled 属性を true, false へ切り替えることで実現しています。 入力項目の disabled 属性が true の場合は入力欄がグレーアウトされ、入力値があってもサーバへは値が送信されません。これは HTML の仕様です。

この設定の切り替えは、図6 に示すように選択できます。未設定時は「空白で上書き」となります。

変更時の既存データの扱いを指定する

必須指定との組み合わせ

入力可とする制御は必須チェックと組み合わせて定義することができます。 「入力可」になった場合に必須入力項目となります。

初期値を設定する場合

何らかの値を初期値として設定する場合は「値を保持」とするようにしてください。「空白で上書き」の場合、画面再描画が発生したタイミングで初期値が消失します。

補足:「ステータスID」項目の式

上記の例で「ステータスID」という項目は本来、不要です。ID値を目視するために用意しています。 この項目は(IDを格納するため)数値型としており、次の式を適用しています。

${status#id}

式の記述方法の詳細は「計算式>モデル参照」をお読み下さい。

入力不可制御

条件に合致した場合に入力不可にする、という指定を行うこともできます。 図7は、ステータスが"1"の場合に入力を不可にする例です。

原因項目の入力が不可能になる

定義方法

「入力制御 > 入力可・不可制御 > 他項目の値によって入力不可にする」の欄に条件式(項目名=値)を記述します。

他項目の値によって入力不可にする設定

繰り返しコンテナ

繰り返しコンテナ項目での入力可・不可制御は次の組み合わせで動作します。

制御元が通常項目、制御先が繰り返しコンテナ項目

繰り返しコンテナの列の項目の制御を行います。

制御元が通常項目、制御先が繰り返しコンテナ項目

制御元が繰り返しコンテナ項目、制御先も繰り返しコンテナ項目

繰り返しコンテナの行毎の項目の制御を行います。設定欄に繰り返しコンテナ項目を記述するときは「コンテナ名/項目名」とします。(例: cont/citem1)

制御元が繰り返しコンテナ項目、制御先も繰り返しコンテナ項目

仕様・制約

定義できない型

「他項目」として定義できない型

  • 上記「定義できない型」の4パターン
  • ファイル型
  • モデル参照(検索画面)

動作しない画面

  • 一覧更新画面(グリッド)
  • 検索画面での検索項目

条件式の記述

  • 式は "項目名=値" という書式のみを受け付けます。関数を記述することはできません。またモデル参照項目では、ID部を指定してください。(上記例では "トラブル" という文字ではなく、"2" というIDを使っていることを指します。)
  • 条件式に複数の項目を記述することはできません。例えば gender=1,status=2 という指定を行うことはできません。回避策として、この条件を満たす隠し項目を用意し、隠し項目を制御元とするようにしてください。
  • 条件式の項目に隠し項目を使うことはできません。 この制約は R9.1.5/R9.2.1 で解消されました。

両方を同時に指定することはできません

「他項目の値によって入力可とする」「他項目の値によって入力不可とする」を両方、同時に指定することはできません。

異なるモデルで同じ項目名を用いることはできません

例として、外部キー連携により複数の子モデルを持つ親子モデルの同時更新画面を想定します。このとき、2つの子モデルで入力可・不可の制御元の項目が同じ項目IDをもっている場合は、動作しません。(2つの子モデルがメインモデルとサブモデルの関係で、同じ項目IDというケースが考えられます。)

※ 入力可・不可の制御は「項目ID」のみで判断しており、「モデルID」は含まれていません。そのため、このようなケースではどのモデルの項目かを判定できません。

読み込み専用項目(参照連動項目、自動計算項目を含む)の扱い

「他項目」が読み込み専用項目の場合でも画面の初期表示時のみ「他項目の値による入力制御」が動作します。ただし表示後(式などによって)読込専用項目の値が変わっても入力可/不可の状態は変化しません。

※ 本機能は「他項目」の値が変更された際に発生する JavaScript の change や blur イベントを利用しているためです。読込専用項目ではこれらのイベントが発生しないため、値が変更された場合に入力可/不可の状態を変化させることができません。

この回避策として、この読み込み専用項目を、同時に隠し項目としても設定してください。

※ 本設定は一覧更新画面でも動作します。

ファイル型の扱い

ファイル型では「空白で上書き」「値を保持」の設定は無効となります。常にファイルはサーバに送信されるため、ファイルを消去する場合はクリアボタンを押下してください。

複合キーの扱い

入力可・不可制御で設定する値が複合キーの場合は区切り文字$SEP$を使います。
例えば項目 tantosya がモデル参照項目で、参照先モデルが複合主キーの場合、次のように記述します。
tantosya=主キーの値1$SEP$主キーの値2

※ 具体的な値は、画面に表示される html のソースから確認することができます。上の例で、例えば tantosya 項目がリストボックス形式の場合、select...optionというhtml要素が用意されます。このoption要素のvalue属性の値を使います。<option value="aaa$SEP$123">選択肢1</option> となっている場合、tantosya=aaa$SEP$123となります。