やりたいこと
Kintoneレコードで複数存在するユーザフィールドの値を別のユーザフィールドにすべて入れたい
ぱっとググって調べて出てこなかったので、ここに残します
KintoneのJavaScriptカスタマイズを使用します
例で使用するフィールド
- フィールドコードが"ユーザー1"のユーザー選択フィールド
- フィールドコードが"ユーザー2"のユーザー選択フィールド
- フィールドコードが"ユーザー3"のユーザー選択フィールド
ユーザー1とユーザー2の値を重複なくユーザー3に当てはめます
実装例
レコード編集画面で一律にユーザ3の値をリセットし、レコード保存時に再度値を当てはめたうえで、保存される仕組みです
ユーザ3の値のリセットを保存前に実行するとうまく動作しなかったため、処理を分けています
kintone.events.on([
'app.record.create.show',
'app.record.edit.show',
], function(event){
let record = event.record;
// ユーザ3を空にする→レコードの保存直前に再度値を当てはめる
record['ユーザー3'].value = [];
return event;
});
kintone.events.on([
'app.record.create.submit',
'app.record.edit.submit',
], function(event){
let record = event.record;
// ユーザごとの値を変数にする
let valueUser1 = record['ユーザー1'].value;
let valueUser2 = record['ユーザー2'].value;
let valueUser3 = record['ユーザー3'].value;
// 処理のなかで使用する配列の変数を中身が空の状態で先に用意
let usersArray = [];
let usersUniqueArray = [];
// ユーザフィールドの値をusersArrayの変数に入れる
// (この時点ではユーザの重複が発生する)
valueUser1.forEach(user => {
// usersArray.push({'code': user['code']});
usersArray.push(user);
});
valueUser2.forEach(user => {
// usersArray.push({'code': user['code']});
usersArray.push(user);
});
// usersArrayから重複のあるユーザを重複が無いようにして、
// usersUniqueArrayの変数に入れる
usersUniqueArray = usersArray.filter((user, index, self) =>
index === self.findIndex((t) => (
t['code'] === user['code'] && t['name'] === user['name']
))
);
// 重複の無いユーザデータを'ユーザー3'フィールドに当てはめる
usersUniqueArray.forEach(user => {
valueUser3.push(user);
});
return event;
});
注意事項
ユーザ選択をJavaScriptカスタマイズで登録するときは、ユーザーのcodeのみで登録が可能ですが、
私が試したときはユーザのnameも一緒に与えてあげないとうまくいきませんでした
ユーザのcodeのみで動作する場合は以下のコメントアウトされている部分を使用してください
usersArray.push({'code': user['code']});