新規投稿
フォローする

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

背景・実現したいこと

 レコードの編集画面を開いても何も変更を加えていない場合は保存ボタンを押されないようにしたいです。なぜかというと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;
    });
})();
0

2件のコメント

Avatar
TO

kz様

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

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

 

TOにより編集されました
0
Avatar
kz

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

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

0
サインインしてコメントを残してください。