親キー以外の項目値を用いて子モデル一覧表示を行う

最終更新日: 2020年3月14日
R8 | R9

「週報」モデルを親(parent)とし、「行動計画」モデルを子(child) とした例を用いて説明します。

通常、行動計画モデルは、自分の親となる週報モデルのキーを(外部キーとして)保持します。しかし図1,図2からわかるように、外部キー「週報ID」を未設定としています。

実はこのサンプルアプリケーションは、行動計画(子)の「活動日」が、週報(親)の「開始日」と「終了日」の期間に含まれるデータが一覧表示されるようになっています。図1のログオンアカウントは "佐藤" で、図2のログオンアカウントは "山田" ですが、週報IDが未設定であるため、それぞれの週報の子モデルとして(同じ行動計画データが)表示されていることがわかります。

図1 ログオンアカウント"佐藤"の週報
図2 ログオンアカウント"山田"の週報

このため、行動計画の策定時は「どの週報に紐づくか」を未設定としたままデータの新規登録が可能です。運用しながら、紐づく親を指定しますが、変更も行うことができます。それでいて、週報(親)の子モデルとして、期間による絞り込みで行動計画(子)を表示することができます。

週報(親)を確定させる

図3は、行動計画データの一つについて、週報ID(親の主キー)を設定した例です。週報IDが"1001"の週報(これは"山田"の週報です)に行動計画(子)が表示されています。

図3 週報IDが決まった場合

"佐藤"の週報では、このデータは表示されないようになります。

図4 "佐藤"の週報

システム管理者はすべてのデータが閲覧できる

なお、システム管理者はすべてのデータが閲覧できることに注意してください。

図5 システム管理者の場合

定義方法

週報モデルと行動計画モデル

このアプリケーションでは、週報モデルを parent、行動計画モデルを child としています。

図6 週報モデルと行動計画モデル

行動計画モデルでは、週報IDは外部キーとなっていることがわかります。

図7 外部キーの設定

スクリプトの設定(親)

週報(親)の詳細表示処理時、週報の「開始日」を p.request オブジェクトにセットしています。

図8 詳細表示のへルパスクリプト(親)
if (parent !== null) {
    var s = parent.begindate;
    p.request.setAttribute("begindate", s);
}

暗黙条件の設定(子)

行動計画モデルでは、actiondate 項目を検索条件に設定します。このとき「範囲検索」は無効とします。

設定された値 "begindate" を使って絞り込み条件を設定しています。

(java.sql.Date)ATTRIBUTE("begindate")
図9 暗黙条件の設定(子)

仕様・制約

ATTRIBUTE関数について

今回の例では、一回の処理の間に、親のヘルパクラスの beforeShow メソッドが呼ばれ、そのあとに子の一覧表示が行われるという「順序」も重要です。この順序に従って、親の処理で p.request に「開始日」の情報をセットし、子の一覧表示(のときに用いられる暗黙条件のルール)で、その「開始日」を使っています。このとき、ATTRIBUTE 関数を使って値を取得することができます。

暗黙条件に ATTRIBUTE 関数を記述できます。

制約

  • この設定を行う場合、子モデルの一覧表示にグリッド形式を利用することはできません。