kintone

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

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

今日の質問はこちら!

チェックボックスのフィールドを2つ作成します。
昼休み休憩有無、休み時間有無
数値フィールドを2つ作成します。
昼休み時間、休み時間
 
実現したいこと
・初期値は昼休み時間、休み時間ともに0分
・昼休み休憩有無にチェックが入った場合、「昼休み時間」の数値フィールドが40分になり、チェックが外れると、0分としたいです。
・休み時間有無にチェックが入った場合、「休み時間」の数値フィールドが10分になり、チェックが外れると、0分としたいです。
ご教示頂けましたら幸いです。
 
宜しくお願い致します。

cybozu developer network

仕様の確認

①(昼休み休憩有無・休み時間有無) のフィールドが変更されたタイミングで
②上記のフィールドの値を取得し、
③チェックが入っていれば(昼休みなら40分・休み時間なら10分)に変更。
 入っていなければ両方0分に変更。

割とシンプル。
んじゃ、さっそく作っていこう。

作成

①(昼休み休憩有無・休み時間有無) のフィールドが変更されたタイミングで

今回はchangeイベント(フィールドの値が変わったら発火する)を用いる。
複数のイベントを書く場合は配列として[]で囲ってあげればよい。

kintone.events.on([
"app.record.create.change.昼休み休憩有無",
"app.record.edit.change.昼休み休憩有無",
 "app.record.create.change.休み時間有無",
"app.record.edit.change.休み時間有無"]

②上記のフィールドの値を取得し、

昼休み休憩有無・休み時間有無の値を変数に格納する。
(これぐらいのコード量なら変数に入れなくても良いが、
コードをすっきりさせるため、そして今後追加機能等を考える際に扱いやすいよう、格納しておこう。

       var record = event.record;
       var lunchRestTimeCheck = record.昼休み休憩有無.value;
       var restTimeCheck = record.休み時間有無.value;

③チェックが入っていれば(昼休みなら40分・休み時間なら10分)に変更。
 入っていなければ両方0分に変更。

ifでチェックしていく。
数値フィールドなので数値は””で括らずOK。

       if(lunchRestTimeCheck.indexOf("チェック") >= 0) {
           record.昼休み時間.value = 40;
       } else {
           record.昼休み時間.value = 0;
       }
       if(restTimeCheck.indexOf("チェック") >= 0) {
           record.休み時間.value = 10;
       } else {
           record.休み時間.value = 0;
       }

完成形

(function($) {
   "use strict";
   kintone.events.on(["app.record.create.change.昼休み休憩有無","app.record.edit.change.昼休み休憩有無",
   "app.record.create.change.休み時間有無","app.record.edit.change.休み時間有無"], function(event) {
       var record = event.record;
       var lunchRestTimeCheck = record.昼休み休憩有無.value;
       var restTimeCheck = record.休み時間有無.value;
       if(lunchRestTimeCheck.indexOf("チェック") >= 0) {
           record.昼休み時間.value = 40;
       } else {
           record.昼休み時間.value = 0;
       }
       if(restTimeCheck.indexOf("チェック") >= 0) {
           record.休み時間.value = 10;
       } else {
           record.休み時間.value = 0;
       }
              return event;
   });
})();