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