🐊
[kintoneカスタマイズ] サブテーブルのレコードに自動採番したIDを付与
目的
サブテーブのレコードにID列をもたせ、自動で番号を連番で採番する。
要件
- サブテールにID列を設ける
- IDは自動採番された番号とする
- サブテーブルのレコードが削除されても、他のレコードIDは影響を受けない
実装
IDとして使用するため、一度採番された番号は必ずそのレコードと紐付く必要がある。
サブテーブルにレコードが追加された場合に、最後に発行されたIDに追加レコード分を加算し、連番を発行させる。
またサブテーブルのレコードの削除でレコード数が変わっても、採番された連番は影響を受けない。
フィールド名 | フィールドタイプ | 内容 |
---|---|---|
サブテーブル_id | 数値 | 自動採番されるサブテーブルレコードのID |
サブテーブルMaxID | 数値 | 最後に発行されたID |
※サブテーブルMaxIDは業務では使用しないフィールドのため、システム設定グループ等に入れる
kintone.js
(() => {
'use strict';
const events = [
'app.record.create.submit',
'app.record.edit.submit'
];
kintone.events.on(events, (event) => {
const record = event.record;
// ① 自動採番された最新のサブテーブルレコードID
const tableMaxID = record.サブテーブルMaxID.value;
// ② サブテーブルのレコード数
const count = record.サブテーブル.value.length;
let j = 1;
for (let i = 0; i < count; i++) {
// ③ サブテーブル_idを取得
let row = record.サブテーブル.value[i].value.サブテーブル_ID.value;
if(row == null){
// ④ 連番を発行
let index = Number(tableMaxID) + j;
// ⑤ サブテーブル_idに発行した連番をセット
record.サブテーブル.value[i].value.サブテーブル_ID.value = index;
// ⑥ 最新の採番番号として値をセット
record.サブテーブルMaxID.value = index;
j++;
}
}
return event;
});
})();
詳細
① 自動採番された最新のサブテーブルレコードID
連番として発行するため、最後に発行したIDを取得する
② サブテーブルのレコード数
ループ処理するため、サブテーブルのレコード数を取得
③ サブテーブル_idを取得
新規に追加されたサブテーブルのレコードのみ処理するため、IDが付与されているか確認する
④ 連番を発行
ID = 最後に発行されたレコードID + 新規追加されたレコード数
⑤ サブテーブル_idに発行した連番をセット
④で発行した連番をそのサブテーブルのレコードIDとして設定
⑥ 最新の採番番号として値をセット
次回同様の処理が実行するために、最後のID値をサブテーブルMaxIDフィールドに設定
Discussion