一覧表示画面での一括処理
最終更新日: 2021年12月15日
R8 | R9
一覧表示画面で選択したデータの主キーを、スクリプトで受け取ることができます。開発者はこれらの(複数の)データに対して何らかの処理を行ってください。
画面 > その他 タブのJavaソースコードの設定欄の画面名の選択肢から "一覧表示画面(一括)" を指定します。
Wagbyが標準で提供する、何らかの一括処理を有効にします。ここでは「一括削除」を有効にしておきます。
ビルドしたアプリケーションの画面を確認します。独自ボタン(ここでは「オリジナル一括処理」という名前のボタン)が用意されています。データを選択していない状態では、ボタンを押下することはできません。
データを選択すると、ボタンを押下できるようになります。
「オリジナル一括処理」ボタンのスクリプトを用意することができます。
このスクリプトファイルは Wagby Designer では作成できません。開発者は直接、WEB-INF/script/<モデルID> フォルダ内にスクリプトファイルを用意してください。
例えばモデルIDが customer で、開発者が用意したボタンのイベントが OriginalUpdateAll のとき、スクリプトファイル ShowListCustomer_OriginalUpdateAll.js が呼び出されます。
スクリプトでは、選択されたデータの主キーの集合を取得することができます。
上の変数 ids の実体は java.util.Set です。1つ以上の値(主キー)を文字列型で保持しています。
開発者は得られた主キーを用いて、EntityService から値を取得したり、更新するといった業務ロジックを記述することができます。
例を示します。
選択方式を "全データを一括処理の対象とする" とした場合、扱いが変わります。
この場合は"全てを選択・解除チェックボックス" の状態によって選択肢の意味が変わります。この状態を selectMode として内部で管理しています。
チェックボックスが ON のとき、selectMode は "__UNSELECT" になります。これは初期状態ですべてのデータが選択された状態です。スクリプトでは、選択を解除した主キーを取得することができます。
チェックボックスが OFF のとき、selectMode は "__SELECT" になります。これは初期状態ですべてのデータが未選択の状態です。スクリプトでは、選択した主キーを取得することができます。
これを踏まえ、選択された主キーの集合を取得するスクリプトのサンプルを示します。対象モデルを model1 とし、主キー項目名を pkey (型は整数)としています。
上のスクリプトは finderContext にセットした検索条件は空でしたので、全件取得となっていました。これを画面に用意された検索条件の値を使う場合は、次のようにします。
概要
設定方法(画面に表示されているデータを一括処理の対象とする)
ボタンを用意する
一括指定のためのチェックボックスを有効にする
動作例
スクリプト
function process() {
var DbShowListSelectableBaseController =
Java.type("jp.jasminesoft.jfc.controller.DbShowListSelectableBaseController");
var ids = p.request.getAttribute(DbShowListSelectableBaseController.SelectIdSetRequestName);
print(ids);
}
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);
}
}
}
全データを一括処理の対象とする方式の場合
function process() {
var DbShowListSelectableAllBaseController =
Java.type("jp.jasminesoft.jfc.controller.DbShowListSelectableAllBaseController");
// "全てを選択・解除チェックボックス" の状態によって selectMode が変わる。
// チェックONのとき、selectMode は "__UNSELECT" になる。
// このときは選択されなかったものだけが ids に格納される。
// チェックOFFのとき、selectMode は "__SELECT" になる。
// このときは選択されたものが ids に格納される。
var selectMode = p.appMap.get("showListModel1_selectMode");
if (selectMode !== null && selectMode === "__SELECT") {
var ids = p.appMap.get(DbShowListSelectableAllBaseController.selectIdSetAppmapName);
ids.forEach(function(pkey){
print("select:" + pkey);
});
} else {
var ids = p.appMap.get(DbShowListSelectableAllBaseController.unselectIdSetAppmapName);
ids.forEach(function(pkey){
print("unselect:" + pkey);
});
}
}
function process() {
var DbShowListSelectableAllBaseController =
Java.type("jp.jasminesoft.jfc.controller.DbShowListSelectableAllBaseController");
// "全てを選択・解除チェックボックス" の状態によって selectMode が変わる。
// チェックONのとき、selectMode は "__UNSELECT" になる。
// このときは選択されなかったものだけが ids に格納される。
// チェックOFFのとき、selectMode は "__SELECT" になる。
// このときは選択されたものが ids に格納される。
var selectMode = p.appMap.get("showListModel1_selectMode");
if (selectMode !== null && selectMode === "__SELECT") {
var ids = p.appMap.get(DbShowListSelectableAllBaseController.selectIdSetAppmapName);
ids.forEach(function(pkey){
print("select:" + pkey);
});
} else {
var ids = p.appMap.get(DbShowListSelectableAllBaseController.unselectIdSetAppmapName);
var Model1C = Java.type("jp.jasminesoft.wagby.model.model1_c.Model1C");
var FinderContext = Java.type("jp.jasminesoft.jfc.dao.FinderContext");
var finderContext = new FinderContext();
finderContext.setPageSize(-1);//無制限
finderContext.setCondition(new Model1C());//空の検索条件セットによる全件取得
finderContext.setCriteriaConverter(p.appctx.getBean("Model1CriteriaConverter"));
var entityService = p.appctx.getBean("Model1EntityService");
var results = entityService.find(finderContext);
for (i=0; i<results.size(); i++) {
var entity = results.get(i);
var pkey = java.lang.Integer.toString(entity.pkey);//文字列型として扱うこと
if (ids != null && ids.contains(pkey)) {
print("unselect:"+pkey);
} else {
print(" select:"+pkey);
}
}
}
}
selectMode が "__UNSELECT" の場合の補足説明
全件取得ではなく、検索条件で絞り込む
function process() {
var DbShowListSelectableAllBaseController =
Java.type("jp.jasminesoft.jfc.controller.DbShowListSelectableAllBaseController");
var selectMode = p.appMap.get("showListModel1_selectMode");
if (selectMode !== null && selectMode === "__SELECT") {
var ids = p.appMap.get(DbShowListSelectableAllBaseController.selectIdSetAppmapName);
ids.forEach(function(pkey){
print("select:" + pkey);
});
} else {
var ids = p.appMap.get(DbShowListSelectableAllBaseController.unselectIdSetAppmapName);
var Model1C = Java.type("jp.jasminesoft.wagby.model.model1_c.Model1C");
var FinderContext = Java.type("jp.jasminesoft.jfc.dao.FinderContext");
var model1_c = p.appMap.get("model1_c_preserve");
var finderContext = new FinderContext();
finderContext.setPageSize(-1);
finderContext.setCondition(model1_c);
finderContext.setCriteriaConverter(p.appctx.getBean("Model1CriteriaConverter"));
var entityService = p.appctx.getBean("Model1EntityService");
var results = entityService.find(finderContext);
for (i=0; i<results.size(); i++) {
var entity = results.get(i);
var pkey = java.lang.Integer.toString(entity.pkey);
if (ids != null && ids.contains(pkey)) {
print("unselect:"+pkey);
} else {
print(" select:"+pkey);
}
}
}
}
<モデルID>_c_preserve
を指定して、直前に用いた検索条件を取得します。これをfinderContextにセットします。仕様・制約