サンプルコード
最終更新日: 2021年12月8日
R8 | R9
モデル model1 に、繰り返しコンテナ cont があります。
model1 には「予定日 (yoteibi)」「タイトル (title)」項目があります。
また、model1 の繰り返しコンテナ cont には「次回予定日 (jikaiyoteibi)」と「タイトル (ctitle)」があります。
繰り返しコンテナ項目内の「次回予定日」に日付が入っていた場合に、予定日およびタイトルに繰り返しコンテナ内の値を設定した *新規オブジェクト* を登録します。
(つまり、model1 データを1件登録したときに、繰り返しコンテナが1件あれば、同時にもう1件のデータも登録されるというものです。)
model1 の新規登録処理が成功したあと、とします。具体的には「コントローラ > 登録(画面) > 登録の実行(タイミング)」に記述します。
アドオンギャラリーで用意した「日報」モデル JSHDAILYREPORT に、繰り返しコンテナ DRCOMMENT があります。[詳細...]
この DRCOMMENT の CMEMO 項目が空の場合、当該行を削除します。
ヘルパの登録ならびに更新処理にスクリプトを設定します。
Wagbyの参照連動は、連動元の項目が計算式のとき、計算を行った結果の値を使って参照連動を行います。しかし開発者が直接、計算タイミングのスクリプトで値を算出した場合は、参照連動処理とは連動しません。この場合、開発者は手動で参照連動処理の呼び出しを行うようにしてください。
例を示します。スクリプトの「ヘルパ > 計算」のタイミングで model1 モデルの item1 項目に値をセットしたとします。この item1 が参照連動の連動元項目の場合、次のコードで参照連動処理を呼び出すことができます。
ExcelFunction.EXEC を使って外部コマンドを実行することができます。
繰り返しコンテナ項目の日付を使って、新規データを生成する
要件
項目名
項目ID
型
予定日
yoteibi
日付
タイトル
title
文字列
議事録
cont
繰り返しコンテナ
No
cont/cid
繰り返しコンテナID
次回予定日
cont/jikaiyoteibi
日付
次回タイトル
cont/ctitle
文字列
スクリプトの記述箇所
var Model1Class = Java.type("jp.jasminesoft.wagby.model.model1.Model1");
var service = p.appctx.getBean("Model1EntityService");
var helper = p.appctx.getBean("Model1Helper");
var cont = model1.cont;
if (cont != null) {
for (var i=0; i<cont.length; i++) {
if (cont[i].jikaiyoteibi != null) {
var n_model1 = new Model1Class();/*オブジェクト作成*/
helper.initialize(n_model1, p);/*オブジェクト初期化*/
n_model1.yoteibi = cont[i].jikaiyoteibi;
n_model1.title = cont[i].ctitle;
/*print(n_model1);*/
service.insert(n_model1);
}
}
}
繰り返しコンテナで、ある値が空のコンテナ行を削除する
要件
var DRCOMMENT = JSHDAILYREPORT.DRCOMMENT;
if (DRCOMMENT !== null) {
var removeList = new java.util.ArrayList();
for (var i=0; i<DRCOMMENT.length; i++) {
if (ExcelFunction.ISBLANK(DRCOMMENT[i].CMEMO)) {
removeList.add(i);//CMEMOが空の行の位置を記録する。
}
}
if (removeList.size() > 0) {
for (var i=removeList.size(); i>0; --i) {
var idx = removeList.get(i-1);
JSHDAILYREPORT.removeDRCOMMENT(idx);// うしろから削除していく。
}
DRCOMMENT = JSHDAILYREPORT.DRCOMMENT;
for (var i=0;i<DRCOMMENT.length; i++) {
// 繰り返しコンテナID (CID) および内部インデックス (DRCOMMENTjshid) を
// 改めて採番する。これらは飛び番号が認められていないため。
DRCOMMENT[i].CID = i;
DRCOMMENT[i].DRCOMMENTjshid = i;
}
}
}
参照連動処理を呼び出す
//(item1に値をセットする)
p.appctx.getBean("Model1Helper").resolvRelatedItem(model1, p);
外部コマンドを実行する
var ret = ExcelFunction.EXEC("../..", "cmd", "/C", "dir");
print(ret);