いつもお世話になっております。
関連レコードの項目を条件付きで集計で登録後のレコード削除について
とまったく同じ問題で悩んでおります。
知識がなくて大変恐縮ではございますが、解決方法などご回答いただけると幸いです。どうぞよろしくお願い致します。
いつもお世話になっております。
とまったく同じ問題で悩んでおります。
知識がなくて大変恐縮ではございますが、解決方法などご回答いただけると幸いです。どうぞよろしくお願い致します。
//レコードの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 様
今回は大変お世話になっております。
完璧なコードとわかりやすいご説明で本当にとても助かりましたし、すごく勉強になりました。
誠にありがとうございました。感動と感謝の気持ちでいっぱいです。
今後とももし機会ありましたら、ぜひご指導のほど、よろしくお願い致します。