お世話になっております。
POSTで別アプリへの一括登録させるJSを作り、動作したまでは良かったのですが
別アプリで重複禁止の項目があると、レコード追加後に再びPOSTしようとしても400BadRequestが返ることに気付きました。(当然ですが)
ここで、①重複しているデータが存在するレコードがある場合はそのレコードを上書きしたいと思っています。
あるいは、②重複しているデータが存在するレコード以外を登録し、
重複している分はfilterで抽出して更新用のPOST(PUT?)で更新したいと思っています。
①、②のいずれかが可能であればご教授頂けると幸いです。
rex0220 様
ありがとうございます。そのようなライブラリがあったことを初めて知りました…
導入し、サンプルコードを自アプリ用に書き換えて動くことが確認できました。
恐縮ながらもう一点質問なのですが、サンプルコードはJS側で「UpsertするUpdateKeyの値」と
「Upsertする項目の値」を直接指定しています。
これを自アプリに登録されているレコードの値に書き換えたいのですが、どう書けばよいでしょうか…
例
Aアプリ フィールド:UK、文字列1
Bアプリ フィールド:UK、文字列1
・Aアプリに「UK」が「0001」のレコードがあり、Bアプリに「UK」が「0001」のレコードがない場合
⇒BアプリにAアプリの「UK」が「0001」のレコードを追加する
・Aアプリに「UK」が「0002」のレコードがあり、Bアプリに「UK」が「0002」のレコードがある場合
⇒Bアプリの「UK」が「0002」のレコードをAアプリの「UK」が「0002」のレコードの内容に更新する
サンプルコードのvar records内を書き換えるのだとは思いますが、お互いのアプリのレコードを結びつける?書き方が分かりません…
こんな感じでいかがでしょうか?
切り貼りしただけですので、検証をお願いします。
var recordsA = [
{ "UK": { "value": "0001" }, "文字列": { "value": "XXXX" } },
{ "UK": { "value": "0002" }, "文字列": { "value": "YYYY" } },
];
var recordsB = recordsA.map(function(record) {
return {
updateKey: {
field: 'UK',
value: record.UK.value
},
record: {
'文字列': {
value: record['文字列'].value
}
}
};
});
var param = {
app: xxx,
records: recordsB,
isGuest: false
};
rex0220 様
回答ありがとうございます。
せっかく回答して頂いたのですが、こちらの質問の仕方が悪く、
間違った意図の質問になってしまいました。申し訳ありません。
誠に勝手ながら、前回の質問は一旦無かったことでお願いします…。
色々な記事を参考にして、下記のようになったのですが
kintoneUtility.rest.upsertRecordsのアラートメッセージでCannot read property ‘value’ of undefined
と出てしまいました。
alert(putRecords[1].record.文字列.value);とすると正しい値が表示されるので、putRecordsの取得はできていると思うのですが…
var appRecords = event.records;
if (event.size > 0) {
var putRecords = [];
for (var i = 0; i < appRecords.length; i++) {
var appRecord = appRecords[i];
putRecords[i] = {
UpdateKey: { field: 'UK', value: appRecord.UK.value },
record: {
'文字列': { value: appRecord.文字列.value }
}
}
}
}
var param = {
app: ***,
records: putRecords,
isGuest: false
};
たぶん、UpdateKey は、updateKey 小文字の誤りだと思います。
rex0220 様
ご回答ありがとうございます。
まさにご指摘の通りでした…無事動くことを確認できました。
本当にありがとうございました。