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

最終更新日: 2023年1月30日
R8 | R9

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

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

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

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

週報ID(親)を未設定で登録する

前述の通り、行動計画は「どの週報に紐づくか」を未設定とした状態での新規登録が可能です。
下図のように「行動計画」の新規登録画面から直接登録します。

これにより、運用しながら紐づく親を指定・変更することができます。それでいて、週報(親)の子モデルとして、期間による絞り込みで行動計画(子)を表示することができます。

行動計画をID未設定のまま登録する

週報(親)を確定させる

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

週報IDが決まった場合

"佐藤"の週報では、このデータは表示されません。

"佐藤"の週報

定義方法

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

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

行動計画モデル

行動計画モデルの定義は次の通りです。

行動計画モデルの定義

週報ID項目を外部キーに設定します。

外部キーの設定

また、子モデルの同時更新を有効にします。 手順はこちらをお読みください。

暗黙条件の設定

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

範囲検索を無効とする

設定された値 "begindate" を使って絞り込み条件を設定します。
条件式を「以上」とすることで、開始日以降の日付で絞り込みを行います。

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

週報モデル

週報モデルの定義は次の通りです。

週報モデルの定義

スクリプトの設定

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

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

このルールを無効にする9.2.0

画面>検索・一覧表示>外部キー連携>親モデルの詳細表示画面に表示するデータ一覧>暗黙条件を含む項目があれば、外部キー未設定の値も表示する、を無効にすると、この動作を行わないようになります。(標準では有効になっています。)

この設定を無効にしたとき、上の例では、週報IDが未設定のデータ(子モデル)は、どの親モデルにも表示されなくなります。週報IDが設定されているデータ(子モデル)のみが親モデルの詳細画面に表示されます。

暗黙条件を含む項目があれば、外部キー未設定の値も表示する

仕様・制約

ATTRIBUTE関数について

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

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

制約

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