サブテーブルへのデータコピーに時間が掛かります。

アプリAで登録しているレコード内容を、アプリBの新規レコード登録画面のサブテーブルにセットするカスタマイズを行いましたが
110件程度のレコードを表示(行追加)するのに1分以上の時間が掛かってしまいます。
console.logで配列の値をブラウザで確認すると、アプリAからのデータ抽出は1~2秒で終わっている様なのですが、行の追加に時間が掛かっている様に見えます。
どなたか解決方法を教えて頂けると助かります。

(function() {
'use strict';

kintone.events.on('app.record.create.show', function(event) {

event.record.Table.value = [];

var body = {
"app": 111,
"fields": ["$id", "CODE", "STT_DAY", "END_DAY", "CUR", "PRICE", "STATUS", "REV", "FLAG", "APPROVAL_DATE", "INSERTDATE"],
"query": "FLAG = 1 order by CODE asc limit 500"
};

kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body, function(resp) {

var records = resp.records;

for (var i = 0; i < records.length; i++) {

var rec_id = records[i]['$id']['value'];
var p_code = records[i]['CODE']['value'];
var s_day = records[i]['STT_DAY']['value'];
var e_day = records[i]['END_DAY']['value'];
var c_code = records[i]['CUR']['value'];
var price = records[i]['PRICE']['value'];
var p_stat = records[i]['STATUS']['value'];
var rev = records[i]['REV']['value'];
var flag = records[i]['FLAG']['value'];

var subRow = {
value: {
REC_ID: {
type: 'NUMBER',
value: rec_id
},
LOOKUP: {
type: 'SINGLE_LINE_TEXT',
value: ''
},
CODE: {
type: 'SINGLE_LINE_TEXT',
value: p_code
},
STT_DAY: {
type: 'DATE',
value: s_day
},
END_DAY: {
type: 'DATE',
value: e_day
},
CUR: {
type: 'DROP_DOWN',
value: c_code
},
PRICE: {
type: 'NUMBER',
value: price
},
STATUS: {
type: 'DROP_DOWN',
value: p_stat
},
REV: {
type: 'NUMBER',
value: rev
},
FLAG: {
type: 'SINGLE_LINE_TEXT',
value: flag
}
}
};

event.record.Table.value.push(subRow);

kintone.app.record.set(event);
}

})

return event;
});

})();

今のコードですと、ループ回数分pushとsetしてるので遅いのだと思います。

なので最後にまとめてsetすれば改善されるかと思います。

動作確認できてないのでエラー吐いたらすいません!

    kintone.api(kintone.api.url("/k/v1/records", true), "GET", body, function(resp) {
      var records = resp.records;
      var subRow = {};
      for (var i = 0; i < records.length; i++) {
        var rec_id = records[i]["$id"]["value"];
        var p_code = records[i]["CODE"]["value"];
        var s_day = records[i]["STT_DAY"]["value"];
        var e_day = records[i]["END_DAY"]["value"];
        var c_code = records[i]["CUR"]["value"];
        var price = records[i]["PRICE"]["value"];
        var p_stat = records[i]["STATUS"]["value"];
        var rev = records[i]["REV"]["value"];
        var flag = records[i]["FLAG"]["value"];

        subRow[i] = {
          value: {
            REC_ID: {
              type: "NUMBER",
              value: rec_id
            },
            LOOKUP: {
              type: "SINGLE_LINE_TEXT",
              value: ""
            },
            CODE: {
              type: "SINGLE_LINE_TEXT",
              value: p_code
            },
            STT_DAY: {
              type: "DATE",
              value: s_day
            },
            END_DAY: {
              type: "DATE",
              value: e_day
            },
            CUR: {
              type: "DROP_DOWN",
              value: c_code
            },
            PRICE: {
              type: "NUMBER",
              value: price
            },
            STATUS: {
              type: "DROP_DOWN",
              value: p_stat
            },
            REV: {
              type: "NUMBER",
              value: rev
            },
            FLAG: {
              type: "SINGLE_LINE_TEXT",
              value: flag
            }
          }
        };
      }
      var rec = kintone.app.record.get();
      rec.record.Table.value= subRow;
      kintone.app.record.set(rec);
    });

TKさん

アドバイス有難うございます。

早速試してみたのですが、サブテーブルの行が1行しか出力されないのですが、どこか誤りがありましたらご指摘頂けると助かります。

(function() {
'use strict';

kintone.events.on('app.record.create.show', function(event) {
event.record.Table.value = [];

var body = {
"app": 111,
"fields": ["$id", "CODE", "STT_DAY", "END_DAY", "CUR", "PRICE", "STATUS", "REV", "FLAG"],
"query": "FLAG = 1 order by CODE asc limit 500"
};

kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body, function(resp) {

var records = resp.records;
var subRow = {};

for (var i = 0; i < records.length; i++) {
var rec_id = records[i]["$id"]["value"];
var p_code = records[i]["CODE"]["value"];
var s_day = records[i]["STT_DAY"]["value"];
~~~略~~~
var flag = records[i]["FLAG"]["value"];

subRow[i] = {
value: {
REC_ID: {
type: "NUMBER",
value: rec_id
},
LOOKUP: {
type: "SINGLE_LINE_TEXT",
value: ""
},
CODE: {
type: "SINGLE_LINE_TEXT",
value: p_code
},
STT_DAY: {
type: "DATE",
value: s_day
},
~~~略~~~
FLAG: {
type: "SINGLE_LINE_TEXT",
value: flag
}
}
};
}
var rec = kintone.app.record.get();
rec.record.Table.value= subRow;
kintone.app.record.set(rec);
});
return event;
});
})();

 

あら、すいません!

下記変更お願いします。

// varsubRow = {};
var subRow = [];

TKさん

ご指摘、有難うございました。

サブテーブルに複数行出力される様にはなったのですが、やはりサブテーブルに110行程度出力するのに2~3分以上の時間が掛かります。

サブテーブルのデータを最後に纏めてset出来ていると思うのですが、一度保存したレコードを編集画面で開く際も
行追加がパラパラと下部方向へ追加され、表示に同じくらいの時間が掛かります。

アプリに登録されている他のJavaScriptが影響しているのか全て削除してみましたが事象は変わらずでした。
またFirefoxにすると若干早くなりますが、それでも1分程度時間が掛かります。
パソコンを変えても事象は変わりませんでした。

これ以上の表示時間完了までの短縮は難しいでしょうか?
(この事象はクライアント側の問題でしょうか?)

効果なかったですか、すいません!

こちらでも試してみたのですが、Windows10 64ビット メモリ16G chrome79(最新)

で、サブテーブルのカラムに文字列1行x10、create.show時に100行、10文字のテキスト付きで

6~7秒程度の速度で描画終わってたので何かほかに原因があるかもしれませんね・・・。

 

ただ、保存されたレコードを開く際も同じくらいの時間がかかってるみたいなのでPCのスペックでしょうか・・・