サポート > リポジトリ > 画面機能 > 一覧表示からの選択(独自ボタン利用)スクリプト

一覧表示画面で複数行を選択し、独自の一括処理をスクリプトで記述します。8.1.2

一覧表示画面で選択したデータの主キーを、スクリプトで受け取ることができます。開発者はこれらの(複数の)データに対して何らかの処理を行ってください。

この機能は一括更新に似ていますが、次の点が異なります。

  • 一括更新スクリプトはデータ1件ごとに呼び出されます。スクリプトではデータ(正確にはストアモデル)の値を変更する処理のみを記述します。対して本機能は独自ボタン押下時に一回だけ呼び出されます。更新はもとより、それ以外のさまざまな業務処理を行うことができます。(例えば、選択された主キーをパラメータにして非同期処理を呼び出す、など。)
  • 一括更新スクリプトは、更新処理自体は Wagby が行います。対して本機能で更新処理を行う場合、開発者がすべてを作成する必要があります。

ボタンを用意する

画面 > その他 タブのJavaソースコードの設定欄の画面名の選択肢から "一覧表示画面(一括)" を指定します。

図1 独自ボタン

ボタン名は任意です。イベント名は、後述するスクリプトのファイル名に含まれます。Wagbyが標準で提供するスクリプトファイル名と重複しないようにしてください。上の例にあるように、接頭語 "Original" を付与するといった工夫を行うとよいでしょう。

アクション名は空白とします。自画面に戻すためです。

追加パラメータも通常は指定する必要はありません。

一括指定のためのチェックボックスを有効にする

Wagbyが標準で提供する、何らかの一括処理を有効にします。ここでは「一括削除」を有効にしておきます。

図2 いずれかの一括処理を有効にする
一つ以上の一括処理を有効にしてください。これによって一覧表示画面の各行の左端に、データを選択するためのチェックボックスが用意されます。

ビルドしたアプリケーションの画面を確認します。独自ボタン(ここでは「オリジナル一括処理」という名前のボタン)が用意されています。データを選択していない状態では、ボタンを押下することはできません。

図3 「オリジナル一括処理」ボタン

データを選択すると、ボタンを押下できるようになります。

図4 ボタン押下が可能になった

スクリプト

「オリジナル一括処理」ボタンのスクリプトを用意することができます。

このスクリプトファイルは Wagby Designer では作成できません。開発者は直接、WEB-INF/script/<モデルID> フォルダ内にスクリプトファイルを用意してください。

例えばモデルIDが customer で、開発者が用意したボタンのイベントが OriginalUpdateAll のとき、スクリプトファイル ShowListCustomer_OriginalUpdateAll.js が呼び出されます。

スクリプトでは、選択されたデータの主キーの集合を取得することができます。

function process() {
  var DbShowListSelectableBaseController =
    Java.type("jp.jasminesoft.jfc.controller.DbShowListSelectableBaseController");
  var ids = p.request.getAttribute(DbShowListSelectableBaseController.SelectIdSetRequestName);
  print(ids);
}

上の変数 ids の実体は java.util.Set です。1つ以上の値(主キー)を文字列型で保持しています。

開発者は得られた主キーを用いて、EntityService から値を取得したり、更新するといった業務ロジックを記述することができます。 例を示します。

function process() {
  var ExcelFunction = Java.type("jp.jasminesoft.util.ExcelFunction");
  var entityService = p.appctx.getBean("CustomerEntityService");

  var DbShowListSelectableBaseController =
    Java.type("jp.jasminesoft.jfc.controller.DbShowListSelectableBaseController");
  var ids = p.request.getAttribute(DbShowListSelectableBaseController.SelectIdSetRequestName);
  var it = ids.iterator(); /* ids は java.util.Set なので java.util.Iterator を利用できる */
  while (it.hasNext()) {
    var id = it.next(); /* it.nextの戻り値は常に文字列型 */
    try {
      var obj = entityService.findById(ExcelFunction.TOINT(id));/* 主キーが整数型の場合の例 */
      print(obj);
    } catch (e) {
      print("error:"+e);
    }
  }
}
  • ボタンの配置を変更することはできません。Wagbyが提供する標準の一括処理ボタンの右隣から順に配置されます。