app.record.edit.change.<フィールドコード>にて対象フィールドを変更した場合

まだ勉強し始めたばかりの初心者です。

文字列(1行)フィールドに「R020528」形式で和暦が入力されたタイミングで、同フィールドを「令和2年5月28日」に書き換えたいのですが、動作としては期待通りになりましたが、イベントの対象フィールドを書き換えているため、また’app.record.edit.change.<フィールドコード>’のイベントが発生してしまっているようです。

とりあえず、条件文で2回目を回避していますが、根本的な解決方法がわかりません。

ご教示のほどよろしくお願い致します。


(function () {
“use strict”;

var events = [‘app.record.create.change.wareki_birth’,
‘app.record.edit.change.wareki_birth’];
//‘app.record.create.submit’,
// ‘app.record.edit.submit’,

kintone.events.on(events, function (event){
var record = event.record;
//和暦を取り出す
var wareki = record[‘wareki_birth’].value;
//alert(wareki);
var nengo = wareki.substr(0,1);
var wYear = parseInt(wareki.substr(1,2));
var wMonth = parseInt(wareki.substr(3,2));
var wDay = parseInt(wareki.substr(5,2));
var sYear = 0;

//エラー回避
if(nengo === “令” || nengo === “平” || (nengo === “昭”) || (nengo === “大”) || (nengo === “明”)){

return event;
}
//和暦を西暦に変換
//alert(nengo);
if(((nengo === “R”) || (nengo === “r”)) && (wYear > 0)) {
sYear = wYear + 2018;
var nengo_kanji = “令和”;
} else if (((nengo === “H”) || (nengo === “h”)) && (wYear > 0) && (wYear <= 31)){
sYear = wYear + 1988;
nengo_kanji = “平成”;
} else if (((nengo === “S”) || (nengo == “s”)) && (wYear > 0) && (wYear <= 64)){
sYear = wYear + 1925;
nengo_kanji = “昭和”;
} else if (((nengo === “T”) || (nengo === “t”)) && (wYear > 0) && (wYear <= 15)){
sYear = wYear + 1911;
nengo_kanji = “大正”;
} else if (((nengo === “M”) || (nengo === “m”)) && (wYear) > 0 && (wYear <= 45)){
sYear = wYear + 1867;
nengo_kanji = “明治”;
} else{
alert(‘指定の和暦年は存在しません’);
return event;
}
//alert(nengo_kanji);

//和暦を令和〇年〇月〇日にフォーマット
var wDate = nengo_kanji + wYear + “年” + (wMonth) + “月” + wDay + “日” ;
record[‘wareki_birth’].value = wDate;
//alert(wDate);
//西暦に
var sDate = moment([sYear, wMonth-1, wDay]);
record[‘sei_birth’].value = sDate.format(‘YYYY-MM-DD’);
//alert(sDate);

return event;

});

})();

tade様

お世話になっております.
トヨクモの江田と申します.

解決方法として正しいと思いますよ.
強いて言うなら,正規表現を使うとすっきり書けるかもしれません.

if(!/^[rhstm]\d{6}$/.test(wareki.toLowerCase())) return;

まだまだ知識不足で、正規表現をよく理解しておりませんでしたので、

とても勉強になりました。

ありがとうございました。