一覧画面の編集について

いつもお世話になっております。

添付のように、分類が「その他」の場合のみ、「詳細」が表示するように、レコード追加したときには出来ましたが、一覧画面ではできなくて、例えば、一覧画面で編集するとき、「その他」以外を選んだ場合、「詳細」が編集不可になってもいいですが、以下のようにコード書いたが全然動かなくて、アドバイス頂いたら幸いです。よろしくお願い致します。

(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; &nbsp; → 詳細フィールドの編集が不可になります。  
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;
    });
})();

度々の誤り、大変申し訳ありません。 ご確認の程、よろしくお願いいたします。

高田 

お世話になっております。

何度も何度も教わっていただき、本当にありがとうございます。

おかげさまで求めていた操作ができました。本当にご親切に対応していただき、ありがとうございました。