# 年度別の自動採番について

**URL:** <https://community.cybozu.dev/t/topic/9295>\
**Category:** kintone 開発相談\
**Created:** [2024 年 7 月 18 日午前 6:45 UTC](https://community.cybozu.dev/t/topic/9295 "2024-07-18T06:45:23Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Michi](https://avatars.discourse-cdn.com/v4/letter/m/c37758/32.png) [@Michi](https://community.cybozu.dev/u/Michi)\
**Post date:** [2024 年 7 月 18 日午前 6:45 UTC](https://community.cybozu.dev/t/topic/9295/1 "2024-07-18T06:45:23Z")

</div>

見積アプリを作成し、「日付」フィールドと「自動採番」（文字列フィールド）を作成し、下記のコードをuploadしましたが、自動採番が空欄のまま保存されます。  
レコード作成は動作していますが、肝心の自動採番がされていません。  
本来は、年度ごとに番号をリセットしたく、4月～3月を1年として運用希望です。  
カスタマイズする前に、コードそのままで動作確認したところ、採番されなかったためご教示いただけないでしょうか。

/\*

- Copyright (c) 2016 Cybozu
- Licensed under the MIT License
- [https://opensource.org/license/mit/](https://opensource.org/license/mit/)  
\*/

(() =\> {  
‘use strict’;

const autoNum = (event) =\> {  
const record = event.record;

```
// 日付を取得し、2桁の年を取得する
const dt = record['日付'].value;
const dtyy = dt.substring(0, 4);
const dtmin = `${dtyy}-01-01`;
const dtmax = `${(parseInt(dtyy, 10) + 1)}-01-01`;

// クエリ文の設定
const 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((resp) => {
  const records = resp.records;

  // 対象レコードがあった場合
  if (records.length > 0) {
    const rec = records[0];
    let autono = rec['自動採番'].value;
    autono = parseInt(autono.substring(3), 10) + 1;
    autono = `0000${autono}`;
    autono = `${dt.substring(2, 4)}-${autono.substring(autono.length - 5)}`;
    event.record['自動採番'].value = autono;

    // 対象レコードがなかった場合
  } else {
    event.record['自動採番'].value = `${dt.substring(2, 4)}-0001`;
  }
  return event;
}).catch((e) => {
  alert(`レコードの取得でエラーが発生しました - error: ${e.message}`);
  return false;
});

```

};

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

// 新規作成画面表示  
kintone.events.on(‘app.record.create.show’, (event) =\> {  
const record = event.record;  
// フィールドを非活性にする  
record[‘自動採番’].disabled = true;  
return event;  
});

// 編集画面表示  
kintone.events.on([‘app.record.edit.show’, ‘app.record.index.edit.show’], (event) =\> {  
const record = event.record;  
// フィールドを非活性にする  
record[‘自動採番’].disabled = false;  
record[‘日付’].disabled = true;  
return event;  
});

})();

---

<div class="post-metadata">

**Author:** ![Michi](https://avatars.discourse-cdn.com/v4/letter/m/c37758/32.png) [@Michi](https://community.cybozu.dev/u/Michi)\
**Post date:** [2024 年 7 月 19 日午前 12:40 UTC](https://community.cybozu.dev/t/topic/9295/2 "2024-07-19T00:40:55Z")

</div>

[自動採番プラグイン - cybozu developer network](https://cybozu.dev/ja/kintone/tips/development/plugins/sample-plugin/autonum-plugin/#attention)

こちらのプラグインを使用しても、レコード保存はできますが採番されずに採番結果を表示するフィールド（フィールド名：自動採番）は空欄のままです。  
原因がわからず大変困っています。  
kintone・Javaともに初心者です。お詳しい方、どうかご教示願います。

---

<div class="post-metadata">

**Author:** ![pomo](https://sea1.discourse-cdn.com/flex015/user_avatar/community.cybozu.dev/pomo/32/465_2.png) [@pomo](https://community.cybozu.dev/u/pomo)\
**Post date:** [2024 年 7 月 19 日午前 2:41 UTC](https://community.cybozu.dev/t/topic/9295/3 "2024-07-19T02:41:36Z")

</div>

同期的にするためにasync/awaitを付与するとどうでしょうか？  
const autoNum = async (event: any) ~  
return await kintone.api( ~

に付与しました

```javascript
(() => {
	"use strict";
	const autoNum = async (event: any) => {
		const record = event.record;

		// 日付を取得し、2桁の年を取得する
		const dt = record['日付'].value;
		const dtyy = dt.substring(0, 4);
		const dtmin = `${dtyy}-01-01`;
		const dtmax = `${(parseInt(dtyy, 10) + 1)}-01-01`;

		// クエリ文の設定
		const query = {
			app: kintone.app.getId(),
			query: `日付 >= "${dtmin}" and 日付 < "${dtmax}" order by 自動採番 desc limit 1`
		};

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

			// 対象レコードがあった場合
			if (records.length > 0) {
				const rec = records[0];
				let autono = rec['自動採番'].value;
				autono = parseInt(autono.substring(3), 10) + 1;
				autono = `0000${autono}`;
				autono = `${dt.substring(2, 4)}-${autono.substring(autono.length - 5)}`;
				event.record['自動採番'].value = autono;

				// 対象レコードがなかった場合
			} else {
				event.record['自動採番'].value = `${dt.substring(2, 4)}-0001`;
			}
			return event;
		}).catch((e) => {
			alert(`レコードの取得でエラーが発生しました - error: ${e.message}`);
			return false;
		});
	};

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

	// 新規作成画面表示
	kintone.events.on("app.record.create.show", (event) => {
		const record = event.record;
		// フィールドを非活性にする
		record["自動採番"].disabled = true;
		return event;
	});

	// 編集画面表示
	kintone.events.on(["app.record.edit.show", "app.record.index.edit.show"], (event) => {
		const record = event.record;
		// フィールドを非活性にする
		record["自動採番"].disabled = false;
		record["日付"].disabled = true;
		return event;
	});

})();

```

---

<div class="post-metadata">

**Author:** ![Michi](https://avatars.discourse-cdn.com/v4/letter/m/c37758/32.png) [@Michi](https://community.cybozu.dev/u/Michi)\
**Post date:** [2024 年 7 月 19 日午前 3:28 UTC](https://community.cybozu.dev/t/topic/9295/4 "2024-07-19T03:28:45Z")

</div>

pomo様

返信ありがとうございます。  
教えていただいたコードでも、レコード保存後、採番されずフィールドは空欄です。フィールドは以下のとおり設置しています。

【結果表示フィールド】  
フィールド名・フィールドコード ＝「自動採番」  
フィールドの種類：文字列（1行）

【日付】  
フィールド名・フィールドコード ＝「日付」  
フィールドの種類：日付

Javaは、教えていいただいたコードをメモ帳に貼付け  
.js（文字コード：UTF-8）で保存し、uploadしました。  
他のjsはありません。  
プラグインも同様な症状で、まったく採番されない状況です。

---

<div class="post-metadata">

**Author:** ![Michi](https://avatars.discourse-cdn.com/v4/letter/m/c37758/32.png) [@Michi](https://community.cybozu.dev/u/Michi)\
**Post date:** [2024 年 7 月 19 日午前 3:32 UTC](https://community.cybozu.dev/t/topic/9295/5 "2024-07-19T03:32:03Z")

</div>

// クエリ文の設定  
const query = {  
app: kintone.app.getId(),

もしかして、app.getId(), ここにアプリID番号を入力するのでしょうか

---

<div class="post-metadata">

**Author:** ![pomo](https://sea1.discourse-cdn.com/flex015/user_avatar/community.cybozu.dev/pomo/32/465_2.png) [@pomo](https://community.cybozu.dev/u/pomo)\
**Post date:** [2024 年 7 月 19 日午前 8:39 UTC](https://community.cybozu.dev/t/topic/9295/6 "2024-07-19T08:39:17Z")

</div>

同一アプリでしたら、kintoen.app.getId()でアプリ番号取得できてると思うので、大丈夫です。

そうしましたら、処理の途中にdebuggerを入力してコンソール立ち上げて処理を止めて、recordが返って来ているか等確認してみると原因が突き止められるかと思うので試してみて頂ければと思います。

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/d5c841c3c5a6cb66eed514001c1b45147c9e1f4f.png) [@system](https://community.cybozu.dev/u/system)\
**Post date:** [2024 年 7 月 23 日午前 1:27 UTC](https://community.cybozu.dev/t/topic/9295/7 "2024-07-23T01:27:24Z")

</div>

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