概要
1つのモデルで複数の画面を作成する場合は、まずメインとなるモデル(以後「メインモデル」と呼びます)を定義した後に、その定義内容をコピーして新しいモデル(以後「サブモデル」と呼びます)を定義します。
1つのメインモデルに対して複数のサブモデルを用意することもできます。
- 画面を複数用意できますが、データをやり取りするモデルそのものは1つです。
- データベース上では、メインモデルとサブモデルは共通のテーブルが使用されます。
- サブモデルはメインモデルのサブセットの関係にあるので、既存項目(主キーを除く)を削除して減らすことはできますが、メインモデルにない新たな項目を追加定義することはできません。[詳細...]
サブモデルの作成方法
メインモデルを一つ選択します。
ギアアイコンから「テンプレート > サブモデル」を選択します。
標準では、モデル名に「- サブモデル」と付与されたモデルが新規で作成されます。モデルIDは「1」という数字が付与されます。
サブモデルの定義を開きます。最初にモデル名、モデルIDを適切に変更してください。
ここでは項目名にすべて "[サブ]" という名称を加えてみました。(項目名は変更可能です。項目IDは変更できません。)
また、備考という項目を削除してみました。(サブモデルでは項目を減らすことはできます。)
例
はじめに、サブモデルからデータを登録してみます。
図8は、サブモデルからデータを1件、登録した例です。
続いて、メインモデルの検索を行なってみます。
メインモデルでは、サブモデルから登録したデータを共有できていることがわかります。(テーブルは1つなので、共有されています。)
具体的な活用シーン
スマートフォン
スマートフォン版の画面は、PC版のサブセット(一部)という場合に適用できます。PC版のモデルをメインモデルとし、スマートフォンで使うモデルをサブモデルとします。サブモデルは、メインモデルの項目の一部、という扱いになります。
その上で、サブモデルに対して「スマートフォンで使う」設定を有効にします。
複数の一覧表示画面
サブモデルを使って、1つのモデルに複数の一覧表示画面を作成する、といったことができます。ユーザごとにアクセスする画面を分けたいという場合にも有効です。
セキュリティ
権限のあるユーザにはメインモデルを見せる、権限のないユーザには項目の少ないサブモデルを見せるという設計に適用できます。
権限設定との組み合わせ
例
サブモデルを使って、ユーザの権限ごとに操作できる画面を分ける例を紹介します。
この例では「山田」「鈴木」という二つのアカウントを用意しています。
アカウント | プリンシパル | モデル |
山田 | 顧客管理 | 顧客 (メインモデル) |
鈴木 | 一般 | 顧客(一般ユーザ用) (サブモデル) |
図11は、ユーザ山田による顧客の一覧表示画面の操作例です。
図12は、ユーザ鈴木による顧客の一覧表示画面の操作例です。このサブモデルは「電話番号」項目が含まれていません。
図13、図14は、それぞれのユーザのプリンシパルを示しています。
プリンシパルに応じて、操作できるモデルを変えることができます。ユーザ山田とユーザ鈴木では、ログオン後のメニューに表示されるモデルが異なります。ユーザ山田はメインモデルを、ユーザ鈴木はサブモデルを操作します。
なお、システム管理者はすべてのモデルを操作できます。
定義方法
「顧客」モデルに対して、サブモデル「顧客(一般ユーザ用)」を用意しました。(参考:サブモデルの作成方法)
図19はメインモデル「顧客」、図20はサブモデル「顧客(一般ユーザ用)」です。サブモデルは「メールアドレス」と「電話番号」を削除したものとなっています。
権限の設定
メインモデル「顧客」に最初から備わっていたプリンシパル「一般ユーザ」を削除します。
新しいプリンシパル「顧客管理」を用意します。すべての操作を許可します。
サブモデル「顧客(一般ユーザ用)」のプリンシパルは、更新系の権限を無効とします。これによって閲覧のみが行えるようになります。
メインモデルを変更する
サブモデルを作成したあと、(自身の)メインモデルを変更することができます。
「画面 > その他 > モデルの関連性」から「メインモデル名」を指定します。
サブモデル一覧画面からメインモデル詳細画面へ遷移する
例
顧客(サブモデル)の一覧表示画面を図12に示します。ここで「詳細」ボタンを押下すると、顧客(メインモデル)に遷移します。(図13)
定義方法
サブモデルを用意します。
サブモデルの「画面 > 検索・一覧表示 > 詳細ボタン」で、「遷移先モデルID」から自身の親モデルを指定します。
外部キー連携における子モデル一覧表示の場合
外部キー連携において、親モデル詳細画面の下部に表示される子モデル一覧表示の「詳細」ボタンと「更新」ボタンの遷移先をそれぞれ指定できます。
仕様・制約
- サブモデルはメインモデルの部分集合のため、テーブル構造が変わるような変更を行うことはできません。
よって、サブモデルを定義する場合、メインモデルで定義された以下の点は変更してはいけません。
(変更した場合は、ビルド時もしくは実行時にエラーとなります。)
- 項目ID
- 項目の型
- 「データベース保存」対象の項目を追加すること。(データベース非保存の自動計算項目や参照連動項目等はサブモデルへ追加することができます。)
- モデル項目定義シートの「リレーショナルデータベースの詳細」「必須チェック」等の設定について、メインモデルと異なる定義をすること(メインモデル、サブモデルともに同じ設定にする必要があります。)
- サブモデルのサブモデルを定義することはできません。サブモデルは常にメインモデルと関係づけするようにしてください。
- サブモデルでデータの削除を行う場合、メインモデルに含まれる「モデル参照(チェックボックス)」「繰り返し項目」「繰り返しコンテナ項目」を必ずサブモデルでも用意してください。(サブモデルで不要な場合は、隠し項目とすると良いでしょう。)この対応を行わない場合、サブモデルからのデータ削除に失敗します。
- メインモデルとサブモデルで、同じ項目に対してモデル参照先の項目を変更する場合、モデル参照先の「型」は同じとなるように配慮してください。
- 親子モデル関係において、親モデルは子モデルの値を自動計算式で利用できますが、親のサブモデルでは(子モデルを)利用できません。例えば親モデル parent と子モデル child があったとき、親モデルのサブモデル parentsub 内の項目で計算式に child_lp.item1 と記述することはできません。このような場合はサブモデルの方でも、同じ子モデルを参照するようにするように設定してください。
よくある質問と回答
サブモデルにメインモデルと違うデータ権限を設定することはできますか。
サブモデルにメインモデルと違うデータ権限を設定することは可能です。
例えば、メインモデルは権限3とし、サブモデル1は権限2、サブモデル2は権限3にするということができます。
項目の必須チェックはメインモデルとサブモデルで同じようにするという仕様ですが、「警告」はメインモデルとサブモデルで変えることはできますか。
必須チェックについては、指定する箇所に「○」「警告」「未指定」の3種類の値が設定可能です。「○」を設定した場合データベースのテーブル定義にて、対応する列にNOT NULL制約が設定されます。このため、いずれかのモデルに「○」を指定した場合、メインサブ関係にある他のモデルにも「○」を指定する必要があります。これは同じテーブルを使うためです。
警告や未指定は組み合わせることが可能です。例えば下記のようになります。
設定可能な組み合わせ
メインモデル | サブモデル |
○ | ○ |
警告 | 警告 |
(未指定) | 警告 |
警告 | (未指定) |
(未指定) | (未指定) |
設定できない組み合わせ
メインモデル | サブモデル |
○ | 警告 |
○ | (未指定) |
警告 | ○ |
(未指定) | ○ |
メインモデルとサブモデルという関係ではなく、物理テーブルを共用することはできますか。
可能です。詳細は"モデル > データベースの詳細 > 物理テーブル名"をお読みください。