いつもお世話になっております。
レコード追加の保存前に[入手物件番号]の自動採番を行う処理をJavaScriptで実現しようと試みております。
テスト内容:[入手年月日]に日付を入力、[入手物件番号]には何も入力せず、「保存」ボタンをクリックする。
実行結果:
入手物件番号=[undefined]
入手物件番号=[undefined]、入手物件番号が未入力なので自動採番します
date=2016-06-03
が順番に画面表示されますが、その後、次のメッセージ表示がされず、処理が停止している感じがします。
どうやら、getFullYear関数で、[入手年月日]から年だけを取り出して、後で採番時に利用しようと考えていますが、ここで処理が止まっているようです。
いろんなサイトを見てみましたが、解決できませんでした。
環境は、Windows7 SP1+InternetExplorer11 です。Google Chrome でも同様でした。
以降のプログラムにもバグが存在すると思いますが、最初でつまずいており、まずは本件の解決方法をご教示いただければ幸いです。
プログラムを記載いたします。
/*
* 入手物件番号の自動採番
*
*入手物件番号の書式を「yyyy-xxxx」とする。(yyyyは西暦4桁)
*年度切替を1月とする
*年度切替時に見積番号の枝番を0001から始める
*
*ライブラリ「Moment.js」を利用
*/
(function() {
“use strict”;
// 新規作成画面から保存時のイベント
// レコード追加の保存前に[入手物件番号]の自動採番を行う
var eventSubmit = [‘app.record.create.submit’];
kintone.events.on(eventSubmit, function(event) {
var record = event.record; // 保存前の画面上のレコード
var m = moment();
var appId = kintone.app.getId(); // アプリIDを取得する
var maxNum = 0; //入手物件番号の枝番の最大値
window.alert(“入手物件番号=[” + record[‘入手物件番号’].value + " ]"); //■ここは問題なく表示される
// No が空白である場合に処理する
if (record[‘入手物件番号’].value === undefined) {
window.alert(“入手物件番号=[” + record[‘入手物件番号’].value + " ]、入手物件番号が未入力なので自動採番します"); //■ここは問題なく表示される
var mydate = record[‘入手年月日’].value;
window.alert(“date=” + mydate); //■ここは問題なく表示される
var myyear = mydate.getFullYear(); //[入手年月日]の西暦4桁を取得する
window.alert(“myyear=” + myyear); //■■←ここの表示がされずに画面が変わらない。処理が停止している感じがする。
//最新の入手物件番号を取得するためのURLを生成
var sch = myyear + “-”;
window.alert(“sch=” + sch);
var tmpNo = 0;
window.alert(“tmpNo=” + tmpNo);
//入手物件番号の最大値を取得するクエリ
var query_string = ‘入手物件番号 like "’ + sch + ‘" order by 入手物件番号 desc limit 1&fields[0]=$id’;
window.alert(“query_string=” + query_string);
var apiUrl = kintone.api.url(‘/k/v1/records’, true) + ‘?app=’ + appId + ‘&query=’ + encodeURI(query_string);
window.alert(“apiUrl=” + apiUrl);
//var xmlHttp;
var xmlHttp = new XMLHttpRequest();
// 同期リクエストを行う
xmlHttp.open(“GET”, apiUrl, false);
xmlHttp.setRequestHeader(‘X-Requested-With’,‘XMLHttpRequest’);
xmlHttp.send(null);
if (xmlHttp.status == 200){
if(window.JSON){
var obj = JSON.parse(xmlHttp.responseText);
tmpNo = obj.records[0][‘入手物件番号’].value.split(“-”); //入手物件番号を-で区切る(年度と入手物件番号を分ける)→「-」で分離
window.alert(“tmpNo=” + tmpNo);
maxNum = parseInt(tmpNo[1]); //最後の数字(枝番)を取得
window.alert(“maxNum=” + maxNum);
}else{
maxNum = 0; //データが存在しない ==> 新年度なので枝番を初期化
}
if (maxNum === null) {
event.record[‘入手物件番号’].error = ‘入手物件番号が取得できませんでした’;
return event;
} else {
var num = parseInt(maxNum) + 1; //最新の入手物件番号を発番
event.record[‘入手物件番号’].value = myyear + “-” + (‘0000’ + num).slice(-4); // 発番した入手物件番号を設定する
}
} else{
event.record[‘入手物件番号’].error = xmlHttp.statusText;
}
} else {
window.alert(“入手物件番号=[” + record[‘入手物件番号’].value + " ]が既に入力済なので自動採番せず、そのままの番号で登録します");
}
return event;
});
})();