サポート > リポジトリ > 画面機能 > 画面遷移 (8) 登録・更新画面に独自ボタンを用意するスクリプト

登録・更新画面に用意した独自ボタンを用意する例を説明します。

新規登録および更新画面にボタンを追加する場合、この画面遷移は必ず同じモデルに戻ることが仕様となってます。つまり登録画面から詳細画面へ遷移したり、更新画面から検索画面へ遷移させることはできません。

しかしスクリプトを使ってこの制約を回避することができます。この方法を説明します。

スクリプト

model1 モデルの登録画面に、独自ボタンを配置します。ボタンのアクション名を空白にします。またイベント名は適当に設定します。ここでは "Original1" とします。

その後、スクリプトを作成します。 オリジナルボタン押下のスクリプトは Designer では作成できないため、手動で用意します。今回は wagbyapp/webapps/wagby/WEB-INF/script/model1 フォルダに InsertModel1_Original1.js を作成します。 内容はリダイレクト処理で別モデル model2 の検索画面へ遷移させるものです。

function process() {
  return "redirect:/showListModel2.do?action_Reset=";
}

実行例

新規登録画面に「商談履歴10件追加」というボタンを配置した例です。

図1 「商談履歴10件追加」ボタンを用意する

このボタンを押すと「商談履歴」(繰り返しコンテナ)が10件追加されます。

図2 ボタン押下の例

定義方法

「画面 > その他 > Javaソースコードの設定」欄で、ボタンを用意します。

ボタン名は任意です。イベント名は "Add10Reports" としました。

図3 オリジナルボタンを用意する

スクリプト

オリジナルボタン押下のスクリプトは Designer では作成できないため、手動で用意します。今回は wagbyapp/webapps/wagby/WEB-INF/script/customer フォルダに InsertCustomer_Add10Report.js を作成します。

スクリプトは次の通りです。

function process() {
  var PHelperClass = Java.type("jp.jasminesoft.jfc.IPresentationHelper");
  var helper = p.appctx.getBean("CustomerHelper");
  var phelper = p.appctx.getBean("CustomerPHelper");

  var customer = p.request.getAttribute("customer");
  for (var i = 0; i < 10; i++) {
    /* 商談履歴の最後尾に1レコード追加 */
    helper.addReport(customer, -1, true, p, errorManager);    
  }
  var customer_p = phelper.s2p(customer, p, PHelperClass.UPDATE);
  p.request.setAttribute("customer_p", customer_p);
}
  • p.request から対象のストアモデルを取り出します。p.request.getAttribute メソッドに渡すキー名はモデルIDになります。
  • 繰り返しコンテナの追加は、同モデルのヘルパクラスに用意されるメソッド add<繰り返しコンテナ名> を使うことができます。第一引数は対象となるストアモデルです。これはスクリプト内で暗黙オブジェクトとして利用できます。第二引数は挿入位置をさします。第三引数が true の場合は"追加"を意味します。第二引数が -1 で、第三引数が true の場合は末尾に追加します。
  • 修正後のストアモデルを、プレゼンテーションモデルに変換します。このためにプレゼンテーションモデルを操作するためのヘルパクラス CustomerPHelper の s2p メソッドを用います。第一引数にストアモデルを、第二引数に p を指定します。第三引数は、jp.jasminesoft.jfc.IPresentationHelper で定義された定数 UPDATE を指定します。これは編集画面用のプレゼンテーションモデルになります。
  • 変換後のプレゼンテーションモデルを p.request に格納することで画面に表示されるようになります。p.request.setAttribute メソッドに渡すキー名は "モデルID_p" としてください。