ボタンクリックで別アプリにコピーのはずが、「レコードの詳細を表示する」クリックで複製されてしまう。

いつもお世話になっております。初めて投稿します。

注文受付アプリ(以下、A)の情報を発注書作成アプリ(以下、B)へコピーするために、Aの詳細画面にボタンを作成し、ボタンクリックでBの新規レコードに情報をコピーするカスタマイズをしました。

(参考にさせていただきました https://developer.cybozu.io/hc/ja/community/posts/115017571523 )

ここまでは意図した通りに動いているのですが、

Aの一覧画面から「レコードの詳細を表示する」ファイルマークをクリックした時にも、Bにレコードが追加されてしまいます。

Aのボタン類をクリックしたら処理が走ってしまうようです。

原因がわからず困っており、ご指摘・ご教授いただきたく投稿をさせていただきました。

-----(実際のプログラム ここから)-------------------------------

(function() {
‘use strict’;

var orderP = {};

kintone.events.on(‘app.record.detail.show’, function(event) {
//レコード情報取得
var record = event.record;
//「発注書作成」アプリのアプリの番号
orderP.APP_ID = 123;

//レコードコピーボタン要素作成
var btnCopy = document.createElement(‘button’);
btnCopy.id = ‘btn_Copy’;
btnCopy.innerHTML = ‘発注書作成’;
//ボタンをクリックしたときのイベント
btnCopy.onclick = function() { //受注受付から発注書データを作成する
window.confirm(‘発注書を作成します。’);
};

//(ヘッダー)スペースにボタン要素を付加
kintone.app.record.getHeaderMenuSpaceElement().appendChild(btnCopy);
//kintone.app.record.getSpaceElement(‘OrderP_go’).appendChild(btnCopy);

//サブテーブルオブジェクトを取得
var tableRecords = record.受注明細.value;

//サブテーブルの内容を配列に格納
var subtable = [];
for (var i = 0; i < tableRecords.length; i++) {
subtable.push({
value: {
“商品名”: { value: tableRecords[i].value[‘商品名’].value },
“数量”: { value: tableRecords[i].value[‘数量’].value }
}
});
}

var params = {
“app”: orderP.APP_ID,
“record”: {
“件名”: {“value”: record[‘件名’].value},
“ユーザー名”: {“value”: record[‘ユーザー名’].value},
“受注No”: {“value”: record[‘受注No’].value},
“受注明細”: {“value”: subtable}
}
};

kintone.api(‘/k/v1/record’, ‘POST’, params);
});
})();

-----(プログラムここまで)-----

ボタンをクリックしたら、「発注書を作成します。」とメッセージが出ますが、ボタン以外から複製される時には、メッセージは出ないことが違うところです。

情報が不足していましたら、その点もご指摘いただければと思います。

よろしくお願いいたします。

木場夕佳子 さん、こんにちは。

記載いただいたソースコードを見る限りでは、レコード追加の処理がボタンクリック時のfunction()の外に書かれており、

ボタンクリック時のfunction()の中にはメッセージを表示する処理しか存在しないため、

・レコード詳細画面表示のタイミングでレコード追加の処理が実行される

・ボタンクリック時にはメッセージが表示される

上記の現象が発生していると考えられます。

そのため、ソースコードの以下の部分をボタンクリック時のfunction()の中に移動することで、

意図した動作になると思います。

//サブテーブルオブジェクトを取得
var tableRecords = record.受注明細.value;

//サブテーブルの内容を配列に格納
var subtable = [];
for (var i = 0; i < tableRecords.length; i++) {
subtable.push({
value: {
"商品名": { value: tableRecords[i].value['商品名'].value },
"数量": { value: tableRecords[i].value['数量'].value }
}
});
}

var params = {
"app": orderP.APP_ID,
"record": {
"件名": {"value": record['件名'].value},
"ユーザー名": {"value": record['ユーザー名'].value},
"受注No": {"value": record['受注No'].value},
"受注明細": {"value": subtable}
}
};

kintone.api('/k/v1/record', 'POST', params);

本田智明さん

ご返信ありがとうございます。教えていただいた通りに修正し、動作確認できました。

勉強不足でお恥ずかしい限りですが、大変助かりました。

ありがとうございました!

木場夕佳子 さん、こんにちは。

無事動作したとのことで良かったです!