外部キーと複合キー (4) 親子孫の関係で紐づく親を変更できるようにする
最終更新日: 2022年7月4日
前ページで説明したサンプルでは、孫モデルCの新規登録画面で、紐づく子モデルBを指定することはできませんでした。そこでスクリプトを使って子モデルBを指定できるように改良します。
モデル参照項目 MODELA_NAME を登録画面で入力可能とします。
同様にモデル参照項目 MODELB_NAME も登録画面で入力可能とします。
さらに絞り込み設定を行い、MODELA_NAME の値によって MODELB_NAME の選択肢を絞り込むものとします。
絞り込み元である MODELA_NAME の値が変更されたとき、無効となった選択肢は選択状態を維持しないようにします。
登録画面で入力できるようになった項目 MODELA_NAME と MODELB_NAME は主キーの値を保持するため、必須指定を行います。
登録のタイミングで、入力項目であるモデルAの選択肢、およびモデルBの選択肢から主キーをセットします。
モデルAの選択肢を変更すると、絞り込み処理が行われます。このとき、画面動作を規定する
このタイミングでストアモデルMODELCの入力項目を主キー項目にセットします。これによって(登録画面で)入力値を変更すると同時に参照連動の値も書き変わるようになります。
孫モデルCの登録画面では「モデルAの名前 (MODELA_NAME)」「モデルBの名前 (MODELB_NAME)」は初期セットされています。さらに、この値を変更し、紐づく子モデルBを選択し直すこともできます。
「モデルBの名前 (MODELB_NAME)」は絞り込み設定によって、絞り込み元項目「モデルAの名前 (MODELA_NAME)」に関連するものだけを選択できるようになっています。
ここで絞り込み元である「モデルAの名前 (MODELA_NAME)」を変更すると、無効になった選択肢が解除されます。
選択し直したタイミングで「プレゼンテーションモデルからストアモデルへの変換スクリプト」が呼び出されます。参照連動を再度、行います。
登録後の詳細画面では、主キー(外部キー)項目が入力された値から適切に設定されています。これは「登録スクリプト」によるものです。
設定方法
読み取り専用設定の解除
絞り込みの設定
必須指定
登録スクリプト
// モデルAの選択肢から主キーをセットする
MODELC.MODELAPKEYMODELB = MODELC.MODELANAME;
// モデルBの選択肢から主キーをセットする
MODELC.MODELAPKEYNMODELB = MODELC.MODELBNAMEMODELAPKEY;
MODELC.MODELBPKEY = MODELC.MODELBNAMEMODELBPKEY;
プレゼンテーションモデルからストアモデルへの変換スクリプト
p.action
はAjax処理を行うためGetXml
という値が格納されています。Ajax処理の詳細は「画面機能 > Ajaxによる画面描画」をお読みください。
if (p.action == "GetXml") {
if (MODELC.MODELANAME > 0) {
// モデルAの選択肢から主キーをセットする
MODELC.MODELAPKEYMODELB = MODELC.MODELANAME;
}
if (MODELC.MODELBNAMEMODELAPKEY > 0) {
// モデルBの選択肢から主キーをセットする
MODELC.MODELAPKEYNMODELB = MODELC.MODELBNAMEMODELAPKEY;
MODELC.MODELBPKEY = MODELC.MODELBNAMEMODELBPKEY;
}
helper = p.appctx.getBean("MODELCHelper");
helper.resolvRelatedItem(MODELC, p);
}
動作例