【kintone】JavaScriptの書き方(サブテーブルコピー)【カスタマイズ基礎編】

kintoneのサブテーブルを他アプリにコピーしたいのですが、どのように実装すれば良いでしょうか。

JavaScriptを使い、サブテーブル操作とPOST APIによって実装できます。

この記事ではサブテーブルのコピーについて解説します。

この記事で何が分かる?
  • kintoneのJavaScriptカスタマイズによってサブテーブルを他アプリにコピーできます。
  • サブテーブルをそのまま他アプリへコピーする場合は、サブテーブルの値をPOST APIのパラメータにそのまま指定するだけです。
  • サブテーブル内の特定の条件を満たす行のみをコピーする場合は、filter関数を使って特定の行のみを抽出して配列を作ります。
目次

kintoneのサブテーブルを他アプリにコピーするには

kintoneではPOST APIを使うことで他アプリにレコードを登録できます。

POSTする際のパラメータにサブテーブルの値を指定することで、サブテーブルをそのまま登録(コピー)することができます。

そのまま登録するのも良いですが、この記事では特定の条件を満たす行のみをコピーする処理も記述してみます。

実装例:サブテーブルをそのままコピーする

サブテーブルをそのままコピーすることは非常にシンプルで、POST APIのパラメータにサブテーブルをそのまま指定するだけです。

以下コードでは、レコード追加保存時にアプリID:119にサブテーブルを含むレコードを新規登録します。

サブテーブルは同じデータがコピーされた形となります。

(() => {

	'use strict';

	kintone.events.on(['app.record.create.submit'], async event => {

		const record = event.record;

		try {

			const params = {
				app: 119,		// アプリID
				record: {		// レコード情報
					サブテーブル: {
						value: record.サブテーブル.value
					}
				}
			};

			await kintone.api(kintone.api.url('/k/v1/record.json', true), 'POST', params);

			alert('レコードを登録しました。');
			return event;

		} catch (e) {
			// POSTエラー
			console.log(e);
			event.error = 'エラーが発生しました。';
			return event;
		}

	});

})()

実装例:サブテーブル内の特定の条件を満たす行のみをコピーする

以下コードでは、サブテーブル内の行のうち、数値フィールドが1000より大きい値となる行のみを他アプリにコピーします。

(() => {

	'use strict';

	kintone.events.on(['app.record.create.submit'], async event => {

		const record = event.record;

		// 数値フィールドが1000より大きい行だけを配列に追加
		const postTable = record.サブテーブル.value.filter((row) => {
			return row.value.サブテーブル_数値.value > 1000;
		});

		try {

			const params = {
				app: 119,		// アプリID
				record: {		// レコード情報
					サブテーブル: {
						value: postTable
					}
				}
			};

			await kintone.api(kintone.api.url('/k/v1/record.json', true), 'POST', params);

			alert('レコードを登録しました。');
			return event;

		} catch (e) {
			// POSTエラー
			console.log(e);
			event.error = 'エラーが発生しました。';
			return event;
		}

	});

})();

サブテーブルに対して「filter」を使うことで、特定の条件を満たすものだけを抽出して配列を作ります。

この配列とアプリIDをパラメータとしてPOSTします。

今回は数値フィールドが1000より大きい行のみという条件としましたが、条件は複数あっても可能です。

サブテーブルは他フィールドとは性質が異なるため、ハードルが少し高いと感じてしまいますが、基本は配列構造です。

JavaScriptの配列操作を覚えてしまえば難しいことはありません。

この記事のまとめ
  • kintoneのJavaScriptカスタマイズによってサブテーブルを他アプリにコピーできます。
  • サブテーブルをそのまま他アプリへコピーする場合は、サブテーブルの値をPOST APIのパラメータにそのまま指定するだけです。
  • サブテーブル内の特定の条件を満たす行のみをコピーする場合は、filter関数を使って特定の行のみを抽出して配列を作ります。
目次