ユーザー選択フィールドの制御方法について

はじめまして。

以下のような仕組みを作りたく、Javascriptで制御しようとしているのですが、うまくいきません。

(function() {
"use strict";
var myEvent = ["app.record.create.submit", "app.record.edit.submit", "app.record.index.edit.submit"];
kintone.events.on(myEvent, function(event) {
var record = event.record;
var selectedUsers = record['ユーザー選択']['value'];
var selectedUsersname0 = record['ユーザー選択']['value'][0]['name'];
var selectedUsersname1 = record['ユーザー選択']['value'][1]['name'];
if (selectedUsers.length > 2) {
event.error = "担当者は3名以上指定できません。";
} else if(selectedUsers.length > 1 && selectedUsersname0.indexOf('◯◯') == -1 && selectedUsersname1.indexOf('◯◯') == -1) {
event.error = "◯◯を除き、担当者は一人しか指定できません。";
}
return event;
});
})();

【やりたいこと】

・基本的にユーザー選択には1名しか選択できないようにしたい

・「◯◯」という人物を含む場合は、2名登録ができるようにしたい

・「◯◯」という人物を含んでも、3名以上は登録ができないようにしたい

 

上記のコードを実行すると、1名で登録した時に「selectedUsersname1」の値が取れなくてエラーが起きます。

ユーザー選択の数が1の場合、2の場合、・・・・・と分岐して書いてみたのですが、不明がエラーが出て一旦元に戻しました。

 

プログラム初心者のため、あまりいい方法が思い浮かばず、こちらに質問を投稿いたしました。

ご助力を賜れますと幸いです。

初めまして。

ユーザー選択をmapで配列に入れ直して、そこに●●(許可されたユーザー)が含まれているかどうかを判定したらいかがでしょうか。

const selectedUsers = event.record['ユーザー選択'].value.map((user) => {
return user.name;
});

上記をもとに以下の条件でエラーを出します。
許可されたユーザーはallowedUserという変数で宣言しておきます。
・3名(length > 2)の場合
・許可されたユーザーが含まれず、2名(length > 1)の場合

const allowedUser = '●●';
if (selectedUsers.length > 2) {
event.error ='担当者は3名以上指定できません。';
} else if (!selectedUsers.includes(allowedUser) && selectedUsers.length>1) {
event.error =`${allowedUser}を除き、担当者は一人しか指定できません。`;
}

ウレット様

早速のご回答、誠にありがとうございます。

ご教示いただいた内容で、以下のようにプログラムを修正し、希望通りの動作をすることが確認できました。

(function() {
"use strict";
var myEvent = ["app.record.create.submit", "app.record.edit.submit", "app.record.index.edit.submit"];
kintone.events.on(myEvent, function(event) {
var record = event.record;
const selectedUsers = event.record['ユーザー選択'].value.map((user) => {
return user.name;
});
const allowedUser = '◯◯';
if (selectedUsers.length > 2) {
event.error ='担当者は3名以上指定できません。';
} else if (!selectedUsers.includes(allowedUser) && selectedUsers.length>1) {
event.error =`${allowedUser}を除き、担当者は一人しか指定できません。`;
}
return event;
});
})();

非常に助かりました。

ありがとうございます。

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。