親キー以外の項目値を用いて子モデル一覧表示を行う
最終更新日: 2020年3月14日
R8 | R9
「週報」モデルを親(parent)とし、「行動計画」モデルを子(child) とした例を用いて説明します。
通常、行動計画モデルは、自分の親となる週報モデルのキーを(外部キーとして)保持します。しかし図1,図2からわかるように、外部キー「週報ID」を未設定としています。
実はこのサンプルアプリケーションは、行動計画(子)の「活動日」が、週報(親)の「開始日」と「終了日」の期間に含まれるデータが一覧表示されるようになっています。図1のログオンアカウントは "佐藤" で、図2のログオンアカウントは "山田" ですが、週報IDが未設定であるため、それぞれの週報の子モデルとして(同じ行動計画データが)表示されていることがわかります。
このため、行動計画の策定時は「どの週報に紐づくか」を未設定としたままデータの新規登録が可能です。運用しながら、紐づく親を指定しますが、変更も行うことができます。それでいて、週報(親)の子モデルとして、期間による絞り込みで行動計画(子)を表示することができます。
図3は、行動計画データの一つについて、週報ID(親の主キー)を設定した例です。週報IDが"1001"の週報(これは"山田"の週報です)に行動計画(子)が表示されています。
"佐藤"の週報では、このデータは表示されないようになります。
なお、システム管理者はすべてのデータが閲覧できることに注意してください。
このアプリケーションでは、週報モデルを parent、行動計画モデルを child としています。
行動計画モデルでは、週報IDは外部キーとなっていることがわかります。
週報(親)の詳細表示処理時、週報の「開始日」を p.request オブジェクトにセットしています。
行動計画モデルでは、actiondate 項目を検索条件に設定します。このとき「範囲検索」は無効とします。
設定された値 "begindate" を使って絞り込み条件を設定しています。
今回の例では、一回の処理の間に、親のヘルパクラスの beforeShow メソッドが呼ばれ、そのあとに子の一覧表示が行われるという「順序」も重要です。この順序に従って、親の処理で p.request に「開始日」の情報をセットし、子の一覧表示(のときに用いられる暗黙条件のルール)で、その「開始日」を使っています。このとき、ATTRIBUTE 関数を使って値を取得することができます。
例
週報(親)を確定させる
システム管理者はすべてのデータが閲覧できる
定義方法
週報モデルと行動計画モデル
スクリプトの設定(親)
if (parent !== null) {
var s = parent.begindate;
p.request.setAttribute("begindate", s);
}
暗黙条件の設定(子)
(java.sql.Date)ATTRIBUTE("begindate")
仕様・制約
ATTRIBUTE関数について
制約