1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Kintone】複数のユーザーフィールドの値を1つのユーザフィールドに重複なく当てはめる

Last updated at Posted at 2021-06-15

やりたいこと

Kintoneレコードで複数存在するユーザフィールドの値を別のユーザフィールドにすべて入れたい
ぱっとググって調べて出てこなかったので、ここに残します

KintoneのJavaScriptカスタマイズを使用します

例で使用するフィールド

  • フィールドコードが"ユーザー1"のユーザー選択フィールド
  • フィールドコードが"ユーザー2"のユーザー選択フィールド
  • フィールドコードが"ユーザー3"のユーザー選択フィールド
ユーザー1とユーザー2の値を重複なくユーザー3に当てはめます

image.png

実装例

レコード編集画面で一律にユーザ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']});
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?