app.record.create.showイベントで、サブテーブルに行を追加し、それぞれの行にタイトルをつけたいと思い、以下のコードを実行しておりますが、最終行に設定したい項目名が全ての行に表示されてしまいます。
*******************
kintone.events.on('app.record.create.show', function(event) {
var record = event.record;
//実施エリアテーブルの1行目を複製
var RW = record['エリア'].value[0].value;
var newRow1 = {};
var fcodes1 = Object.keys(RW);
fcodes1.forEach(function(fd) {
newRow1[fd] = {
type: RW[fd].type,
value: RW[fd].value
}
});
var TRecords = event.record.エリア.value;
TRecords[0].value['実施エリア'].value = '北海道';
for (var j = 0; j < 6; j++) {
record['エリア'].value.push({ value: newRow1 });
}
TRecords[1].value['実施エリア'].value = '東北';
TRecords[2].value['実施エリア'].value = '関東';
TRecords[3].value['実施エリア'].value = '東海';
TRecords[4].value['実施エリア'].value = '関西';
TRecords[5].value['実施エリア'].value = '九州';
TRecords[6].value['実施エリア'].value = 'その他';
return event;
});
**************
結果、「実施エリア」の値が
北海道
その他
その他
その他
・・・・以下同じ
となります。
Kintone.Promise等の処理が必要なのかと思ったのですが、書き方が今一わかりませんので、ご教示いただきたく、お願いいたします。
2件のコメント
yamatami さん
処理は、非同期処理が無いので Pormise 対応は不要です。
同じ値が設定される理由は、下記で1つのオブジェクト newRow1 を各行に代入しているためです。
record['エリア'].value.push({ value: newRow1 });
これにより、どの行の'実施エリア'に値を設定しても newRow1 が変更されます。
今回の場合、オブジェクトの参照ではなく、同じ値を持つオブジェクトの複製が必要です。
オブジェクトの複製方法としては、例えば下記のようなやり方があります。
record['エリア'].value.push({ value: JSON.parse(JSON.stringify(newRow1)) });
rex0220様
ご教示ありがとうございます。
教えていただきました、
JSON.parse(JSON.stringify(newRow1))
を利用すると、多分、空白(undifind)の項目が邪魔をしていると思うのですが、複製がうまくいかないので、
JSON.parseやJSON.stringifyをもう少し勉強してみます。
再度お尋ねすることもあるかと存じますが、その際はまたお知恵をいただければ幸いです。
取り急ぎ、お礼まで。