seaflour
(seaflour)
1
テーブルのデータを商品ごとに集計しテーブル2に出力したいのですが
いくつか試してみましたがconsole.log(テーブル2)で確認したところテーブル2は空でした。お力添えをお願いいたします。
(() => {
'use strict';
kintone.events.on(
[
'app.record.create.show',
'app.record.detail.show',
'app.record.edit.show',
'app.record.print.show',
], function (event) {
const subTotals = {};
const tableRecords = event.record.テーブル.value;
// テーブル内の各レコードを商品名ごとに集計する
for (let i = 0; i < tableRecords.length; i++) {
const productName = tableRecords[i].value['商品名'].value;
if (!subTotals[productName]) {
subTotals[productName] = 0;
}
subTotals[productName] += parseFloat(tableRecords[i].value['数量'].value);
}
// 集計結果を新しいテーブルレコードにセットする
const table2Records = [];
for (const productName in subTotals) {
if (Object.prototype.hasOwnProperty.call(subTotals, productName)) {
const record = {
value: {
'品名': {
value: productName,
type: 'SINGLE_LINE_TEXT',
},
'合計数量': {
value: subTotals[productName],
type: 'NUMBER',
},
},
};
table2Records.push(record);
}
}
console.log(テーブル2)
// 新しいテーブルレコードを更新する
record.テーブル2.value.push(table2Records);
return event;
});
})();
pomo
2
console.log(テーブル2)
を
console.log(table2Records)
ということでしょうかね
seaflour
(seaflour)
3
pomo様
そうです!少し手を加えたときに修正ミスしてしまいました。
何故かtable2Recordsが空データなのです。
pomo
4
最後のテーブル2への展開だけ変更しました。
追加と編集でしかデータ変更はできないのでeventsのdetailとprintは外しました。こちらでいかがでしょうかね
(() => {
'use strict';
kintone.events.on(
[
'app.record.create.show',
'app.record.edit.show',
], function (event) {
const subTotals = {};
const tableRecords = event.record.テーブル.value;
// テーブル内の各レコードを商品名ごとに集計する
for (let i = 0; i < tableRecords.length; i++) {
const productName = tableRecords[i].value['商品名'].value;
if (!subTotals[productName]) {
subTotals[productName] = 0;
}
subTotals[productName] += parseFloat(tableRecords[i].value['数量'].value);
}
// 集計結果を新しいテーブルレコードにセットする
const table2Records = [];
for (const productName in subTotals) {
if (Object.prototype.hasOwnProperty.call(subTotals, productName)) {
const record = {
value: {
'品名': {
value: productName,
type: 'SINGLE_LINE_TEXT',
},
'合計数量': {
value: subTotals[productName],
type: 'NUMBER',
},
},
};
table2Records.push(record);
}
}
console.log(table2Records)
// 新しいテーブルレコードを更新する
event.record.テーブル2.value = [...event.record.テーブル2.value, ...table2Records]
return event;
});
})();
seaflour
(seaflour)
5
pomo様
ご提示ありがとうございます!
テーブルにデータを表示する事は出来ましたが
保存する度にテーブル行数が増えてしまうのでテーブル2にデータを追加する前に
初期化するコードを入れてみたのですがうまく動きませんでした。
どうすればよいでしょうか?
(() => {
'use strict';
kintone.events.on(
[
'app.record.create.show',
'app.record.edit.show',
], function (event) {
const subTotals = {};
const tableRecords = event.record.テーブル.value;
// テーブル内の各レコードを商品名ごとに集計する
for (let i = 0; i < tableRecords.length; i++) {
const productName = tableRecords[i].value['商品名'].value;
if (!subTotals[productName]) {
subTotals[productName] = 0;
}
subTotals[productName] += parseFloat(tableRecords[i].value['数量'].value);
}
// 集計結果を新しいテーブルレコードにセットする
const table2Records = [];
for (const productName in subTotals) {
if (Object.prototype.hasOwnProperty.call(subTotals, productName)) {
const record = {
value: {
'品名': {
value: productName,
type: 'SINGLE_LINE_TEXT',
},
'合計数量': {
value: subTotals[productName],
type: 'NUMBER',
},
},
};
table2Records.push(record);
}
}
console.log(table2Records)
// コピー先テーブルを初期化
initRow("テーブル2");
// 新しいテーブルレコードを更新する
event.record.テーブル2.value = [...event.record.テーブル2.value, ...table2Records]
return event;
});
})();
// テーブル初期化関数
function initRow(table_name) {
let record = kintone.app.record.get().record;
for(let i = record[table_name].value.length; i >= 0; i--){
record[table_name].value.splice(i, 1);
}
kintone.app.record.set({record: record});
}
pomo
6
initRow実行時にコンソールのエラーにkintone.app.record.get()できないよと出てると思うので、initRowにイベントのrecordを渡して、処理終わったら返してあげてください。
(() => {
'use strict';
kintone.events.on(
[
'app.record.create.show',
'app.record.edit.show',
], function (event) {
const subTotals = {};
const tableRecords = event.record.テーブル.value;
// テーブル内の各レコードを商品名ごとに集計する
for (let i = 0; i < tableRecords.length; i++) {
const productName = tableRecords[i].value['商品名'].value;
if (!subTotals[productName]) {
subTotals[productName] = 0;
}
subTotals[productName] += parseFloat(tableRecords[i].value['数量'].value);
}
// 集計結果を新しいテーブルレコードにセットする
const table2Records = [];
for (const productName in subTotals) {
if (Object.prototype.hasOwnProperty.call(subTotals, productName)) {
const record = {
value: {
'品名': {
value: productName,
type: 'SINGLE_LINE_TEXT',
},
'合計数量': {
value: subTotals[productName],
type: 'NUMBER',
},
},
};
table2Records.push(record);
}
}
console.log(table2Records)
// コピー先テーブルを初期化
event.record = initRow("テーブル2", event.record);
// 新しいテーブルレコードを更新する
event.record.テーブル2.value = [...event.record.テーブル2.value, ...table2Records]
return event;
});
})();
// テーブル初期化関数-イベントのレコードを渡す
function initRow(table_name,record) {
for(let i = record[table_name].value.length; i >= 0; i--){
record[table_name].value.splice(i, 1);
}
return record
}
seaflour
(seaflour)
7
pomo様
ご丁寧に教えていただきありがとうございます!
前回のイベントだと追加したデータの数量が集計されなかった為
保存時に行う様修正いたしました。
おかげさまで無事集計する事が出来ました!
本当にありがとうございました。
(() => {
'use strict';
kintone.events.on(
[
'app.record.create.submit',//レコード追加画面で保存する時
'app.record.edit.submit'//レコード詳細画面で保存するとき
], function (event) {
const subTotals = {};
const tableRecords = event.record.テーブル.value;
// テーブル内の各レコードを商品名ごとに集計する
for (let i = 0; i < tableRecords.length; i++) {
const productName = tableRecords[i].value['商品名'].value;
if (!subTotals[productName]) {
subTotals[productName] = 0;
}
subTotals[productName] += parseFloat(tableRecords[i].value['数量'].value);
}
// 集計結果を新しいテーブルレコードにセットする
const table2Records = [];
for (const productName in subTotals) {
if (Object.prototype.hasOwnProperty.call(subTotals, productName)) {
const record = {
value: {
'品名': {
value: productName,
type: 'SINGLE_LINE_TEXT',
},
'合計数量': {
value: subTotals[productName],
type: 'NUMBER',
},
},
};
table2Records.push(record);
}
}
console.log(table2Records)
// コピー先テーブルを初期化
event.record = initRow("テーブル2", event.record);
// 新しいテーブルレコードを更新する
event.record.テーブル2.value = [...event.record.テーブル2.value, ...table2Records]
return event;
});
})();
// テーブル初期化関数-イベントのレコードを渡す
function initRow(table_name,record) {
for(let i = record[table_name].value.length; i >= 0; i--){
record[table_name].value.splice(i, 1);
}
return record
}
「いいね!」 1
system
(system)
クローズされました:
8
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。