KINTONEのバグではないかと思っておりますが、どうしても以下のエラー処理が上手くいかなかったので質問します。
日付の項目と文字列_1行_の項目の組み合わせでエラー処理をしております。
例えば「通常、月末締め」の場合、案件開始日が1日、案件終了日が月末でないとエラー処理をするようにしております。
一度上記のような問題ないレコードを登録し、次にエラー処理となるよう(例えば案件終了日を14日にする)変更して登録しようとすると最初は問題なく登録できてしまいます。
ですが、
その後すぐレコード編集ボタンを押す
↓
何も修正せずに保存ボタンを押す
とやるときちんとエラー処理をしてくれます。
調査してわかったことは日付を過去に変更すると上記現象が起きますが、未来に変更するとこの現象が起きません。
例:案件終了日を14日から10日に変更して登録すると最初は問題なく登録可能。ですが案件終了日を14日から17日に変更するときちんとエラー処理をしてくれます。
developerツールで追跡すると、きちんとエラーの処理をしてreturnまでいってますが、その後何か内部的なエラーが起きているようです。
ご意見お願いします。
(function() {
"use strict";
const SUBMIT =
['app.record.create.submit',
'app.record.edit.submit',
'app.record.index.edit.submit'];
const ANKEN_ID_DEV = 206;
const ANKEN_ID_PRD = 151;
let thisAppId = kintone.app.getId();
kintone.events.on(SUBMIT, async event=>{
var record = event.record;
var start = record.案件開始日.value;
var end = record.案件終了日.value;
var startDate = new Date(start);
var endDate = new Date(end);
try {
await check2(event);
await check3(event);
await check4(event);
await check5(event);
await check6(event);
} catch (e) {
// e {
// code: エラー部分のフィールドコード
// mainTxt: フィールドコードのエラーに入れるテキスト
// subTxt: eventオブジェクトのエラーに入れるテキスト
// };
var fCode = e.code;
record[fCode]['error'] = e.mainTxt;
event.error = e.subTxt;
return event;
}
});
//-------------------------------------------------------------------------------------
//check-2 登録種別とその開始日終了日が合っているかを判定。
//①(通常、月末締め)、②(通常、20日締め)、③(日割り、月末締め)、④(日割り、20日締め)
//-------------------------------------------------------------------------------------
function check2(event){
var record = event.record;
var start = record.案件開始日.value;
var end = record.案件終了日.value;
var type = record.登録種別.value;
var shimebi = record.締め日.value;
var startDate = new Date(start);
var startYear = startDate.getFullYear();
var startMonth = startDate.getMonth()+1;
var startDay = startDate.getDate();
var endDate = new Date(end);
var endYear = endDate.getFullYear();
var endMonth = endDate.getMonth()+1;
var endDay = endDate.getDate();
var lDay = new Date(endYear,endMonth,0);//終了日から月末の日付を取得
var lastDay = lDay.getDate();
var errObj = new Object();
if(type ==="通常"){
console.log("通常");
if(shimebi === "月末締め"){//①(通常、月末締め)
console.log("月末締め");
if(startDay !== 1 ){
errObj.code = "案件開始日";
errObj.mainTxt = "開始日が正しくありません。日割りで登録してください。";
errObj.subTxt = "案件開始日";
throw errObj;
}
if(endDay !==lastDay){
errObj.code = "案件終了日";
errObj.mainTxt = "終了日が正しくありません。日割りで登録してください。";
errObj.subTxt = "案件終了日";
throw errObj;
}
}
else if(shimebi === "20日締め"){//②(通常、20日締め)
console.log("20日締め");
if(startDay !== 21 ){
errObj.code = "案件開始日";
errObj.mainTxt = "開始日が正しくありません。日割りで登録してください。";
errObj.subTxt = "案件開始日";
throw errObj;
}
if(endDay !==20){
errObj.code = "案件終了日";
errObj.mainTxt = "終了日が正しくありません。日割りで登録してください。";
errObj.subTxt = "案件終了日";
throw errObj;
}
}
}
else if(type ==="日割り"){
console.log("日割り");
if(endMonth - startMonth >= 2){
errObj.code = "登録種別";
errObj.mainTxt = "期間は1カ月以内にして下さい。";
errObj.subTxt = "登録種別";
throw errObj;
}
if(shimebi === "月末締め"){//③(日割り、月末締め)
console.log("月末締め");
if(startMonth !== endMonth){
errObj.code = "登録種別";
errObj.mainTxt = "同月内の期間になってません。案件登録方法を確認して下さい。";
errObj.subTxt = "登録種別";
throw errObj;
}
else if(startDay === 1 && endDay === lastDay){
errObj.code = "登録種別";
errObj.mainTxt = "案件種別を通常として登録して下さい。";
errObj.subTxt = "登録種別";
throw errObj;
}
}
else if(shimebi === "20日締め"){//④(日割り、20日締め)
console.log("20日締め");
if(startDay === 21 && endDay === 20){
errObj.code = "登録種別";
errObj.mainTxt = "案件種別を通常として登録して下さい。";
errObj.subTxt = "登録種別";
throw errObj;
}
else if(startMonth === endMonth){
if(startDay >= 21 && endDay < startDay){
errObj.code = "案件終了日";
errObj.mainTxt = "終了日が正しくありません。";
errObj.subTxt = "案件終了日";
throw errObj;
}
else if(startDay <= 20 && endDay >= 21){
errObj.code = "登録種別";
errObj.mainTxt = "案件登録を2回に分けて下さい。";
errObj.subTxt = "登録種別";
throw errObj;
}
}
else if(startMonth !== endMonth){
if(startDay <= 20){
errObj.code = "案件開始日";
errObj.mainTxt = "開始日が正しくありません。";
errObj.subTxt = "案件開始日";
throw errObj;
}
else if(startDay >=21 && endDay >=21){
errObj.code = "案件終了日";
errObj.mainTxt = "終了日が正しくありません。";
errObj.subTxt = "案件終了日";
throw errObj;
}
}
}
}
}