新規投稿
フォローする

自動採番におけるNaN表示

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

下記リンクを参考に、作成日からsetsumeiというフィールドに自動採番を行おうと考えております。

https://developer.cybozu.io/hc/ja/articles/201235480-%E5%B9%B4%E6%AC%A1%E3%81%94%E3%81%A8%E3%81%AE%E8%87%AA%E5%8B%95%E6%8E%A1%E7%95%AA%E3%82%92%E8%A1%8C%E3%81%86%E3%83%AF%E3%82%B6

 

他のアプリでは問題なかったのですが、なぜか特定のアプリでのみ挙動が異なっております。

最終的には(TU:固有文字列)+YYMM+- +00001といった形で作る予定なのですが、

該当のアプリのみ

1件目のレコードでは TU2107-00NaN

2件目のレコードでは TU2107-00001

それ以降はTU2107-00001で固定されてしまいます。

他のアプリではきちんと+1されていくのですが…

エラー表示もない為どう対応していいのか判断が付きません。

アドバイス頂けないでしょうか、よろしくお願いいたします。

 

(function() {
"use strict";

function autoNum(event) {
var record = event.record;

// 年と月を取得し、YYMMを取得する
var dt = new Date();
var dtyy = dt.getFullYear();
var dtmm = dt.getMonth() + 1;
var dtmin = dtyy + '-01-01';
var dtmax = (parseInt(dtyy, 10) + 1) + '-01-01';
var dty = dtyy - 2000;
if(dtmm >= 1 && dtmm <= 3){ // 4月年度始めに対応
dty = dty - 1;
}
if(dtmm >= 1 && dtmm < 10){ //月を2桁表示
dtmm = "0" + dtmm;
}
var dtymm = "" + dty + dtmm;

// クエリ文の設定 レコードの作成日基準
var query = {
"app": kintone.app.getId(),
"query": 'CreatedDate >= "' + dtmin + '" and CreatedDate < "' + dtmax + '" order by setsumei desc limit 1'
};

// 設定された日付から最新の番号を取得する
return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', query).then(function(resp) {
var records = resp.records;

// 対象レコードがあった場合 TU2107-00001が完成形
if (records.length > 0) {
var rec = records[0];
var autono = rec.setsumei.value;
autono = parseInt(autono.substring(7), 10) + 1;
autono = '00000' + autono;
autono = "TU" + dtymm + '-' + autono.substring(autono.length - 5);
event.record.setsumei.value = autono;

// 対象レコードがなかった場合
} else {
event.record.setsumei.value = "TU" + dtymm + "-" + `00001`;
}
return event;
}).catch(function(event) {
alert("レコードの取得でエラーが発生しました - error: " + event.message);
return false;
});
}

//新規作成画面の保存
kintone.events.on('app.record.create.submit', autoNum);


// 新規作成画面表示
kintone.events.on('app.record.create.show', function(event) {
var record = event.record;
//フィールドを非活性にする
record.setsumei.disabled = true;
return event;
});

// 編集画面表示
kintone.events.on(['app.record.edit.show', 'app.record.index.edit.show'], function(event) {
var record = event.record;
//フィールドを非活性にする
record.setsumei.disabled = true;
return event;
});

})();

0

3件のコメント

Avatar
村濱一樹

NaN(Not a Number)になってしまうということで、parseIntあたりで数字に変換できない状態になってるんじゃないかなーとおもいます

一度、ここらでブレークポイントをはり、中身がどうなっているのかみるのはどうでしょう?↓

var autono = rec.setsumei.value;
autono = parseInt(autono.substring(7), 10) + 1;

村濱一樹により編集されました
0
Avatar
Tofu

村濱一樹様

お世話になります、ありがとうございます。

ブレークポイントで止めてみましたが既にNaNでした。

レコードがない場合(record.length > 0)と最初に設定しているのですが、

採番済みのレコードがあると認識されてしまうのでしょうか?

一応実行前に採番済みのものは一度消して実施しているのですが…

よろしくお願いいたします。

0
Avatar
Tofu

村濱一樹様

お世話になります。

きちんと全レコードを削除して作り直したところ解決できました。

一部残していたレコードには採番がなかったので、NaNとして取得

してしまっていたようです。

クエリか何かでその辺制限が出来そうでしたが、今回は削除で解決

出来ました。

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

0
サインインしてコメントを残してください。