自動採番を行う処理でgetFullYear関数がうまく動作しない件

いつもお世話になっております。

レコード追加の保存前に[入手物件番号]の自動採番を行う処理を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;
    });
})();

 

teraさん

原因と思われる部分のみコメントしますが、

var mydate = record['入手年月日'].value;

var myyear = mydate.getFullYear();

var mydate = new Date();

var myyear = mydate.getFullYear();

 

にすると、多分きちんと動作します。

getFullYearの引数が’yyyy-mm-dd’ではだめなのかもしれません。

teraさん

アイティー・プラス・ワンの星野です。

 原因としましては

var mydate = record['入手年月日'].value;

この時点では mydate に入手年月日が、文字列型で代入されます。

文字列型に対して、getFullYear()は利用することができません。

日付形式を利用する際はMoment.jsが便利ですよ。

今回のようなケースに対応できるかと思います。
ここを参考にしてみてはいかがでしょうか?

実際にMoment.jsを利用した場合はこのような記述で対応できるかと。

var mydate = record['入手年月日'].value;
var myyear = moment(new Date(mydate)).format('YYYY');

以上です、参考になりましたでしょうか。

松村様、星野様 早速のコメントありがとうございます。

var mydate = record[‘入手年月日’].value;
この時点では mydate に入手年月日が、文字列型で代入されます。
文字列型に対して、getFullYear()は利用することができません。

丁寧なご指摘ありがとうござます。初心者のためイロハの部分から勉強しなければなりません。
Moment.jsを利用した方法でうまく動作することができました。

今後ともよろしくお願いいたします。