別アプリのテーブルに追加更新

miyawaki さま

Bアプリのテーブルに取得したデータをセットするには、create.submit(保存前イベント)だとREST APIを使用するのではなく直接event.recordを書き換える形にし、detail.showだとREST APIを使用する必要があり、コードを読む限りだとcreate.submitイベントでREST APIを使用しているのが原因ではないかと思います。

記事については私も分かりかねますが、江田さんが同様の機能として関連レコードの集計が簡単にできる機能を発表されていたので、そちらが参考になるかと思います。

私も同じような機能を作成しましたが、全く違うもの(注文アプリから発注アプリへデータを飛ばす形)なので参考にはならないでしょう。代わりに、私ならこんな感じで作るかなというものを参考程度に置いておきます。ここはそういったコミュニティではないのでコードをくれと言われても応じませんが、私も申し訳ありませんがmiyawakiさまが投稿された内容をあまり読み込んでいなかったので、その代わりと思って下さい。

動作テスト等は一切していないのでご承知下さい。あらかじめday.jsを読み込む必要があります。

(() => {
	let appId = 342;

	kintone.events.on(['app.record.detail.show', 'app.record.create.submit'], async (event) => {
		let record = event.record;
		let currentAppId = event.appId;
		let currentRecordId = event.recordId;
		let getRecordsBody = {
			app: appId,
			query: `日付 >= ${dayjs(record['日付'].value).subtract(3, 'day').format('YYYY-MM-DD')}`
		};

		let getRecords = await kintone.api(kintone.api.url('/k/v1/records', true), 'GET', getRecordsBody);
		let tableValue = gerRecords.records.map((getRecord) => {
				return {
					value: {
						レコード番号T: {
							value: getRecord['$id'].value
						},
						社員名T: {
							value: getRecord['社員名'].value // Aアプリの社員名フィールドがユーザー選択フィールドでBアプリの社員名Tフィールドが文字列フィールドならgetRecord['社員名'].value[0]?.name: ''
						},
						所属工場T: {
							value: getRecord['所属工場'].value
						},
						弁当区分T: {
							value: getRecord['弁当区分2'].value
						}
					}
				}
			});

		if (event.type.match(/submit/)) {
			record['Tテーブル'].value = tableValue;

			return event;
		} else {
			if (record['Tテーブル'].value.length !== getRecords.records.length) {
				let putRecordBody = {
					app: currentAppId,
					id: currentRecordId,
					record: {
						Tテーブル: {
							value: tableValue
						}
					}
				};

				await kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', putRecordBody);

				location.reload();
			} else {
				return event;
			}
		}
	});
})();