アプリ間のレコードコピーについて

アプリAでドロップダウンの値を「商談中」→「成約」に変更して保存したタイミングでレコードをアプリBに必要な項目だけコピーする事を考えております。コピーされたタイミングでアプリBのユーザにメール通知も行いたいです。Javascriptでの記述方法を教えてください。

カスタマイズの実装に困った場合は、実現したいことを分割して検討するとよいです。たとえば、本投稿の内容は以下のように分割・検討できます。

そのうえで、アプリAでドロップダウンが「成約」の状態で保存されたレコードについて、アプリAの項目1をアプリBの項目X、項目2を項目Yにコピーしてレコードを追加するコード例は以下となります。

(() => {
  'use strict';
  
  // アプリAのレコード保存時に処理を実行
  const saveEvents = [
    'app.record.create.submit',
    'app.record.edit.submit',
    'app.record.index.edit.submit'
  ];
  kintone.events.on(saveEvents, (event) => {
    
    // ドロップダウンが「成約」の場合に限定
    if (event.record['状況'].value !== '成約') return event;
    
    // レコードの一部をアプリBにコピー
    const body = {
      app: N,
      record: {
        項目X: {
          value: event.record['項目1'].value
        },
        項目Y: {
          value: event.record['項目2'].value
        },
        コピー済: {
          value: '済'
        }
      }
    };
    kintone.api(
      kintone.api.url('/k/v1/record', false),
      'POST',
      body,
      (res) => alert(`成功`),
      (err) => alert(`失敗 ( ${err} ) `)
    );
    
    return event;
  });
})();

なお、上記の例ではコピー先のアプリBに、ドロップダウンフィールド「コピー済」(フィールドコードも同じ)が配置済みで、項目「済」が含まれていることを前提としています。「コピー済」が「済」になったタイミングでレコードの条件通知を利用して対象ユーザーに通知するとよいと思います。

また、app: NNはコピー先のアプリBのアプリIDは置き換えます。

加えて、コピーするフィールドを調整するには、const body = { ... };内のrecord: { ... }を以下の形式で記述します。必要に応じて フィールド形式を参照してください。

コピー先アプリのフィールドコード: {
  value: event.record['コピー先アプリのフィールドコード'].value
},

最後に、kintoneカスタマイズやJavaScriptにあまり慣れていない場合は、チュートリアルから始めるとよいと思います。

「いいね!」 2

(更に発展した話ですが、メールの送信は内容などいろいろカスタマイズしたい場合はsendgridつかうのもよさそうですね

「いいね!」 1

ご回答ありがとうございます。

頂いた記述例を参考に動作確認したのですが、

アプリBにレコードのコピーが出来ませんせんでした。アラートも出ておりません。

基本的な間違いなどがあれば教えてください。

(() => {
‘use strict’;

// アプリAのレコード保存時に処理を実行
const saveEvents = [
    'app.record.create.submit',
    'app.record.edit.submit',
    'app.record.index.edit.submit'
];
kintone.events.on(saveEvents, (event) => {

    // ドロップダウンが「成約」の場合に限定
    if (event.record['状況'].value !== '契約') return event;

    // レコードの一部をアプリBにコピー
    const body = {
        app: 1366,
        record: {
            moshikomiB: {
                value: event.record['moshikomiA'].value
            },
            keiyakuB: {
                value: event.record['keiyakuA'].value
            },
            コピー済: {
                value: '済'
            }
        }
    };
    kintone.api(
        kintone.api.url('/k/v1/record', false),
        'POST',
        body,
        (res) => alert(`成功`),
        (err) => alert(`失敗 ( ${err} ) `)
    );

    return event;
});

})();

アラートが表示されていないということなのでkintone.api()より前で止まっていることが考えられます。

フィールドコードや項目の名称が一致するか、各処理の前後にconsole.log()を追加してどこまで到達しているか、開発者ツールのコンソールでエラー(赤い背景のメッセージ)が発生しているか等を確認されるとよいかと存じます。

デバッグの詳細についてcybozu developer networkに記事がありますので一例をご紹介します。