概要
kintoneアプリで「連番の入力が必要な項目」がある場合、手入力だとミスのリスクや手間がかかります。
この記事では、kintoneカスタマイズで自動採番をする方法をご紹介します。
やりたいこと
- 「アイテムID」フィールドに、各レコードごとに一意のアイテムID(例:
ID_0001,ID_0002...)を自動で入力したい - 例えば、アプリに
ID_0003まで存在していた場合、追加画面を開いたときに、ID_0004が自動で入力されるようにしたい
画面イメージ
実装ポイント
- kintone REST APIを使って、 アイテムIDの最大値を取得
- 数字部分を+1にして、新しいアイテムIDを生成
- 生成したアイテムIDをフィールドに自動入力
- ユーザーが手動で編集できないように設定
実装例
(() => {
"use strict";
const ITEM_ID_FIELD = "itemId"; // フィールドコード
const PREFIX = "ID_";
const PAD_LENGTH = 4; // 連番の桁数
// レコード追加画面で自動採番
kintone.events.on("app.record.create.show", async (event) => {
try {
// 既存レコードのうち、最大のアイテムIDを取得
const resp = await kintone.api(kintone.api.url("/k/v1/records"), "GET", {
app: kintone.app.getId(),
fields: [ITEM_ID_FIELD],
query: `order by ${ITEM_ID_FIELD} desc limit 1`,
});
let maxIdNum = 0;
if (resp.records.length > 0) {
const latestItemId = resp.records[0][ITEM_ID_FIELD].value;
// 最大のアイテムIDから数字部分のみ抽出
const numPart = parseInt(latestItemId.replace(PREFIX, ""), 10);
if (!isNaN(numPart)) {
maxIdNum = numPart;
}
const newIdNum = maxIdNum + 1;
// 新しいアイテムIDを(ID_××××)の形式で作成
const newItemId = PREFIX + String(newIdNum).padStart(PAD_LENGTH, "0");
// 新しいアイテムIDをアイテムIDフィールドにセット
event.record[ITEM_ID_FIELD].value = newItemId;
event.record[ITEM_ID_FIELD].disabled = true;
}
} catch (error) {
console.error("自動採番でエラーが発生しました", error);
alert("アイテムIDの自動採番に失敗しました。");
}
return event;
});
// 編集画面とインライン編集で編集不可
kintone.events.on(
["app.record.edit.show", "app.record.index.edit.show"],
(event) => {
if (event.record[ITEM_ID_FIELD].value) {
event.record[ITEM_ID_FIELD].disabled = true;
}
return event;
}
);
})();
注意点
- アイテムIDはフィールド設定画面にて 「値の重複を禁止する」 にチェックを入れておく
→複数人が同時にレコードを追加しようとした時に、同じアイテムIDが割り当てられるのを防止するため - ユーザーが手動でアイテムIDを変更しないように、追加画面だけでなく、編集画面とインライン編集画面でも編集不可にする処理が必要

