《実現したいこと》
テーブル内の添付ファイルフィールドに添付ファイルが追加または更新された場合に
指定フィールド内に選択されているユーザー宛に通知したい
《現状》
プログラミングが全く分からないのでchatGPTに丸投げして作成したコードを登録したところ
・レコード編集→添付ファイル追加→保存で通知が出ず、再度レコード編集→保存で通知が出る
・添付ファイル追加後、添付ファイルの変更を行っていない行も添付ファイルがあるだけで編集→保存をする度通知が出る
chatGPTと何度もやり取りしていますがうまくいきません。
アドバイスいただければ幸いです。
よろしくお願いいたします。
(function () {
‘use strict’;
const TABLE_FIELD_CODE = ‘変更履歴’;
const FILE_FIELD_CODE = ‘図面’;
const USER_SELECT_FIELD_CODE = ‘ユーザー選択’;
const ZUMEN_FIELD_CODE = ‘文字列__1行__1’;
let originalFileKeys = ; // サーバー側から取得した添付ファイル情報
// 編集開始時に正しい元データを取得
kintone.events.on(‘app.record.edit.show’, async function (event) {
const recordId = event.recordId;
if (!recordId) return event;
const appId = kintone.app.getId();
try {
const recordResp = await kintone.api(kintone.api.url('/k/v1/record', true), 'GET', {
app: appId,
id: recordId
});
const originalTable = recordResp.record[TABLE_FIELD_CODE]?.value || [];
// 添付ファイルの fileKey を保持(行単位の配列)
originalFileKeys = originalTable.map(row => {
return (row.value[FILE_FIELD_CODE]?.value || []).map(f => f.fileKey).sort();
});
console.log('✅ 編集前のfileKeyを取得しました:', originalFileKeys);
} catch (e) {
console.error('❌ 編集前ファイル取得エラー:', e);
}
return event;
});
// submit時の差分比較と通知
kintone.events.on(‘app.record.edit.submit’, async function (event) {
const appId = kintone.app.getId();
const recordId = event.recordId;
const selectedUsers = event.record[USER_SELECT_FIELD_CODE]?.value || ;
const newTable = event.record[TABLE_FIELD_CODE]?.value || ;
if (selectedUsers.length === 0) {
console.log('❌ 通知対象ユーザー未設定のためスキップ');
return event;
}
if (!originalFileKeys.length) {
console.log('⚠️ 編集前のファイル情報が取得できていないため通知スキップ');
return event;
}
let updatedRows = [];
for (let i = 0; i < newTable.length; i++) {
const newFiles = (newTable[i].value[FILE_FIELD_CODE]?.value || []).map(f => f.fileKey).sort();
const oldFiles = originalFileKeys[i] || [];
if (JSON.stringify(newFiles) !== JSON.stringify(oldFiles)) {
const name = newTable[i].value[ZUMEN_FIELD_CODE]?.value || '(未入力)';
updatedRows.push(`・「${name}」の添付ファイルが更新されました`);
console.log(`📎 添付ファイルが変更された行:${i}`);
}
}
if (updatedRows.length > 0) {
const commentText = updatedRows.join('\n');
const mentions = selectedUsers.map(user => ({
code: user.code,
type: 'USER'
}));
try {
await kintone.api(kintone.api.url('/k/v1/record/comment', true), 'POST', {
app: appId,
record: recordId,
comment: {
text: commentText,
mentions: mentions
}
});
console.log('✅ コメント投稿成功:', commentText);
} catch (e) {
console.error('❌ コメント投稿失敗:', e);
}
} else {
console.log('⚠️ 添付ファイルに変更がなかったため通知スキップ');
}
return event;
});
})();