またく同じなのに「コードをコードする」、上手く動かないです。
ご指定の程よろしくお願いいたします。
またく同じなのに「コードをコードする」、上手く動かないです。
ご指定の程よろしくお願いいたします。
ソースコード挿入。
/*
* 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 日が経過したので自動的にクローズされました。新たに返信することはできません。