テーブル内に添付ファイルが追加・変更された場合に通知したい

《実現したいこと》
テーブル内の添付ファイルフィールドに添付ファイルが追加または更新された場合に
指定フィールド内に選択されているユーザー宛に通知したい

《現状》
プログラミングが全く分からないので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;

});
})();

私も最近kintoneカスタマイズを始めました。
ご相談を拝見したところ、大変失礼ながら、中島さまはプログラミングのご経験がまだあんまりないようにお見受けしました。私も似たようなものですが。。

cybozu developer networkには、初心者もkintoneカスタマイズの学習に取り組んでいけるように、「はじめようJavaScript」というチュートリアルコンテンツがあるみたいです。
まずは、こちらでプログラミングの基礎に取り組んでみてはいかがでしょうか??

それができるようになったら、次は「はじめようkintone API」というコンテンツがありますので、こちらに取り組んでみてください。

たしかにchatGPTは便利ですが、AIの提案を、最終的に判断するのは私たち人間です。
そのためにも、最低限のプログラミング知識を身につけなければならないと思います。
できれば、AIと対話しながら、要望を叶えていくのが良いのかなーと思います。

ご相談に対する返答になっていないかもしれませんが、1つの意見としてお聞きいただければと!

ご意見ありがとうございます。

おっしゃる通りプログラミングの経験が全くないため

自分がいま何をやっているかもわからないまま進めていました。。。

社内にもプログラミングの知識がある人が居ないのでkintoneサポートに相談しましたが

カスタマイズについてはサポート外のためこちらの掲示板をご案内されたので

投稿させていただきました。

やはりもう少し勉強が必要ですね。

kintoneは簡単に操作できたのでいきなりレベルが上がって完全にナメていました。。。

最初にチュートリアルコンテンツ等見てみたのですが出てくる単語が

いちいち分からなくてあきらめてしまっていました。

外国語を習得するつもりで地道に勉強していこうと思います。

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