下記のスレッドを参考にアプリ(アプリA)のテーブルデータを、別アプリ(アプリB)に登録することはできたのですが、アプリAのテーブルデータを更新するたびに、アプリBに新規でレコードが登録されてしまいます
実現したい内容として、アプリAのテーブル内容を更新した際はアプリBのレコードに新規登録ではなくすでに登録済みのレコードを更新、さらに可能であればテーブルの行削除の場合はレコードを削除するような仕様に変更することは可能でしょうか?
https://developer.cybozu.io/hc/ja/community/posts/900001022086/comments/900000297403
記載のコードは以下のとおりです※アプリIDのみ修正
元々のコードが新規登録の記述で、
- 更新の際はテーブルの行(アプリBのレコード)ごとにIDを発行する
- 更新はpostではなくputで行う
の2点が追加で必要な処理だと理解しているのですが、具体的にどのような記述を行えばいいのかわからず、、、
(function () {
"use strict";
kintone.events.on([
'app.record.create.submit.success', 'app.record.edit.submit.success'
], function (event) {
var postApp = 0000; //BアプリのID
var subTable = 'quote'; //サブテーブルのフィールドコード
var headers = [ //コピーするサブテーブル外のフィールドのフィールドコード
`recordId`,
'projectName',
'quote_date1',
'quote_date',
'quote_conditions',
'expiry',
];
kintone.api(kintone.api.url('/k/v1/records', true), 'POST', {
app: postApp,
records: event.record[subTable].value.map(function (row) {
headers.forEach(function (header) {
row.value[header] = event.record[header];
});
return row.value;
})
});
});
})();
実現方法や可能であれば正しい記述をご教授いただけると助かります
また、下記の別記事も参考にしてみたのですが、同じく保存で処理が止まり(再度保存を押すとエラー[レコードを再読み込みしてください。編集中に、ほかのユーザーがレコードを更新しました。])が出てしまいます
https://developer.cybozu.io/hc/ja/community/posts/900001022086/comments/900000297403
投稿主はこちらのレスにより解決した流れとなっておりますが、
https://developer.cybozu.io/hc/ja/community/posts/900001022086/comments/900000310923
具体的にどのような記述変更で解決したのかがわからず詰まっています、、、
なおこちらで試したjsのコードは下記のとおりとなります
(function() {
"use strict";
kintone.events.on("app.record.create.submit.success", function(event) {
var postApp = 0000; // 別アプリのID
var recId = event.recordId; // テーブルを登録したレコードを更新するためのID
var subTable = 'quote'; //サブテーブルのフィールドコード
var headers = [ //コピーするサブテーブル外のフィールドのフィールドコード
`recordId`,
'projectName',
'quote_date1',
'quote_date',
'quote_conditions',
'expiry',
];
var record = event.record;
// テーブルを更新するための値
var table = event.record.Table.value;
var array = [];
return kintone.api(kintone.api.url('/k/v1/records', true), 'POST', {
app: postApp,
records: event.record[subTable].value.map(function (row) {
headers.forEach(function (header) {
row.value[header] = event.record[header];
});
return row.value;
})
}).then(function(resp) {
// ↓↓↓↓↓↓↓↓↓↓↓↓登録が成功したレコードID をテーブルに登録するための処理
console.log(resp);
for (var i = 0; i < table.length; i++) {
array.push({
"id":table[i].id,
"value":{
"id": {
"value": resp.ids[i]
}
}
});
}
var body = {
"app": kintone.app.getId(),
"id": recId,
"record" :{
"Table":{
"value": array
}
}
}
return kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', body).then(function(resp) {
// success
console.log(resp);
}, function(error) {
// error
console.log(error);
});
});
});
// 更新時の処理
kintone.events.on("app.record.edit.submit.success", function(event) {
var postApp = 0000; // 別アプリのID
var recId = event.recordId; // テーブルを登録したレコードを更新するためのID
var subTable = 'quote'; //サブテーブルのフィールドコード
var headers = [ //コピーするサブテーブル外のフィールドのフィールドコード
`recordId`,
'projectName',
'quote_date1',
'quote_date',
'quote_conditions',
'expiry',
];
var record = event.record;
console.log(event.record[subTable].value.map(function (row) {
headers.forEach(function (header) {
row.value[header] = event.record[header];
});
return row.value;
}))
return kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', {
app: postApp,
records:
event.record[subTable].value.map(function (row) {
headers.forEach(function (header) {
row.value[header] = event.record[header];
});
return {
id: row.value.id.value,
record: row.value
};
})
});
});
})();
長文につきまとまりがない文で恐縮ですが何卒よろしくお願いいたします