POSTによる重複チェックのあるデータの登録・更新について

お世話になっております。

POSTで別アプリへの一括登録させるJSを作り、動作したまでは良かったのですが
別アプリで重複禁止の項目があると、レコード追加後に再びPOSTしようとしても400BadRequestが返ることに気付きました。(当然ですが)

ここで、①重複しているデータが存在するレコードがある場合はそのレコードを上書きしたいと思っています。

あるいは、②重複しているデータが存在するレコード以外を登録し、
重複している分はfilterで抽出して更新用のPOST(PUT?)で更新したいと思っています。

①、②のいずれかが可能であればご教授頂けると幸いです。

FM さん

kintoneUtility.rest.upsertRecords を使うといいと思います。

「kintone Utility Library for JavaScript」の使い方

 

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 様

ご回答ありがとうございます。
まさにご指摘の通りでした…無事動くことを確認できました。

本当にありがとうございました。