レコード内のテーブルコピーについて

レコード内にテーブルが2つあり、一つ目のテーブルへの入力内容を2つ目のテーブルに全てコピーしたいです。

コピーはしているようなのですが、一行だけ入力したはずが、下記の画像なような状態になってしまいます。イベントの書き方が間違っているのはわかるので、いろいろと試しているのですが、うまくいきません。
できれば、コピーボタン等ではなく、入力したら、コピーとしたいです。
よろしくお願いいたします。

画像2

(() => {
    'use strict';

    kintone.events.on(['app.record.create.change.摘要', 'app.record.edit.change.摘要',
    'app.record.create.change.品名', 'app.record.edit.change.品名',
    'app.record.create.change.型番', 'app.record.edit.change.型番',
    'app.record.create.change.寸法', 'app.record.edit.change.寸法',
    'app.record.create.change.単価', 'app.record.edit.change.単価',
    'app.record.create.change.数量', 'app.record.edit.change.数量',
    'app.record.create.change.合計', 'app.record.edit.change.合計',
    'app.record.create.change.摘要', 'app.record.edit.change.摘要',
        'app.record.create.change.Aテーブル', 'app.record.edit.change.Aテーブル',], (event) => {

            //record,changesを定義
            const record = event.record;
            const changes = event.changes;

            //Bテーブルを定義
            const b_table = record.テーブル_0.value;

            //Bテーブルの配列にpush
            b_table.push(
                {
                    value:{
                        注文番号_0:{
                            value:changes.row.value.注文番号.value,
                            type:'SINGLE_LINE_TEXT'
                        },
                        品名_0:{
                            value:changes.row.value.品名.value,
                            type:'SINGLE_LINE_TEXT'
                        },
                        型番_0:{
                            value:changes.row.value.型番.value,
                            type:'SINGLE_LINE_TEXT'
                        },
                        寸法_0:{
                            value:changes.row.value.寸法.value,
                            type:'SINGLE_LINE_TEXT'
                        },
                        単価_0:{
                            value:changes.row.value.単価.value,
                            type:'NUMBER'
                        },
                        数量_0:{
                            value:changes.row.value.数量.value,
                            type:'NUMBER'
                        },
                        摘要_0:{
                            value:changes.row.value.摘要.value,
                            type:'SINGLE_LINE_TEXT'
                        },
                        合計_1:{
                            value:changes.row.value.合計.value,
                            type:'CALC'
                        },
                        
                    }
                }
            );

            console.log(changes);

            //return eventをして値更新
            return event;
        });
})();

提示いただいてるコードですと、changeイベントでテーブルBにpushしてるだけ、つまりchangeイベントが発生するたびに行数が増えるコードになってますね。
これを防ぐためには、初回の入力か、既存のアップデートかを判断する必要があります
具体的には、突合するためのキーを何らか持つ必要があるんじゃないかなとおもいます

ご回答いただきありがとうございます。
申し訳ありません、、初心者のため理解が追い付いていないので質問させてください。
突合するためのキーというのは、どのようなフィールドを設置するよいでしょうか?ご教示いただけますと嬉しいです。よろしくお願いいたします。

Aテーブルのある行にあるものと、それに対応するBテーブルの行をどのように紐付けるつもりでしたか?それがない場合、BテーブルにAテーブルの行の追加はできたとしても、紐づけがない場合、Aテーブルの対象行を書き換えてもそれに対応するBテーブルの対象行を特定できないので書き換えるのは難しいと思います

それを特定するために一意になるキーのようなものは必要じゃないかな、という意図でした(伝わりづらかったらすいません)

もしくは、行数で紐付けるならキー等は不要ですが、そうすると同じAテーブルBテーブルともに同じ行数にせざるを得ませんがそれで問題ないのかどうかはありますね


その他としては、

  • 完璧にやりとげるにはまぁまぁコストが掛かると思いますので、そもそもこの仕様が本当に必要か、なにか別のことで対応できないか、は考えてもいいかもしれません
  • Changeイベントでやらずに、保存時のイベント等でやると難易度は下がると思います。
「いいね!」 2

返信ありがとうございます。私の理解不足で申し訳ありませんでした。

AテーブルとBテーブルは全く同じ内容と行数です。
内容的にはAテーブルが納品書でBテーブルが納品書(控)になります。プリントクリエイター等の導入も検討したのですが、コスト的に見合わず、とにかく自分でできる範囲でとの指示により四苦八苦していた次第です。

状況的には一旦登録したらその内容が変更になることはないので、おっしゃるとおり、一旦保存時のイベントでやってみる方法も検討してみようかと思います。

五月雨の返信で申し訳ございましせん。
教えていただいたとおり、保存時のイベントで実行するように変更したところ何とか今のできる範囲にはなりますが、思うような動きになりました!ありがとうございます!
また、引き続きでテーブルとおしを紐づけてするやり方も勉強してできるようになりたいと思います。
ありがとうございました。

「いいね!」 1

できたようでよかったです!
Changeイベントの多用は下記の通り個人的には推奨してないので、見てみてください


また、おまけのはなしとして、カスタマイズそのものは問題を解決するためのHowのひとつですので、
本当に必要なのか、や、業務フローからみなおしたりすることがよりよい改善につながると思います。どの方法がコストの総量低くバリューを出せるかは考えたほうがいいとおもいます。(周囲を巻き込むことになると思うので大変な側面もありますが…どちらをとるか)

「いいね!」 1

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