テーブルのデータを商品ごとに集計しテーブルに出力したい

テーブルのデータを商品ごとに集計しテーブル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;
    });
})();

console.log(テーブル2)

console.log(table2Records)

ということでしょうかね

pomo様
そうです!少し手を加えたときに修正ミスしてしまいました。
何故かtable2Recordsが空データなのです。

最後のテーブル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;
      });
  })();

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});
    }

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
    } 

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

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。