採番について、質問お願い致します。 部門(A.B.C)ドロップダウン 店舗(1.2)ルックアップ 上記の選択によって、例として
部門A、店舗1の選択をしたレコード1の場合「1-A1000」
部門B、店舗2の選択をしたレコード2の場合「2-B1000」
部門A、店舗2の選択をしたレコード3の場合「2-A1000」
部門A、店舗1の選択をしたレコード4の場合「1-A1001」
といった2つの条件別による連番で採番したいのですが(伝え方難しくて伝わらなかったらスミマセン)、方法ありますかね?
gsc-hnd-dadさん
こんにちは。下記はいかがでしょうか。
(function() {
'use strict';
// レコード追加画面保存時
var events = ['app.record.create.submit'];
kintone.events.on(events, function(event) {
var record = event.record;
var body = {
'app': event.appId,
'query': '部門 in ("' + record.部門.value + '") and 店舗 = "' + record.店舗.value + '" order by 識別数字 desc limit 1',
'fields': ['識別番号', '識別数字']
};
return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body).then(function(resp) {
if (resp.records.length == 0) {
// 採番(1番目)
record.識別数字.value = 1000;
record.識別番号.value = record.店舗.value + '-' + record.部門.value + 1000;
} else {
// 採番(2番目以降)
var myId = Number(resp.records[0].識別数字.value) + 1;
record.識別数字.value = myId;
record.識別番号.value = record.店舗.value + '-' + record.部門.value + myId;
}
return event;
}).catch(function(error) {
console.log(error);
});
});
})();
採番されるフィールドを「識別番号」(文字列1行)としています。
GET時に現在の最終番号を取得(order by 識別数字 desc limit 1)するため、別途、連番部分を数値で保持しておく必要があります。
ここでは、「識別数字」(数値)というフィールドを設けています。
※文字列の場合、仮に連番が10000に到達した際、文字コードで9999 > 10000となるため、10001が発番されません。
識別番号は、上記例のようにコード内で更新する他に、文字列1行フィールドの自動計算を使用しても良いと思います。
自動計算式 : 店舗 & “-” & 部門 & 識別数字
早速のご回答ありがとうございます。
動作確認致しました。
しかしながら、上記"店舗"ルックアップにて1番目の選択の時は"1000"の値がついたのですが、2番目選択肢の時"1"となってしまったのは何か考えれる要因ありますでしょうか。
gsc-hnd-dadさん
フィールドの種類は、下記のようになってますでしょうか。
部門:ドロップダウン
店舗:ルックアップ(参照元アプリでは数値)
識別番号:文字列1行
期別数字:数値
また、今回登録されたレコード以外に、同アプリ内にはレコードが無い(部門と店舗の組合せが同じレコードは無い)状態でしょうか。
部門:ドロップダウン(5項目)
店舗:ルックアップ(文字列)
識別番号:文字列1行
期別数字:数値
となっております。また、同アプリ内において、現状はテストレコード含め数レコード(複数組み合わせ)がある状態です。
gsc-hnd-dadさん
期別数字→識別数字の誤記でした。ただ、フィールドは問題ないようです。
アプリ設定内の「アプリの動作テスト」内でテスト実行しているということもないでしょうか。
また、差し支えないようでしたら、今回設定した部分のコードを貼り付けていただくこと可能でしょうか。
何かわかるかもしれません。
gsc-hnd-dadさん
もう1点補足です。
既存レコードの中で、識別数字が空欄のものがあると、識別数字が「1」になるかもしれません。
■既存レコード
部門:A、店舗:2、識別数字:空欄
■新規レコード
部門:A、店舗:1で登録 → 識別数字:1000 になる。
部門:A、店舗:2で登録 → 識別数字:1 になる。
クエリを下記のようにしても良いかもしれません。識別数字が空欄のものを除外できます。
'query':'識別数字 != "" and 部門 in ("'+ record.部門.value +'") and 店舗 = "'+ record.店舗.value +'" order by 識別数字 desc limit 1',