独自ボタンを用意する

最終更新日: 2021年12月16日
R8 | R9

仕様・制約

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

このため、別画面へ遷移させる独自ボタン(ボタンのアクション名を指定するという意味です)を、新規登録および更新画面に配置することはできません。

ボタンのアクション名を指定した独自ボタンがあると、生成されるHTMLフォームの中にフォーム要素が含まれる構造となります。しかしフォーム要素の入れ子は認められません。

例 登録画面から別モデルの検索画面へ遷移する

スクリプトを使って異なる画面遷移を実現する方法を説明します。

スクリプト

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

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

function process() {
  return "redirect:showListModel2.do?action_Reset=";
}
イベント名にResetを指定した場合、検索条件や開始件数がクリアされます。遷移した一覧表示画面では1ページ目から表示されます。8.3.4

例 ボタン押下時に繰り返しコンテナを追加する

実行例

新規登録画面に「商談履歴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" としてください。

リアルタイム入力チェックを無効にする8.3.1

登録・更新画面では、入力チェックエラー発生時はボタンを押下することができません。これを無視して、入力チェックエラー発生時でもオリジナルボタンを押下できるようにする方法を説明します。

各画面のカスタマイズ JavaScript ファイル(insert<モデルID>.jsなど)、またはモデルの My.js ファイルに以下の関数を定義します。

function isSubmitIfError(actionName) {
 if (actionName === "action_Original1" || actionName === "action_Cancel") {
   return true;
 }
 return false;
}
  • 引数の actionName には、ボタン押下時に実行される doSubmitForm 関数の第二引数のアクション文字列が引き渡されます。アクション文字列は接頭語 "action_" ではじまります。
  • 標準ではキャンセルボタンクリック時は入力チェックは無効です。しかし上の関数を定義する場合は、どのボタンクリックで入力チェックを無効にするかを明示する必要があるため、上のコードのように判定処理に action_Cancel を含めてください。
  • 同様に、入力チェックを無視したいボタン操作を必要に応じて明記してください。
※ この JavaScript はブラウザで実行されます。サーバで動作する「スクリプト」とは区別されます。