新規投稿
フォローする

サブテーブルに行を追加して各行に項目名(値)を入力する方法について

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等の処理が必要なのかと思ったのですが、書き方が今一わかりませんので、ご教示いただきたく、お願いいたします。

 

 

 

 

0

2件のコメント

Avatar
rex0220

yamatami さん

処理は、非同期処理が無いので Pormise 対応は不要です。

同じ値が設定される理由は、下記で1つのオブジェクト newRow1 を各行に代入しているためです。

record['エリア'].value.push({ value: newRow1 });

これにより、どの行の'実施エリア'に値を設定しても newRow1 が変更されます。

今回の場合、オブジェクトの参照ではなく、同じ値を持つオブジェクトの複製が必要です。

オブジェクトの複製方法としては、例えば下記のようなやり方があります。

record['エリア'].value.push({ value: JSON.parse(JSON.stringify(newRow1)) });

 

0
Avatar
yamatami

rex0220様

ご教示ありがとうございます。

教えていただきました、

 JSON.parse(JSON.stringify(newRow1)) 

を利用すると、多分、空白(undifind)の項目が邪魔をしていると思うのですが、複製がうまくいかないので、

JSON.parseやJSON.stringifyをもう少し勉強してみます。

再度お尋ねすることもあるかと存じますが、その際はまたお知恵をいただければ幸いです。

取り急ぎ、お礼まで。

 

 

0
サインインしてコメントを残してください。