既出でしたらすみません。
kintone.app.record.get(), kintone.app.record.set()でテーブルに行挿入すると行IDがずれる挙動が見受けられましたが、これは仕様でしょうか?
例えばフィールドコード「文字列」というフィールドを一つだけ持つテーブル(フィールドコード: Table)があるとして、ヘッダメニューに置いたボタンをクリックするたびに、テーブルの先頭行に行が追加されるJavaScriptのサンプルコードを示します。
jQuery.noConflict();
(function($) {
“use strict”;
kintone.events.on([‘app.record.create.show’, ‘app.record.edit.show’], function(e) {
var sElm = kintone.app.record.getHeaderMenuSpaceElement();
$(sElm).append(
$(‘<button id=“insertRowBtn”>’).text(‘行追加’)
);
$(‘#insertRowBtn’).on(‘click’, function() {
insertRow();
});
});
function insertRow() {
var record = kintone.app.record.get();
var rec = record.record;
var table = rec[‘Table’][‘value’];
table.forEach(function(row) {
console.log(‘行追加前 rowId: ’ + row.id, ‘value: ’ + row.value[‘文字列’][‘value’]);
});
console.log(’----------------------’);
table.unshift({
‘value’: {
‘文字列’: {
‘type’: ‘SINGLE_LINE_TEXT’,
‘value’: ‘’
}
}
});
table.forEach(function(row) {
console.log(‘行追加後 rowId: ’ + row.id, ‘value: ’ + row.value[‘文字列’][‘value’]);
});
console.log(’----------------------’);
kintone.app.record.set(record);
}
})(jQuery);
文字列
2
1
という2行のテーブルを新規作成し保存します。編集画面で行追加ボタンをクリックした時のコンソールの出力結果例は以下となります。
★1回目のクリック
行追加前 rowId: 118313 value: 2
行追加前 rowId: 118314 value: 1
行追加後 rowId: undefined value:
行追加後 rowId: 118313 value: 2
行追加後 rowId: 118314 value: 1
※先頭行に空行が挿入されています。→先頭行に3を入力
★2回目のクリック
行追加前 rowId: 118313 value: 3
行追加前 rowId: 118314 value: 2
行追加前 rowId: null value: 1
行追加後 rowId: undefined value:
行追加後 rowId: 118313 value: 3
行追加後 rowId: 118314 value: 2
行追加後 rowId: null value: 1
※先頭に空行が挿入されていますが、1回目はrowId: 118314 のvalueが1だったのに、2回目ではrowId: 118314 のvalueは2となり、value: 1のrowIdはnullとなっています。一方、新規行に入力した3のrowIdは118313 が割り当てられてしまっいます。
これを3回、4回と繰り返しても同じ挙動で、kintone.app.record.set()で保存した後に、kintone.app.record.get()でテーブルを取得し直すと、元々割り振られていたrowIdは常に1行目と2行目に割り当てられてしまうような挙動となっているようで、IDの一貫性が保証されていない状態です。
保存済みだった行なのか、編集画面で新たに追加された行なのかをrowIdで判断したいケースがあるのですが、このような挙動だとうまくいきません。
このような挙動について、APIドキュメント等で見つけることができませんでしたので、もし掲載されているのであればご教示いただきたく思います。