ラジオボタンの選択によって、表示するフィールドを切り替えつつ(グループ設定)
選択されたラジオボタンに紐づくフィールドのみ必須入力にすることは可能でしょうか。生成AIで何回かコードを書いてもらい動作検証しているのですが、うまくいかず。
何かご教示いただければと。よろしくお願いいたします。
(function() {
'use strict';
// 必須解除のマッピング
const requiredFieldMapping = {
'不具合報告(営業所申請分)': [
'文字列__1行__2',
'日付_1',
'文字列__1行__1',
'数値_0',
'数値',
'ラジオボタン',
'文字列__1行__3',
'日付_2',
'数値_1'
],
'工事提案・見積書提出(●●●不動産申請分)': [
'文字列__1行__3',
'日付_2',
'数値_1'
]
};
// 表示時とラジオボタン変更時
const events = [
'app.record.create.show',
'app.record.edit.show',
'app.record.create.change.ラジオボタン_0',
'app.record.edit.change.ラジオボタン_0'
];
kintone.events.on(events, function(event) {
const selectedOption = event.record['ラジオボタン_0'].value;
// 選択されたオプションに対応するフィールドを必須解除
if (selectedOption && requiredFieldMapping[selectedOption]) {
const fieldsToUnrequire = requiredFieldMapping[selectedOption];
fieldsToUnrequire.forEach(function(fieldCode) {
if (event.record[fieldCode]) {
event.record[fieldCode].required = false;
}
});
}
return event;
});
// 保存時のバリデーション処理
const submitEvents = [
'app.record.create.submit',
'app.record.edit.submit'
];
kintone.events.on(submitEvents, function(event) {
const selectedOption = event.record['ラジオボタン_0'].value;
// 選択されたオプションに対応するフィールドのエラーをクリア
if (selectedOption && requiredFieldMapping[selectedOption]) {
const fieldsToUnrequire = requiredFieldMapping[selectedOption];
fieldsToUnrequire.forEach(function(fieldCode) {
if (event.record[fieldCode] && event.record[fieldCode].error) {
event.record[fieldCode].error = null;
}
});
}
return event;
});
// バリデーション処理
const validateEvents = [
'app.record.create.validate',
'app.record.edit.validate'
];
kintone.events.on(validateEvents, function(event) {
const selectedOption = event.record['ラジオボタン_0'].value;
// 選択されたオプションに対応するフィールドのバリデーションエラーを削除
if (selectedOption && requiredFieldMapping[selectedOption] && event.errors) {
const fieldsToUnrequire = requiredFieldMapping[selectedOption];
// エラー配列をフィルタリングしてエラーを削除
for (let i = event.errors.length - 1; i >= 0; i--) {
const error = event.errors[i];
// フィールドコードを抽出する処理
const fieldId = error.elementId || '';
let fieldCode = fieldId.replace(/^.*?field-/, '').replace(/-.*$/, '');
// 数値_0のようなフィールドコードに対応
if (fieldCode.match(/^[^-]+-[^-]+$/)) {
fieldCode = fieldCode.replace(/-/, '_');
}
// 必須解除対象のフィールドのエラーを削除
if (fieldsToUnrequire.includes(fieldCode)) {
event.errors.splice(i, 1);
}
}
}
return event;
});
})();