# 編集画面を開いても何も変更を加えていない場合は保存ボタンを押されないようにしたい

**URL:** <https://community.cybozu.dev/t/topic/63>\
**Category:** kintone 開発相談\
**Created:** [2022 年 9 月 14 日午前 9:12 UTC](https://community.cybozu.dev/t/topic/63 "2022-09-14T09:12:15Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account1865](https://avatars.discourse-cdn.com/v4/letter/l/edb3f5/32.png) [@Legacy\_Account1865](https://community.cybozu.dev/u/Legacy_Account1865)\
**Post date:** [2022 年 9 月 14 日午前 9:12 UTC](https://community.cybozu.dev/t/topic/63/1 "2022-09-14T09:12:15Z")

</div>

**背景・実現したいこと**

&nbsp;レコードの編集画面を開いても何も変更を加えていない場合は保存ボタンを押されないようにしたいです。なぜかというとkintoneは何も変更を加えていなくても編集画面で保存ボタンを押すと更新者と更新日時フィールドが更新されてしまうからです。これの何が不都合かというと、そのレコードを同じタイミングで編集している人がいるとその人が保存をしようとした際に「レコードを再読み込みしてください。編集中に、ほかのユーザーがレコードを更新しました。」というエラーが発生してしまうことです。よってこのエラーがなるべく発生しないようにするために編集画面を開いても何も変更を加えていない場合は保存ボタンを押せないようにしたいです。

下にこれを実現するために自分なりに考えたコードを引用させて頂きます。もしプログラムに何か問題点があったり、他のより良い方法があるなどの場合はコメントして頂けると非常に助かります。よろしくお願いします。

プログラムの流れはapp.record.edit.showの時にevent.recordの値を保存して、app.record.edit.submitの時のevent.recordの値と比較するというものです。

**利用したソースコード**

```
(function() {
  'use strict';

    let data_before;

    kintone.events.on('app.record.edit.show', function(event) {
        data_before = Object.assign({}, event.record); // 編集画面を開いた時のrecordの値をコピーして保存する
        return event;
    });

    kintone.events.on('app.record.edit.submit', function(event) {
        if (_.isEqual(data_before, event.record)) {
            // lodashというライブラリでオブジェクト同士の値が等しいかを調べる
            // もし保存前の値と保存直前の値が等しい場合は、
            // 何も変更を加えないまま保存ボタンを押しているのでエラーを発生させキャンセルボタンを押すように促す
            event.error = "何も変更していない場合は保存ボタンではなくキャンセルボタンを押してください";
        }
        return event;
    });
})();

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2757](https://avatars.discourse-cdn.com/v4/letter/l/65b543/32.png) [@Legacy\_Account2757](https://community.cybozu.dev/u/Legacy_Account2757)\
**Post date:** [2022 年 9 月 15 日午前 4:13 UTC](https://community.cybozu.dev/t/topic/63/2 "2022-09-15T04:13:26Z")

</div>

kz様

falseをreturnすれば，保存ボタンを押しても先に進まないようにできます．

```
            event.error = "何も変更していない場合は保存ボタンではなくキャンセルボタンを押してください";
         return false;
        }else{
     return event;
}
    });

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1865](https://avatars.discourse-cdn.com/v4/letter/l/edb3f5/32.png) [@Legacy\_Account1865](https://community.cybozu.dev/u/Legacy_Account1865)\
**Post date:** [2022 年 9 月 16 日午前 1:05 UTC](https://community.cybozu.dev/t/topic/63/3 "2022-09-16T01:05:33Z")

</div>

TO様、ご返信ありがとうございます。

return falseにはそのような意味があるのですね。全く知りませんでした。勉強になります!

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/d5c841c3c5a6cb66eed514001c1b45147c9e1f4f.png) [@system](https://community.cybozu.dev/u/system)\
**Post date:** [2024 年 6 月 10 日午前 1:37 UTC](https://community.cybozu.dev/t/topic/63/4 "2024-06-10T01:37:41Z")

</div>

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