入力情報と既存情報を比較したいです

データを追加する時、

jsで既存データと比較する方法を知りたいです。

 

たとえば施設予約のアプリで、

以下のような2つの既存データがあった場合、

・A室 8/1 0:00 ~ 8/3 0:00

・B室 8/1 0:00 ~ 8/3 0:00

「A室 8/2 0:00 ~ 8/4 0:00」の入力を「保存」使用とした場合、

「A室 8/1 0:00 ~ 8/3 0:00」とブッキングしていることを判定したいです。

 

欲を言うのであれば、

ブッキングした時は、エラーで入力情報の確認を促し、

入力できないようにしたいのですが、

これは別の質問として相談させていただいております。

 

なにか情報をご存知でしたら、

教えていただけませんでしょうか。

kawamuraさん

ご質問いただきありがとうございます。

データの重複確認については、レコード保存時イベントで該当アプリのレコードを全件取得して、
取得した配列のlength(配列の要素数)が0の場合はそのまま保存、1以上の場合はエラー表示という作りにするといいかと思います。

全件取得の箇所については、こちらの記事を参考にしていただけると嬉しいです。
▼Promiseを利用したモダンなアプリの全レコード取得の書き方
https://developer.cybozu.io/hc/ja/articles/204730600

▼kintoneの大量レコード取得を高速化
https://developer.cybozu.io/hc/ja/articles/360000826766

よろしくお願いします。

 

kawamura さん

こんにちは!

 

開始日と終了日を他のレコードの開始日、終了日と比較して

重複がないか、チェックを行い、重複している場合はエラーが表示される、

という処理を書いてみました!

 

私自身、まだまだうまく理解できていないところもあり、

恥ずかしい記述内容となっているかもしれませんが、少しでも

参考になれば嬉しいです。

 

(function () {
"use strict";
  kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], function (event) {
 
     var record = event.record;
    
     var startDate1 = new Date(record.開始日.value);
     var endDate1 = new Date(record.終了日.value);
    
     var startDate2;
     var endDate2;
    
     var body = {
         "app"    : event.appId,
         "fields" : ["開始日", "終了日"]
     }
    
     return new kintone.Promise(function(resolve, reject) {
        
         kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body, function(resp) {
            
                for(var i = 0; i < resp.records.length; i++) {
               
                    startDate2 = new Date(resp.records[i].開始日.value);
                    endDate2 = new Date(resp.records[i].終了日.value);
               
                    if(startDate1 <= endDate2 && endDate1 >= startDate2) {
                        event.error = "予定が重複しています。";
                        resolve(event);
                    } else {
                        resolve(event);
                    }
                }
                console.log(resp);
            }, function(error) {
                console.log(resp);
            });
        });
        return event;
    });
})();