kintone

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

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

今日の質問はこちら!

いつもお世話になります。
日付フィールドを条件によって日付を変えたいのですが
submitでは動くのですが、changeで動きません。
対処方法をご教授いただきたいと思います。
またほかに良い方法があれば併せてご教授のほどよろしくお願いいたします。

cybozu developer network

(function () {
“use strict”;
kintone.events.on([‘app.record.create.submit’,
‘app.record.edit.submit’,
‘app.record.create.change.請求方法’,
‘app.record.edit.change.請求方法’], function(event) {
var record = event.record;
var 訪問日今回 = record.訪問日今回.value;
var 請求方法= record.請求方法.value;
var 来月初 = moment(訪問日今回).add(1, ‘month’).startOf(‘month’).format(“YYYY-MM-DD”);
var 来月末 = moment(訪問日今回).add(1, ‘month’).endOf(‘month’).format(“YYYY-MM-DD”);

if (請求方法 === “振替” ){
record.請求日.value=moment(来月初).add(26, ‘day’).format(“YYYY-MM-DD”);
}else if (請求方法 === “振込” ){
record.請求日.value=来月末;
}else if (請求方法 === “集金” ){
record.請求日.value=””;
}else if (請求方法 === “未選択” ){
record.請求日.value=””;
}

});
})();

コードは同じでも条件によって動かない場合

今回はイベントが複数指定されていて、submitでは動くが、changeでは動かないという相談だ。
app.record.create.submit 動作○ 新規レコード保存時
app.record.edit.submit 動作○ レコード編集保存時
app.record.create.change.請求方法 動作× 新規レコード:フィールド(請求方法)値変更時app.record.edit.change.請求方法 動作× 既存レコード:フィールド(請求方法)値変更時
という状況。

コードは変わらないのにイベントによって動作しない場合は、

①イベントの記述方法が間違っている
②そのイベントでは実装不可能な動作を記述している

大体この2パターンだ。

①イベントの記述方法が間違っている

イベントの記述方法はcybozu developer networkで確認できる。
今回はレコード編集時のイベント、

app.record.edit.change.<フィールドコード>だ。
うん、問題ない。

②そのイベントでは実装不可能な動作を記述している

イベントごとにできる動作は決まっている。
例えば、app.record.detail.show(レコード詳細画面表示時)に
エラーを表示させるという動作は実装できない。

これも同じようにcybozu developer networkで確認できる。

今回は、フィールドの値を書き換えたいだから問題なし。

じゃあ原因はなんだ?

ここまで来たらもう一度やりたいことを確認しよう。

「 日付フィールドを条件によって日付を変えたいのですが」

ふむ。日付フィールドを条件によって日付を変えたい…。
今回は、
・訪問日今回(日付)
・請求方法(ラジオボタン)
・請求日(日付) ← これを変化させたい

今実装しているのは、請求方法を変えたら請求日が変わる仕組み。
ん?もしかして…訪問日今回を変えた場合も請求日が変わってほしいのでは…?

よく考えたらそうだ。今は、
訪問日を入れる→請求方法を選択する ならば請求日は変わるが、
請求方法を選択する→訪問日を入れる では請求日は変化しない。

だとすれば簡単。訪問日今回のchangeイベントを追記するだけだ。

完成形

(function () {
“use strict”;
kintone.events.on([‘app.record.create.submit’,
‘app.record.edit.submit’,
‘app.record.create.change.請求方法’,
‘app.record.edit.change.請求方法’,’app.record.edit.change.訪問日今回’,’app.record.edit.change.訪問日今回’], function(event) {
var record = event.record;
var 訪問日今回 = record.訪問日今回.value;
var 請求方法= record.請求方法.value;
var 来月初 = moment(訪問日今回).add(1, ‘month’).startOf(‘month’).format(“YYYY-MM-DD”);
var 来月末 = moment(訪問日今回).add(1, ‘month’).endOf(‘month’).format(“YYYY-MM-DD”);
if (請求方法 === “振替” ){
record.請求日.value=moment(来月初).add(26, ‘day’).format(“YYYY-MM-DD”);
}else if (請求方法 === “振込” ){
record.請求日.value=来月末;
}else if (請求方法 === “集金” ){
record.請求日.value=””;
}else if (請求方法 === “未選択” ){
record.請求日.value=””;
}
return event;
});
})();