kintoneのレコード番号は、
- 自動的に付与される番号で変更できない。
- レコード番号をkintoneの計算式で使用することができない。
- レコードを削除して欠番となると、再設定できない。
という仕様です。そのため、アプリ作成時に「ルックアップ機能でレコード番号をキー」にしているとメンテナンス性が悪くなることがあります。具体的には、レコードの削除でレコード番号が欠番となりアプリ間の連携が崩れて、再設定が必要になるなどです。
レコードの削除権限をなくし、連番の状態を維持するという方法もよいですが、レコード番号とは別にキーとなるフィールドを別に持っておくことも有効です。
今回は、その方法として簡単な自動採番のJavaScriptサンプルです。
内容:
アウトプットイメージ
kintoneに「管理番号」という数値型のフィールドを作成し、「前レコードの管理番号に1を追加した自動採番をするJavaScriptです。
注意点
- kintoneのライトコースではJavaScriptを利用できないため、本事例で実現できません。
- 新規レコードの追加時、前レコードの管理番号に1を追加するだけのJavaScriptです。
管理番号のフィールドは数値型なので、kintoneの自動計算で他の文字列と組み合わせることも可能です。 - 一つ前のレコード番号には、数値の値が入力されている必要があります(空白の場合はエラーとなります)。
- レコード追加を同時に複数が実施する利用環境では、「管理番号」が重複する可能性があります。kintoneの機能で「値の重複を禁止する」で重複は回避可能ですが、手入力での修正が必要となることがあります。
参考サイト
参考にさせていただいた情報は以下です。
- 公式の情報
独自フォーマットの連番を自動採番して、レコードを登録する - cybozu developer network - 月次ごとの自動採番のサンプル
【kintone開発】月次ごとの自動採番をpromiseを使って実装する裏ワザ大公開 | Worklog-Inc
設定手順
1.kintoneの準備
自動採番をしたいkintoneのアプリに数値型で、フィールドコードを「管理番号」としたフィールドを作成します。
「管理番号」以外の名前にしたい場合は次項のJavaScriptを訂正します。
2.JavaScriptをkintoneに登録
次のコードをエディター(windowsの「メモ帳」など)にコピーし、文字コードを「UTF-8」、BOMなし、ファイル名を適当な名前で保存します。
ファイル名は任意ですが、ファイルの拡張子は「js」にします。
kintone.events.on(['app.record.create.show','mobile.app.record.create.show'], (event) => { // GETのパラメータ const body = { // 当月中の最新レコードから一つ前 'app':event.appId, 'query':'limit 1', 'fields': ['管理番号'] }; return kintone.api(kintone.api.url('/k/v1/records.json', true), 'GET', body).then((resp) =>{ event.record['管理番号'].value = parseInt(resp.records[0].管理番号.value) + 1; return event; }); });
保存したファイルをkintoneにアップロードします。
この事例では、
'app.record.create.show','mobile.app.record.create.show'
としているので、PCとスマートフォンは共通です。
「PC用のJavaScript」と「スマートフォン用のJavaScript」に同じファイルをアップロードします。
これで設定は完了です。
「レコードを追加する」をクリックすると、「管理番号」が自動採番されます。
なお、このJavaScriptは、一つ前のレコードの「管理番号」には、数値が入力されている必要があります。空白の場合はエラーとなるため、数値を入力しておきます。
以上、kintoneで簡単な自動採番の事例(JavaScriptサンプル)でした。