いつもお世話になっております。
添付のように、分類が「その他」の場合のみ、「詳細」が表示するように、レコード追加したときには出来ましたが、一覧画面ではできなくて、例えば、一覧画面で編集するとき、「その他」以外を選んだ場合、「詳細」が編集不可になってもいいですが、以下のようにコード書いたが全然動かなくて、アドバイス頂いたら幸いです。よろしくお願い致します。
(function() {
“use strict”;
//レコードの追加、編集、詳細画面で適用する
var events = [‘app.record.detail.show’,
‘app.record.create.show’,
‘app.record.create.change.分類’,
‘app.record.create.change.詳細’,
‘app.record.index.show’,
‘app.record.index.edit.change.分類’,
‘app.record.index.edit.change.詳細’,
‘app.record.edit.show’,
‘app.record.edit.change.詳細’,
‘app.record.edit.change.分類’];
kintone.events.on(events, function(event) {
var record = event.record;
var past = record.分類.value;
if (past === ‘その他’) {
kintone.app.record.setFieldShown(‘詳細’, true);
}else {
kintone.app.record.setFieldShown(‘詳細’, false);
record.詳細.value = “”; //非表示の時にvalueを空にする
record[‘詳細’][‘disabled’] = true;
}
return event;
});
})();
goro様、お世話になります。
一覧画面と詳細画面では対象レコード数が異なるため、一覧画面でのレコード取得はevent.recordsで複数対象とする必要があります。
その後、レコード数分だけループして、1レコードずつ値取得して比較する。
var records = event.records;
for (var i = 0; i < records.length; i++) {
var record = event.records[i];
var past = record.分類.value;
ただし、ここまで書いていて気付いたのですが、kintone.app.record.setFieldShown(表示 / 非表示)はレコード一覧画面では使用できなかったはずです。
※ record[‘詳細’][‘disabled’] = true; →こちらの編集不可とする処理は可能
高田 旭様
お世話になっております。
アドバイスいただき、ありがとうございます。
初心者で大変恐縮ですが、今教えていただいたようにするとレコード追加でも詳細が隠れないようになりました。
kintone.app.record.setFieldShown(表示 / 非表示)はレコード追加で使用し、
record[‘詳細’][‘disabled’] = true;は一覧で使うのは、やっぱり無理でしょうか?
> kintone.app.record.setFieldShown(表示 / 非表示)はレコード追加で使用し、
> record[‘詳細’][‘disabled’] = true;は一覧で使うのは、やっぱり無理でしょうか?
いえ、こちらの処理でしたら可能なはずです。
goro様の現在記述しているコードでは、実行条件が「一覧画面」「詳細画面」「編集画面」などを全て含んでしまっていますので、イベント毎に利用するものを使い分ければ大丈夫です。
(function() {
"use strict";
//レコードの追加、編集、詳細画面で適用する
var events = ['app.record.detail.show',
'app.record.create.show',
'app.record.create.change.分類',
'app.record.create.change.詳細',
'app.record.edit.show',
'app.record.edit.change.詳細',
'app.record.edit.change.分類'
];
kintone.events.on(events, function(event) {
var record = event.record;
var past = record.分類.value;
if (past === 'その他') {
kintone.app.record.setFieldShown('詳細', true);
} else {
kintone.app.record.setFieldShown('詳細', false);
record.詳細.value = ""; //非表示の時にvalueを空にする
record['詳細']['disabled'] = true;
}
return event;
});
var indexevents = ['app.record.index.show',
'app.record.index.edit.change.分類',
'app.record.index.edit.change.詳細'
];
kintone.events.on(indexevents, function(event) {
var records = event.records;
for (var i = 0; i < records.length; i++) {
var record = event.records[i];
var past = record.分類.value;
if (past === 'その他') {
record['詳細']['disabled'] = false;
} else {
kintone.app.record.setFieldShown('詳細', false);
record.詳細.value = ""; //非表示の時にvalueを空にする
record['詳細']['disabled'] = true;
}
}
return event;
});
})();
走り書きですが、このようなイメージになるかと思います。
高田 様
お世話になっております。
コードまで書いていただき、本当にありがとうございます。
初心者で大変申し訳ございませんが、今のコードですとその他⇒詳細が表示されるが、詳細のフィールドは書き込みできなくて、
たぶん
record['詳細']['disabled'] = true; を使っているからと思いますが、どうすればよろしいでしょうか?
失礼しました、if文の処理内容が誤りですね。
"その他"以外を選択すると、record[‘詳細’][‘disabled’] = true; となって編集不可状態になりますので
"その他"選択時にrecord[‘詳細’][‘disabled’] = false; とすることで改めて編集可能にしてあげる必要がありました。
if (past === 'その他') {
kintone.app.record.setFieldShown('詳細', true);
record['詳細']['disabled'] = false;
} else {
kintone.app.record.setFieldShown('詳細', false);
record.詳細.value = ""; //非表示の時にvalueを空にする
record['詳細']['disabled'] = true;
}
if (past === 'その他') {
record['詳細']['disabled'] = false;
} else {
record.詳細.value = ""; //非表示の時にvalueを空にする
record['詳細']['disabled'] = true;
}
record['詳細']['disabled'] = true; → 詳細フィールドの編集が不可になります。
record['詳細']['disabled'] = false; → 詳細フィールドの編集が可能になります。
高田 様
お世話になっております。
コードも修正していただき、本当にありがとうございます。
レコードの追加画面では、今までどおりできました。(その他のみ⇒詳細表示)
ただ、一覧画面から編集すると「その他」以外の場合でも「詳細」が編集可能で、いったん「その他」で「詳細」に記入したら、他の項目選んでも
レコード追加みたいに詳細内容が消えなくなります。
goro様
実際の環境で確認してみましたところ、私の方で大きな勘違いをしていたことに気付きました。
まず、‘app.record.index.show’ と ‘app.record.index.edit’ では対象レコード数が異なっておりました。
> 一覧画面でのレコード取得はevent.recordsで複数対象とする必要があります。
→正しくは、'app.record.index.show’のみ複数対象とする必要有りで、 ‘app.record.index.edit’ では単数でOKでした。
goro様の要望では編集時のみ処理したいとのことですので、複数レコードを対象とする処理部分は不要となります。
上記を踏まえて、下記コードに修正すると希望通りの動作いたしますでしょうか?
(function() {
"use strict";
//レコードの追加、編集、詳細画面で適用する
var events = ['app.record.detail.show',
'app.record.create.show',
'app.record.index.edit.show',
'app.record.index.edit.change.分類',
'app.record.index.edit.change.詳細',
'app.record.create.change.分類',
'app.record.create.change.詳細',
'app.record.edit.show',
'app.record.edit.change.詳細',
'app.record.edit.change.分類'
];
kintone.events.on(events, function(event) {
var record = event.record;
var past = record.分類.value;
if (past === 'その他') {
kintone.app.record.setFieldShown('詳細', true);
record['詳細']['disabled'] = false;
} else {
kintone.app.record.setFieldShown('詳細', false);
record.詳細.value = ""; //非表示の時にvalueを空にする
record['詳細']['disabled'] = true;
}
return event;
});
})();
度々の誤り、大変申し訳ありません。 ご確認の程、よろしくお願いいたします。
高田 様
お世話になっております。
何度も何度も教わっていただき、本当にありがとうございます。
おかげさまで求めていた操作ができました。本当にご親切に対応していただき、ありがとうございました。