kintone

質問に勝手に答えて能力を向上しよう!Part.1

勉強ができるようになるには、類題を多く解くべきだという論がある。
これはプログラミングでも同じこと。
よって僕は勝手にcybozu developer networkに投稿されている質問に答えてみる。

今日の質問はこちら!

「終了日(日付フィールド)」に日付を入力すると、自動で「進捗状況(ラジオボタン)」が”完了済”になるように変更しようと思いコードを書きました。
「進捗管理」のラジオボタンの項目は、”未着手”と”作業中”と”完了済”です。
「終了日」に日付を入力すると、「進捗状況」を自動で”完了済”に、空欄の場合はユーザーが選択した項目にしたいです。
以下のコードだと、「終了日」が空欄で、”作業中”か”未着手”を選択しても、勝手に”完了済”になってしまいます。
ご教示いただけないでしょか。

cybozu developer network

(function() {
   “use strict”;
   var events = [‘app.record.edit.submit’,’app.record.create.submit’,’app.record.index.edit.submit’,
                 ‘app.record.create.change.進捗状況’,’app.record.edit.進捗状況’,
                 ‘app.record.create.change.終了日’,’app.record.edit.終了日’];
   kintone.events.on(events, function(event) {
       var record = event.record;
       //要素取得
       var process = record[‘進捗状況’][‘value’];
       var endday = record[‘終了日’][‘value’];

       if (record[‘終了日’][‘value’] !== “”) {
           process = “完了済”;
       }else {
           process = “”;
       }

       record[‘進捗状況’][‘value’] = process;  

           return event;

   });
})();

問題点

「終了日」が空欄で、”作業中”か”未着手”を選択しても、勝手に”完了済”になってしまいます。

ということだから、
どうやら最後の record[‘進捗状況’][‘value’] = process; というコードが悪さをしているんだろう。
ではこのprocessという箱には何が入るんだろう?

       if (record[‘終了日’][‘value’] !== “”) {
           process = “完了済”;
       }else {
           process = “”;
       }

上記のコードを日本語訳するとこうだ。
①もし、終了日が空じゃなければ、processの中身を完了済にする。
②終了日が空だったらprocessの中身を空欄にする。
しかし、今回は全パターンにおいて①に飛ばされているということが問題のようだ。
それはつまり条件式が間違っている、ということだ。
そんな時は魔法のワード、console.logで値を見てみよう。

console.log( record[‘終了日’][‘value’] );

その結果…

undefinedという値が返ってくることがわかった。
つまり空白かどうかのチェックはスルーされてしまうわけだ。
だからundefinedじゃなかった場合、に書き換えてしまえばよい。

(function() {
   “use strict”;
   var events = [‘app.record.edit.submit’,’app.record.create.submit’,’app.record.index.edit.submit’,
                 ‘app.record.create.change.進捗状況’,’app.record.edit.進捗状況’,
                 ‘app.record.create.change.終了日’,’app.record.edit.終了日’];
   kintone.events.on(events, function(event) {
       var record = event.record;
       //要素取得
       var process = record[‘進捗状況’][‘value’];
       var endday = record[‘終了日’][‘value’];

       if (record[‘終了日’][‘value’] !== undefined) {
           process = “完了済”;
       }else {
           process = “”;
       }

       record[‘進捗状況’][‘value’] = process;  

           return event;

   });
})();