R8.3.9への移行最終更新日: 2020年7月30日

"更新して次へ" "更新して前へ" スクリプトの挙動変更

R8.3.3-R8.3.6

R8.3.8までは1リクエストで更新前と更新後が処理されていました。

図1 これまでの流れ

更新画面に用意される "更新して次へ/前へ" ボタン押下時に呼び出されるスクリプトでは、対象モデルは次または前の画面へ遷移したあとが対象になります。

例えば主キー 1000,1001,1002 のモデル model1 があり、主キー1000の更新画面で "更新して次へ" ボタンを押下すると、スクリプト UpdateModel1_SUpdateNext.js が呼び出されます。このスクリプトで print(model1) とすると、主キー 1001 のモデルが対象となります。画面遷移後というルールです。

ここでスクリプトで画面遷移前(つまり主キー1000)の値を参照したい場合は、次のようにします。

var smodel = p.request.getAttribute("model1.update");//ストアモデル
var pmodel = p.request.getAttribute("model1_p.update");//プレゼンテーションモデル

接尾語 ".update" はこの "更新画面を開く" スクリプトでのみ利用できる特別な指定です。この接尾語を用いると、更新される前のオブジェクトを参照できます。

なお、ここで参照するオブジェクトはデータベースへの更新が終わった後の値です。このオブジェクトの値を変更することはできません。(値を変更してもデータベースには反映されません。)

R8.3.9以降

R8.3.9で、スクリプトの挙動が変わりました。

図2 変更後の流れ

"更新して次へ/前へ" ボタン押下の画面遷移は、リダイレクト方式となっています。このため、スクリプトによって参照できるストアモデルが変わります。

コントローラ>画面:"更新">実行タイミング:"更新して次へ" "更新して前へ"
更新する前のオブジェクトを参照できます。
コントローラ>画面:"更新">実行タイミング:"更新画面を開く"
更新した次のオブジェクトを参照できます。

ここで "更新画面を開く" スクリプトで画面遷移前(つまり主キー1000)の値を参照したい場合は、次のようにします。

var smodel = p.request.getAttribute("model1.update");//ストアモデル
var pmodel = p.request.getAttribute("model1_p.update");//プレゼンテーションモデル

接尾語 ".update" はこの "更新画面を開く" スクリプトでのみ利用できる特別な指定です。この接尾語を用いると、更新される前のオブジェクトを参照できます。

なお、ここで参照するオブジェクトはデータベースへの更新が終わった後の値です。このオブジェクトの値を変更することはできません。(値を変更してもデータベースには反映されません。)