サポート > リポジトリ > 他モデルの参照 > チェックボックス(有無フラグ)

有/無という状態を管理するチェックボックスを用意することができます。

Wagbyが提供するチェックボックスは、別テーブルで値を管理します。これは複数のチェックボックスが選択されることを想定しているためです。

しかしユーザーインタフェースはチェックボックスだが、テーブルには一つの値を保持したい(別テーブルに分割する必要がない)というケースがあります。具体的には「有無フラグ」のような二値の状態を保持するものです。

そこで Wagby では、内部構造はラジオボタン(一つの値だけを保持する)が、ユーザーインタフェースはチェックボックスという形式を用意することができます。ここではその方法を説明します。

選択肢モデルを準備する

次に示す選択肢モデルを事前に用意したとします。モデルID/モデル名は任意です。主キーの型は数字とします。

図1 有無状態を管理する選択肢モデル

ここでは "0" を "無" とし、"1" を "有" とします。

図2 有無状態に対応したID

顧客モデルで利用する

顧客モデルに「挨拶状」という項目を用意します。この値が選択された顧客へは挨拶状を送付するという運用を想定します。

図3 顧客モデル

この項目はラジオボタンとします。この設定により、生成されるテーブルには数値を管理するカラムが1つ用意されます。

図4 挨拶状項目の型の設定

入力制御 > モデル参照の設定で「ラジオボタンをチェックボックスで表示する」を有効にします。あわせて「チェックボックスの値」で、選択状態の値を指定します。この例では "有" は "1" ですので、1 を指定します。

図5 ラジオボタンをチェックボックスで表示する
この設定を行うと、クリアボタンは用意されません。図5では「クリアボタンを作成する」が有効になっていますが、この設定は無視されます。

初期値の設定

ここまでの設定で、画面上で項目を選択(チェック)するとサーバに値が送信されるようになりますが、Webアプリケーションでは送信される値は常に文字列となっています。Wagbyでは通常、型の変換は適切に行われるため開発者が意識する必要はありません。しかし今回のケースは「内部的にはラジオボタンだが、見た目はチェックボックス」という仕組みであるため、明示的な型変換処理を設定する必要があります。

具体的には、登録時と更新時の初期値に次の式を設定します。

図6 初期値の設定
IF(ISBLANK(REQUEST()), 0, TOINT(REQUEST()))

REQUEST関数は入力パラメータを意味します。戻り値は文字列型です。これに TOINT 関数を通すことで数値型に変換します。ISBLANK関数は値が空かどうかを判定します。

チェックボックスを選択しなかった場合、サーバに値は送信されません。つまり「値が送信されないか、"1" という文字列が送信されるか」になります。この式では、値が送信されなかった場合は 0 を、値が送信された場合は文字列の "1" を数値に変換することで、適切な値に変換しています。

実行例

挨拶状項目は一つのチェックボックスが用意されています。

図7 挨拶状項目を含んだ顧客更新画面

有無モデルを準備する

Wagbyが提供する選択肢モデルという形式ではなく、独自に(有無状態を管理する)モデルを用意する例を説明します。モデルID/モデル名は任意です。ここでは主キーの型は文字列型とします。

図8 独自に用意した有無状態を管理するモデル

顧客モデルの挨拶状項目の参照先モデルを、上で用意したモデルとします。

図9 挨拶状項目の参照先モデルの設定

入力制御 > モデル参照の設定で「ラジオボタンをチェックボックスで表示する」を有効にします。あわせて「チェックボックスの値」で、選択状態の値を指定します。今回も "有" を "1" として扱うようにします。

図10 ラジオボタンをチェックボックスで表示する

初期値の式を設定します。参照先モデルの主キーが文字列型なので、文字列型の "0" と "1" が格納されるようにします。

図11 初期値の設定
IF(ISBLANK(REQUEST()), "0", REQUEST())

実行例

有無モデルの値を事前に用意しておきます。

図12 有無モデルの値を設定しておく

挨拶状項目はチェックボックスとして操作できます。

図13 挨拶状項目を含んだ顧客登録画面