🐊

[kintoneカスタマイズ] サブテーブルのレコードに自動採番したIDを付与

2023/09/30に公開

目的

サブテーブのレコードにID列をもたせ、自動で番号を連番で採番する。

要件

  1. サブテールにID列を設ける
  2. IDは自動採番された番号とする
  3. サブテーブルのレコードが削除されても、他のレコード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