changeイベントで、時刻のフィールド4つの最小値を、別のフィールドに表示するカスタマイズを入れたいです。
モバイルのコントロールは、時、分のそれぞれにchangeイベントが発火し、時間だけ入力した場合、eventの入力値は、undifinedになって、他のフィールドの値を変えて、return eventを行うと、画面では入力値がクリアされてしまいます。
時間だけ、または分だけ入力した状態だと、画面では「時刻の形式が不正です」のメッセージがでているので、isValidの判定後、changeイベントが発生していると思いますが、changeイベント内で、時間だけ、または分だけの入力値か、isValidの判定を取得する方法はありますか?
ソース内の、
//ToDo 時:分ともクリアされた場合もundefinedになるが、その場合は、先のロジックを通したい
以下で、エラー値の場合は、returnするようにしたいです。
宜しくお願い致します。
(() => {
'use strict';
// 制御に利用するフィールドコード
const leaveTimeFieldCode = '出発時刻1';
const leaveTimeFieldCode2 = '出発時刻2';
const leaveTimeFieldCode3 = '出発時刻3';
const leaveTimeFieldCode4 = '出発時刻4';
const returnTimeFieldCode = '帰社時刻1';
const returnTimeFieldCode2 = '帰社時刻2';
const returnTimeFieldCode3 = '帰社時刻3';
const returnTimeFieldCode4 = '帰社時刻4';
kintone.events.on([
`mobile.app.record.create.change.${leaveTimeFieldCode}`,
`mobile.app.record.create.change.${leaveTimeFieldCode2}`,
`mobile.app.record.create.change.${leaveTimeFieldCode3}`,
`mobile.app.record.create.change.${leaveTimeFieldCode4}`,
`mobile.app.record.edit.change.${leaveTimeFieldCode}`,
`mobile.app.record.edit.change.${leaveTimeFieldCode2}`,
`mobile.app.record.edit.change.${leaveTimeFieldCode3}`,
`mobile.app.record.edit.change.${leaveTimeFieldCode4}`
], (event) => {
const record = event.record;
//changeイベントで、入力値がundefinedの場合は、return
//時間だけ、分だけ入力した時、値がクリアされるため
const eventType = event.type; // mobile.app.record.create(edit).change.フィールド名
const fieldIndex = eventType.lastIndexOf('.');
const eventField = eventType.substring(fieldIndex + 1); // changeイベントで変更された項目
const eventFieldValue = record[eventField].value;
//ToDo 時:分ともクリアされた場合もundefinedになるが、その場合は、先のロジックを通したい
if (eventFieldValue == undefined) return;
// 「出発時刻」最小値
const leaveTimeValues = [];
const leaveTimeVal1 = record[leaveTimeFieldCode].value;
if (leaveTimeVal1 !== undefined && leaveTimeVal1 !== "") {
leaveTimeValues.push(leaveTimeVal1);
}
const leaveTimeVal2 = record[leaveTimeFieldCode2].value;
if (leaveTimeVal2 !== undefined && leaveTimeVal2 !== "") {
leaveTimeValues.push(leaveTimeVal2);
}
const leaveTimeVal3 = record[leaveTimeFieldCode3].value;
if (leaveTimeVal3 !== undefined && leaveTimeVal3 !== "") {
leaveTimeValues.push(leaveTimeVal3);
}
const leaveTimeVal4 = record[leaveTimeFieldCode4].value;
if (leaveTimeVal4 !== undefined && leaveTimeVal4 !== "") {
leaveTimeValues.push(leaveTimeVal4);
}
if (leaveTimeValues.length == 0) {
record.出発時刻最小.value = "";
} else {
// 入力値
const inputLeaveTime = record.出発時刻最小.value;
const minValue = leaveTimeValues.sort()[0];
if (!inputLeaveTime) {
//出発時刻未入力 ← 明細の最小値
record.出発時刻最小.value = minValue;
} else if (minValue < inputLeaveTime) {
//明細の最小値 < 出発時刻 の場合、明細の最小値
record.出発時刻最小.value = minValue;
}
}
return event;
});
})();