背景・実現したいこと
タイトルの通りで、アプリCのGETのところで、工番は取得できましたが、金額は"undefined"です。おそらくreduceなどが使えそうなのかと思いましたが、注文番号をまとめてからの原価別に計算するまでの方法が分からず進めずにいます。
GETの部分の①for~if、②for~ifの②に"debugger;"を付けましたが、たどりついていないようです。そもそもこの方法でPUTまで辿り着けるのかも分かっていないかもしれません…。
PUT用の「 if (Number(event.record.材料費.value) === Number(amount)) { 」以下は
まだ未確認です。
プログラム初心者でもあり、拙い文章だとは思いますが、お知恵を拝借させていただけると幸いです。
利用したソースコード
(function() {
'use strict';
var getRecords = function(app, tmpRecords) {
var limit = 500;
var tmpRecords = tmpRecords || [];
return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
app: app,
query: kintone.app.getQueryCondition() +'limit ' + limit +' offset ' + tmpRecords.length
}).then(function(response){
tmpRecords = tmpRecords.concat(response.records);
return response.records.length === limit ? getRecords(app, tmpRecords) : tmpRecords;
});
}
//レコード詳細画面表示後、レコード編集画面表示後、レコード印刷画面表示後
var events = [
'app.record.detail.show',
'app.record.edit.show',
'app.record.print.show'
];
kintone.events.on(events, function(event) {
// メニュ右側の空白部分にボタンを設置
var myIndexButton = document.createElement('button');
myIndexButton.id = 'my_index_button';
myIndexButton.innerText = '原価更新';
myIndexButton.onclick = function() {
window.alert('更新しますか?');
var appId = 71; //アプリC
var query = '注文番号 >= 210001 and 注文番号 <= 210999 order by 注文番号 asc';
var outputFields = ['注文番号','原価番号','合計'];
var appUrl = kintone.api.url('/k/v1/records');
var params = {
'app': appId,
'query': query,
'fields': outputFields
};
kintone.api(appUrl, 'GET', params, function(resp) {
var subTotals = {};
for (var i = 0; i < resp.records.length; i++) {
var constNumber = resp.records[i]['注文番号'].value;
if (!subTotals[constNumber]) {
subTotals[constNumber] = 0;
}
for (var j = 0; j < resp.records[i].length; j++) {
debugger;
var category = resp.records[i][j]['原価番号'].value;
if (!subTotals[category]) {
subTotals[category] = 0;
}
subTotals[category] += parseFloat(resp.records[i][j]['合計'].value);
}
}
for (var category in subTotals) {
console.log(category + ': ' + subTotals[category][j] + '円');
}
//材料費計算結果と、数値フィールド材料費の値が同じだったら更新しない
if (Number(event.record.原価1.value) === Number(amount)) {
return event;
}
//更新用リクエストパラメータ
var body = {
app: kintone.app.getId(),
id: kintone.app.record.getId(),
record: {
原価1: {
value: amount,
},
},
};
//レコード更新(数値フィールドの更新)
kintone.api(
kintone.api.url("/k/v1/record", true),"PUT",body,(resp) => {
}
);
return event;
}, function(error) {
// error
console.log(error);
});
}
kintone.app.record.getHeaderMenuSpaceElement().appendChild(myIndexButton);
});
})();