関連レコード集計後削除したい

いつもお世話になっております。

関連レコードの項目を条件付きで集計で登録後のレコード削除について

とまったく同じ問題で悩んでおります。

知識がなくて大変恐縮ではございますが、解決方法などご回答いただけると幸いです。どうぞよろしくお願い致します。

//レコードのsubmit時に適用する
var events = [
'app.record.index.edit.submit.success',
'app.record.create.submit.success',
'app.record.edit.submit.success',
'app.record.detail.delete.submit',
'app.record.index.delete.submit'];

対象のイベントに、

‘app.record.detail.delete.submit’

‘app.record.index.delete.submit’

を追加するとどうなりますでしょうか。

PV 様

お世話になっております。アドバイスいただきありがとうございます。

【売上アプリ】が以下のようになっております。教えていただいたようにコード追加してみたところ、

一回目: 入金総額 はレコード削除したところでなんの反応もなかった。(削除したレコード:入金額500)

二回目: 入金総額 は一回目の500円が引かれたようになりました。(削除したレコード:入金額1000)

⇒このように、一回目は無視されるみたいです。

入金アプリコード:

(function () {
"use strict";
//レコードのsubmit時に適用する
var events = ['app.record.index.edit.submit.success', 'app.record.create.submit.success',
'app.record.edit.submit.success','app.record.detail.delete.submit','app.record.index.delete.submit']
kintone.events.on(events, function (event) {
var record = event.record;
return kintone.api(kintone.api.url('/k/v1/records', true), "GET", {
app: kintone.app.getId(),
query: '顧客名 ="' + record.顧客名.value + '" and 引落し not in ("未") '
}).then(function (res) {
var amount = 0;
var records = res.records;
for (var i = 0; i < records.length; i++) {
amount = amount + parseFloat(records[i].入金額.value);
}
return kintone.api('/k/v1/record', 'PUT', {

"app": kintone.app.getLookupTargetAppId('顧客名'),
"updateKey": {
"field": "顧客名",
"value": record.顧客名.value
},
"record": {
"入金総額": {
"value": amount
}
}
});
}).then(function () {
return event;
});
});
})();
(function () {
"use strict";
//レコードのsubmit時に適用する
var events = ['app.record.index.edit.submit.success', 'app.record.create.submit.success',
'app.record.edit.submit.success', 'app.record.detail.delete.submit', 'app.record.index.delete.submit']
kintone.events.on(events, function (event) {
var record = event.record;
var isDeleteEvent = event.type === 'app.record.detail.delete.submit' || event.type === 'app.record.index.delete.submit';

return kintone.api(kintone.api.url('/k/v1/records', true), "GET", {
app: kintone.app.getId(),
query: '顧客名 ="' + record.顧客名.value
+ '" and 引落し not in ("未") '
+ (isDeleteEvent ? ' and レコード番号 != "' + event.record.レコード番号.value + '"' : '')
}).then(function (res) {
var amount = 0;
var records = res.records;
for (var i = 0; i < records.length; i++) {
amount = amount + parseFloat(records[i].入金額.value);
}

return kintone.api('/k/v1/record', 'PUT', {
"app": kintone.app.getLookupTargetAppId('顧客名'),
"updateKey": {
"field": "顧客名",
"value": record.顧客名.value
},
"record": {
"入金総額": {
"value": amount
}
}
});
}).then(function () {
return event;
});
});
})();

‘app.record.detail.delete.submit’,'app.record.index.delete.submit’は削除前のイベントのため、

GET時には削除対象のデータも含まれております。

削除するデータを除外するか、もしくは削除するデータの分の入金額を引いて更新する必要があるかと思われます。

(‘app.record.detail.delete.submit.success’,'app.record.index.delete.submit.success’のように完了イベントが有るとよいのですが)

PV 様

大変お世話になっております。お忙しいところ本当にありがとうございます!!!

なんと頂いたコードで理想な動きができました!驚きと感動の気持ちでいっぱいです・・・

大変恐縮ではございますが、以下のコードが読み取れなくて、どんな動きでこの結果になったのか、不思議でたまりません。。。お時間あるときにご説明頂けたら幸いです。

(isDeleteEvent ? ’ and レコード番号 != “’ + event.record.レコード番号.value + '”’ : ‘’)

動いたみたいでよかったです。

 

少し内容を説明すると、構文としては3項演算子です。

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Conditional_Operator

削除イベントで当処理内に来た時のみ、

「レコード番号 != event.record.レコード番号.value」(削除対象のレコード以外を取得するという条件を追加する。)

という意味になります。

 

他のapp.record.index.edit.submit.success等の.successで終わるイベントは、

更新”後”処理なので、該当データの保存ボタンでの更新処理が終わった後に当処理に来ますが、

削除は削除"前"処理しかイベントがないので、

該当の削除処理がまだ行われていない(当処理の後に行われる)ことを考慮する必要があります。

PV 様

今回は大変お世話になっております。

完璧なコードとわかりやすいご説明で本当にとても助かりましたし、すごく勉強になりました。

誠にありがとうございました。感動と感謝の気持ちでいっぱいです。

今後とももし機会ありましたら、ぜひご指導のほど、よろしくお願い致します。