🐊

[kintoneカスタマイズ] 自動採番レコードIDを別フィールドにコピーする

2023/09/30に公開

目的

レコードを複製した際に「複製元のレコード」と「新しくできた複数のレコード」を同じグループとして管理したい。

要件

  1. グループIDのフィールドを用意する。
  2. 複製元のレコードは自身のレコードIDのをグループIDに登録する。
  3. グループIDに「複製元のID」が登録されている状態にすることで複数のレコードを紐つける。
  4. グループIDフィールドは編集不可

実装

新規にレコードを作成した場合はグループIDに自身のレコードIDを設定する。
レコードIDは新規のレコードが保存されたタイミングで発行される。
そのためレコードが保存され詳細が表示されるタイミングで、自身のレコードIDをグループIDにコピーし更新する。
複製された場合は既にグループIDに複製元のIDが登録されているので実装は不要となる。

フィールド名 内容
レコードID 自動採番される自身のID
グループID 複製した際など複数のレコードを紐つけるグルーピングID

コード

kintone.js
/**
 * グループIDを生成
 * 自身のレコードをグループIDとしてコピーする
 */
(function() {
    "use strict";

    const SetGroupId = event =>{
        
        // ① グループIDに値が空の場合
        if(event.record['グループID'].value == ''){

            // ② 自身のレコードIDのを取得
            const recordId = kintone.app.record.getId();
            
            // ③ グループIDにレコードIDを登録
            let record = {
                'グループID': {
                    value: kintone.app.record.getId()
                }
            };

            let param = {
                app: kintone.app.getId(),
                id: recordId,
                record: record,
            };
            
            // ④ レコードを更新
            new KintoneRestAPIClient().record.updateRecord(param)
              .then(function(resp) {
                // ⑤ 成功したらページを再読み込みしてグループIDを表示
                location.reload();

              }).catch(function(e) {
                throw e.message;
              });
        }
    }
    
    // 詳細表示時にグループIDを更新 
    kintone.events.on(['app.record.detail.show'], SetFieldId);
    
    // グループIDは編集不可
    kintone.events.on(['app.record.create.show','app.record.edit.show','app.record.index.edit.show'], async(event) => {
            // グループIDを非活性化
            event.record['グループID']['disabled'] = true;
            return event;
    });
})();

詳細

① グループIDに値が空の場合
新規レコードが登録された場合は、保存直後の詳細画面表示時はグループIDが空の状態であるため、レコードIDを登録する処理が必要。
複製されたレコードの場合は複製元のIDが既にグループIDに登録されているので処理は不要となる。

② 自身のレコードIDを取得
レコードを保存し詳細画面が表示されるタイミングで、付与された自身のレコードIDを取得する。

② グループIDにレコードIDを登録
グループIDに取得したレコードIDを設定する。
kintone.app.getId() -- 現在のアプリID
recordId --①で取得したレコードIDを
record --グループIDにレコードIDを指定

④ レコードを更新
KintoneRestAPIClientを利用してレコードを更新する

⑤ 成功したらページを再読み込みしてグループIDを表示
処理が成功したらページを再読み込みして、グループIDが反映された状態の詳細画面を表示させる。

Discussion