回答の条件によって別フィールドの表示/非表示を切り替える

お世話になります。

初心者で恐れ入ります。

https://developer.cybozu.io/hc/ja/articles/202377614

を参照に診察用で試しに使わせて頂ております。

一覧の画面で2,3,4,5番の質問にあると選択し関連項目追加しました。その後編集でないに変更したら→すべての覧ではあると選択したところのデータがすべて残ってしまい、CSVで書き出して使いたいですが、どこまで正しいデータとなるかということになりますので、解決案やヒントなどあるようでしたら、ご教示頂けますでしょうか。

宜しくお願い致します。

goro さん

項目を非表示にしたタイミングで、項目の値をクリアされたらいかがでしょうか?

イベント処理終了時に、return event; を行うと画面に反映されます。

(app.record.detail.show の場合は、return event;でも反映されません)

一覧編集に関しては、非表示の制御が面倒なので、かわりに編集不可にします。

 

(function() {
"use strict";

//レコードの追加、編集、詳細画面で適用する
var events = ['app.record.detail.show',
'app.record.create.show',
'app.record.create.change.past',
'app.record.create.change.radio2',
'app.record.create.change.radio3',
'app.record.create.change.radio4',
'app.record.create.change.radio5',
'app.record.edit.show',
'app.record.edit.change.past',
'app.record.edit.change.radio2',
'app.record.edit.change.radio3',
'app.record.edit.change.radio4',
'app.record.edit.change.radio5'];

kintone.events.on(events, function(event) {

var record = event.record;

//1問目で「その他」が選択された場合は「その他」フィールドを表示する
var past = record['past']['value'];
if (past.indexOf('その他') >= 0) {
kintone.app.record.setFieldShown('other', true);
}
else {
kintone.app.record.setFieldShown('other', false);
record['other']['value'] = '';
}

//2問目の回答に応じて「予防接種名」フィールドの表示、非表示を切り替える
if (record['radio2']['value'] === 'ある') {
kintone.app.record.setFieldShown('vaccination', true);
}else {
//「ない」の場合は非表示
kintone.app.record.setFieldShown('vaccination', false);
record['vaccination']['value'] = '';
}

//3問目の回答に応じて「病名」「発症した時期」フィールドの表示、非表示を切り替える
if (record['radio3']['value'] === 'いいえ') {
kintone.app.record.setFieldShown('disease', false);
kintone.app.record.setFieldShown('date3', false);
record['disease']['value'] = '';
record['date3']['value'] = '';
}else {
//「はい」の場合は「病名」「時期」を表示する
kintone.app.record.setFieldShown('disease', true);
kintone.app.record.setFieldShown('date3', true);
}

//4問目の回答に応じて「アレルギーの原因」「症状」フィールドの表示、非表示を切り替える
if (record['radio4']['value'] === 'ない') {
kintone.app.record.setFieldShown('cause', false);
kintone.app.record.setFieldShown('symptom', false);
record['cause']['value'] = '';
record['symptom']['value'] = '';
}else {
//「ある」の場合は「病名」「時期」を表示する
kintone.app.record.setFieldShown('cause', true);
kintone.app.record.setFieldShown('symptom', true);
}

//5問目の回答に応じて「詳細」フィールドの表示、非表示を切り替える
if (record['radio5']['value'] === 'ない') {
kintone.app.record.setFieldShown('detail', false);
record['detail']['value'] = '';
}else {
//「ある」の場合は「病名」「時期」を表示する
kintone.app.record.setFieldShown('detail', true);
}

return event;

});

//レコードの一覧編集画面で適用する
var indexEvents = ['app.record.index.edit.show',
'app.record.index.edit.change.past',
'app.record.index.edit.change.radio2',
'app.record.index.edit.change.radio3',
'app.record.index.edit.change.radio4',
'app.record.index.edit.change.radio5'];

kintone.events.on(indexEvents, function(event) {

var record = event.record;

//1問目で「その他」が選択された場合は「その他」フィールドを編集可にする
var past = record['past']['value'];
if (past.indexOf('その他') >= 0) {
record['other']['disabled'] = false;
}
else {
record['other']['disabled'] = true;
record['other']['value'] = '';
}

//2問目の回答に応じて「予防接種名」フィールドの編集可を切り替える
if (record['radio2']['value'] === 'ある') {
record['vaccination']['disabled'] = false;
}else {
//「ない」の場合は非表示
record['vaccination']['disabled'] = true;
record['vaccination']['value'] = '';
}

//3問目の回答に応じて「病名」「発症した時期」フィールドの編集可を切り替える
if (record['radio3']['value'] === 'いいえ') {
record['disease']['disabled'] = true;
record['date3']['disabled'] = true;
record['disease']['value'] = '';
record['date3']['value'] = '';
}else {
//「はい」の場合は「病名」「時期」を表示する
record['disease']['disabled'] = false;
record['date3']['disabled'] = false;
}

//4問目の回答に応じて「アレルギーの原因」「症状」フィールドの編集可を切り替える
if (record['radio4']['value'] === 'ない') {
record['cause']['disabled'] = true;
record['symptom']['disabled'] = true;
record['cause']['value'] = '';
record['symptom']['value'] = '';
}else {
//「ある」の場合は「病名」「時期」を表示する
record['cause']['disabled'] = false;
record['symptom']['disabled'] = false;
}

//5問目の回答に応じて「詳細」フィールドの編集可を切り替える
if (record['radio5']['value'] === 'ない') {
record['detail']['disabled'] = true;
record['detail']['value'] = '';
}else {
//「ある」の場合は「病名」「時期」を表示する
record['detail']['disabled'] = false;
}

return event;

});


})();

rex0220 様

ありがとうございます。

すごいです。