🐊
[kintoneカスタマイズ] 自動採番レコードIDを別フィールドにコピーする
目的
レコードを複製した際に「複製元のレコード」と「新しくできた複数のレコード」を同じグループとして管理したい。
要件
- グループIDのフィールドを用意する。
- 複製元のレコードは自身のレコードIDのをグループIDに登録する。
- グループIDに「複製元のID」が登録されている状態にすることで複数のレコードを紐つける。
- グループ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