年次ごとの自動採番を行うワザ

リンク: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

またく同じなのに「コードをコードする」、上手く動かないです。

ご指定の程よろしくお願いいたします。

 

ソースコード挿入。

/*
* 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) + ‘-’ + autono.substring(autono.length - 5);
event.record[‘再自動採番’].value = autono;

// 対象レコードがなかった場合
} else {
event.record[‘再自動採番’].value = dt.substring(2, 4) + ‘-00001’;
}
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;
});

})();

 

誰かいますか?

同じコードを適用したところ、正しく採番されました。
アプリのフィールドは以下の2つだけです。
①フィールド名:日付、フィールドコード:日付
②フィールド名:再自動採番、フィールドコード:再自動採番

エラーが表示されないのであれば、デバッグしてみてはいかがでしょうか。
https://developer.cybozu.io/hc/ja/articles/360038920252-kintoneカスタマイズの基本的なデバッグの流れを身につけよう#case-no-error

hi Ryoji,

再自動採番なんですが、新しいレコードを作成するたびに、いつも値20-00001であるため、このコードと重複しています。どこで修正すればよいかわかりませんか?

Return event のエラーでございます。

 

 

最後、ありがとうございます。

35行目を以下のとおり変更したらどうですか
autono = dt.substring(2, 4) + ‘-’ + autono.substring(autono.length - 5)

autono = dt.substring(2, 4) + ‘-’ + autono.substring(-5)

hi Ryoji,

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

提供したコードデモ、まだ動かないと思いますので、なんか、おかしいですね。

32行目実行後のautonoは20-00001で正しいですか。
一度20-00NaNが登録されてしまうと常に20-00NaNのレコードを取得してしまうと思います。

想定するautonoの中身
32行目実行後:20-00NaN
35行目実行後:20-00001

なお、20-00NaNが取れているのであれば20-00NaNのレコードを削除すれば解決すると思います。
35行目はもとに戻してください。間違ってしました。

hi Ryoji,

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

マジで動きました、質問なんですが、「20-00NaNが取れているのであれば20-00NaNのレコードを削除すれば解決すると思います。」どこから判明しますか?

limit 1 の条件を外して取得した結果を見るとわかります。
20-00001より20-00NaNの大きいため、20-00NaNがあると常に20-00NaNが先頭になります。

20-00NaN のほう大きくか。分かりました。だからね。助かりました。ありがとうございました。

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。