kintoneテーブルの最大行数を調べる方法

こんにちは、笹川です。
2023年になり、早くも二月が過ぎ去ろうとしていますが、皆様いかがお過ごしでしょうか。
今年は 助っ人サービス for kintone でも、新しいサービスを提供していく予定ですので、ぜひチェックしてみてください。

※今回もJavaScriptやAPIを使用する内容ですので、kintoneスタンダードコースが対象です。

調べたい理由

今回は、先日プリントクリエイターでPDF出力設定を行っていてふと思ったことを。

「このテーブル、最大何行まで出力設定すればいいんだろう…?」

そう、プリントクリエイターの設定において、テーブル行の把握はマストですが、kintoneのテーブルはユーザーが必要に応じて行を追加できるため、アプリ全体を通してどれくらいの行数まで使用されているのか把握できません。
しかも、もしあとから「やっぱりあと1行必要だったみたい…」となった場合、思った以上に作り直しの手間がかかるんですよね。

行数の取得について、kintoneヘルプにはこんな方法が紹介されていました。
アプリに手を加えることが可能な場合は確実です。でも、事情があってアプリや既存のテーブルにフィールドを追加するのはNGな場合もあるかもしれません。

全レコード出力してエクセル展開して調べることも可能ですが、あまりスマートな方法ではないですし、データをローカルに書き出すリスクもできれば避けたいところです。

そこで、APIとJavaScriptでテーブル行の最大数を取得する方法を考えてみました。

How to ?

kintone REST API Client

データの取得には、最近覚えた kintone REST API Client を使用しました。
ライブラリは Cybozu CDN から最新のものを適用済です。

ちょっと何を言ってるのかわからないよ!という方は、リンク先に書いてあるkintone REST API ClientのURL(2つのうちのどちらか)をコピーして『アプリの設定』から『カスタマイズ/サービス連携』>『JavaScript/CSSでカスタマイズ』を選択し、「URL指定で追加」に貼り付けてあげればOKです⇩

「保存」→「アプリの更新」も忘れずに

JavaScript

コードは以下のように書きました。
ブラウザのコンソールにコピペして実行します。

(() => {
	'use strict';
	// kintone REST API Client
	async function getAllRecords() {
		const client = new KintoneRestAPIClient();
		try {
			const records = await client.record.getAllRecordsWithId({app: kintone.app.getId()});
			return records;
		} catch (err) {
			console.log(_params);
			console.log(err);
		}
	};

	(async () => {
		const tableNames = [];
		const tables = {}; 

		// ①全てのレコードを取得(kintone REST API Clientを使用)
		const allRecords = await getAllRecords();
		
		// ②全てのテーブルを抽出
		for(let field in allRecords[0]) {
			if (allRecords[0][field].type === 'SUBTABLE') {
				tableNames.push(field);
			}
		}

		// ③各テーブルの行数を調査
		for(let i = 0; i < tableNames.length; i++){
			// 対象のテーブル
			const tableName = tableNames[i];
			// 最大行数
			const maxTableLen = Math.max(...allRecords.map(record => record[tableName].value.length));
			// 最大行数のテーブルを持つレコードID
			const recordIds = allRecords.filter(record => record[tableName].value.length === maxTableLen).map(record => record.$id.value);
			
			tables[tableName] = {
				length: maxTableLen,
				records: recordIds
			};
		}
		console.table(tables);
	})();
})();

もっとかしこい書き方があるような気はしますが、ひとまずは必要な結果を取得することができました。

結果

社内で使用している見積りアプリで実行してみました。

  • テーブルのフィールドコード
    • テーブルの最大行数
    • 最大行数のテーブルを持つレコードID

といった形で全てのテーブルが出力されています。
「見積内訳」テーブルは、レコード番号687のレコードが最大の24行を使用しているようですので、見積書のフォーマットを作成するにあたり、「内訳は24行以上の出力に対応する」ことが必要であるということが分かりました。

まとめ

最近は、プリントクリエイターで帳簿出力する機会が増えてきたので、今後も必要になる場面が出てくるような気がします。いつでもだれでも使えるように、プラグイン化してみようかなと思っています。

最後まで読んでいただき、ありがとうございました。
助っ人サービス for kintone では、kintone開発&運用支援を行っています。kintoneの導入や運用についてお困りでしたら、ぜひお気軽にお問い合わせください!

今後も、かゆいところに手が届く、新しい活用アイディアに繋がる、そんな投稿をしていきたいと思いますので、助っ人サービス for kintone を引き続きよろしくお願いいたします。

助っ人サービス for kintoneのお問い合わせはこちら backlog助っ人サービス おっと発見OTTO

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です