年次ごとの自動採番を行うワザ のソースコードを参考にして、次の矢印左の採番フォーマットにアルファベットを導入して、矢印右のフォーマットに変更することは可能でしょうか?
日付が2014-04-20の場合
- 14-00001,14-00002,14-00003 → 14-S00001,14-S00002,14-S00003
年次ごとの自動採番を行うワザ のソースコードを参考にして、次の矢印左の採番フォーマットにアルファベットを導入して、矢印右のフォーマットに変更することは可能でしょうか?
日付が2014-04-20の場合
(追記)
年次ごとの自動採番を行うワザ のソースコードを参考にして、採番フォーマットの初期値を16-S00001に変更して、次のソースコードを作成したのですが、16-S00001の次を追加したら、16-S00NaNとなり、その次を追加したら、値が他のレコードと重複して追加できなくなります(自動採番フィールドの"値の重複を禁止する"にチェックが入っている場合のみ)。
/*
* Copyright (c) 2016 Cybozu
* Licensed under the MIT License
*/
(function() {
“use strict”;
function autoNum(event) {
var record = event.record;
// 日付を取得し、2桁の年を取得する
var dt = record[‘日付’].value;
var dtyy = dt.substring(0, 4);
var dtmin = dtyy + ‘-01-01’;
var dtmax = (parseInt(dtyy, 10) + 1) + ‘-01-01’;
// クエリ文の設定
var query = {
“app”: kintone.app.getId(),
“query”: ‘日付 >= "’ + dtmin + ‘" and 日付 < "’ + dtmax + ‘" order by 自動採番 desc limit 1’
};
// 設定された日付から最新の番号を取得する
return kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’, query).then(function(resp) {
var records = resp.records;
// 対象レコードがあった場合
if (records.length > 0) {
var rec = records[0];
var autono = rec[‘自動採番’].value;
autono = parseInt(autono.substring(3), 10) + 1;
autono = ‘00000’ + autono;
autono = dt.substring(2, 4) + ‘-S’ + autono.substring(autono.length - 5);
event.record[‘自動採番’].value = autono;
// 対象レコードがなかった場合
} else {
event.record[‘自動採番’].value = dt.substring(2, 4) + ‘-S00001’;
}
return event;
}).catch(function(e) {
alert("レコードの取得でエラーが発生しました - error: " + e.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[‘自動採番’].disabled = true;
return event;
});
// 編集画面表示
kintone.events.on([‘app.record.edit.show’, ‘app.record.index.edit.show’], function(event) {
var record = event.record;
//フィールドを非活性にする
record[‘自動採番’].disabled = true;
record[‘日付’].disabled = true;
return event;
});
})();
ao1962さん
autono = parseInt(autono.substring(3), 10) + 1;
多分ここかと思います。
autono.substring(3) だと、Sまで含んだ文字列になるので、数値に変換できず、ここから先がエラー扱いになるのかと。
autono = parseInt(autono.substring(4), 10) + 1;
にすれば、いけそうな気がします。