コメントと変更履歴をメールしたい

kintone 条件分岐処理プラグインで条件によりレコード変更時にメール送信をしていますが
JSEdit for kintoneを使ってコメントと変更履歴を追加して送りたいです。

このコードが間違っているようなので確認できる方、お願いします。

(function() {
  'use strict';
  kintone.events.on('app.record.detail.show', function(event) {

    (async () => {
      const appId = kintone.app.getId();
      const recordId = kintone.app.record.getId();

      const getComments = async (appId, recordId) => {
        const response = await kintone.api(kintone.api.url('/k/v1/record/comments.json', true), 'GET', {
          app: appId,
          record: recordId
        });
        return response.comments.map(comment => comment.text).join('\n');
      };

      const getChangeHistory = async (appId, recordId) => {
        const response = await kintone.api(kintone.api.url('/k/v1/record.json', true), 'GET', {
          app: appId,
          id: recordId
        });
        return response.record.$revision.value;
      };

      const comments = await getComments(appId, recordId);
      const changeHistory = await getChangeHistory(appId, recordId);

      // メール本文に挿入するための変数を設定
      window.emailComments = comments;
      window.emailChangeHistory = changeHistory;
    })();

  });
})();

条件分岐処理プラグインのメール本文には

コメント:
${emailComments}

変更履歴:
${emailChangeHistory}

と入れてあります。

sugimotoさん。こんにちは。

確認したところ、kintone 条件分岐処理プラグインのメール本文には、
kintone アプリ内のフィールドからは値を取得できるようです。

kintone アプリ内に、文字列フィールド(自分は複数行を使いました)を2つ追加し、レコード保存時にそれぞれのフィールドに値を入れる方法にすれば、動作します。

以下に成功した方法の要点を記載します。

kintone アプリのフォーム

以下の文字列フィールドを追加します。

フィールドコード:emailComments
フィールドコード:emailChangeHistory

※自分は文字列(複数行)で追加しましたが、文字数が長くなければ(1行)でも問題ないかもしれません。

条件分岐処理プラグイン

メール本文は以下を設定します。

コメント:
%emailComments%

変更履歴:
%emailChangeHistory%

JavaScript

kintone.events.on はレコード編集保存時にして、ここで async を宣言します。
await を使った処理は、try - catch 内で行います。イメージは以下の通りです。
Promiseのかわりにasync/awaitを使ってみよう

(() => {
  
  'use strict';
  kintone.events.on('app.record.edit.submit', async function(event) {
    const appId = kintone.app.getId();
    const recordId = kintone.app.record.getId();

    try {

      // ここに処理を書く


    } catch (error) {
      console.error('エラーが発生しました:', error);
      event.error = 'データ取得中にエラーが発生しました。再度お試しください。';
    }

    // 変更内容を反映する
    return event;
  });
})();

try の中にコメントと履歴を取得して、フィールドにセットするコードを書きます。
たとえば、コメントを取得して、値をセットする方法は以下となります。
※記載いただいたコードをちょっとだけ修正しています。

  // コメント取得
  const commentResponse = await kintone.api(
    kintone.api.url('/k/v1/record/comments.json', true),
    'GET',
    { app: appId, record: recordId }
  );

  // コメント成型  
  const emailComments = commentResponse.comments
    .map(comment => comment.text)
    .join('\n');
    
  // フィールドに値をセット
  event.record.emailComments.value = emailComments;

履歴についても同様に処理を記載します。
最後の

  return event;

で、レコードが変更内容を取り込んで更新され、条件分岐処理プラグインで、
メールが送信されます。

nazobito さん

ありがとうございます。
コメントは教えていただいた通りで出来ましたが
変更履歴がおかしくて変更履歴の内容が取得したいのですが変更履歴回数が取得されてしまいます。
以下をどう直したら良いでしょうか?

// 変更履歴取得
const changeHistoryResponse = await kintone.api(
kintone.api.url(‘/k/v1/record.json’, true),
‘GET’,
{ app: appId, id: recordId }
);

// 変更履歴成型
const emailChangeHistory = changeHistoryResponse.record.$revision.value;

// フィールドに値をセット
event.record.emailChangeHistory.value = emailChangeHistory;

最初に投稿いただいた方法の場合は、単純にそのレコードのリビジョンを取得するだけになります。

return response.record.$revision.value

レコードの変更履歴を取得するAPIは現状は存在しません。
過去に同様のやりとりがあったので、そちらを参考にするとヒントになるかもしれません。
変更履歴の取得 - Legacy_Account1623 の #9

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