今回はkintone API を使ってUPSERTしてみたいと思います。
SQLでいうところの、UPSERTとは、指定のレコードがなかったらINSERT、あればUPDATEをかけるという処理です。kintoneでは、指定のレコードをGETしてみて、なかったらPOST、あればPUTという処理になります。
kintone JavaScript Client という便利なライブラリにUPSERTがありますが、今回は純粋なkintone REST APIを使ってやってみます。
アプリの準備
文字列(1行)フィールドを3つ準備します。
フィールド種類 | フィールドコード | 備考 |
---|---|---|
文字列(1行) | ID | 重複を禁止 |
文字列(1行) | 名前 | |
文字列(1行) | 好きな食べ物 |
JavaScript
一覧の空白部分にテキストボックス3つとボタンを1つ、
kintone UI Componentを使って設置します。
そのあたりは下記を参考にしてくださいね!
コード内の変数はこんな感じとします。
種類 | 変数名 | 内容 |
---|---|---|
スペース | spUpsert | 一覧の上の空白スペース |
Text | txtId | ID入力用テキストボックス |
Text | txtName | 名前入力用 |
Text | txtFood | 好きな食べ物入力用 |
Button | btn | UPSERT走らせるボタン |
ボタンクリック
ボタンクリックのイベントで非同期処理できるようにasync付けておきます。
btn.addEventListener("click", async (event) => {
// 処理
});
入力したIDのレコードがあるかどうかGETで調べます。totalCountをtrueにしておきましょう。
// 指定のIDのレコード取得してくる
const respGet = await kintone.api(kintone.api.url("/k/v1/records", true),
"GET",
{
app: kintone.app.getId(),
query: `ID="${txtId.value}"`,
totalCount: true,
}
);
レコードがあったら更新、なかったら追加します。
// レコードがあったら更新(PUT),なかったら追加(POST)する
if (respGet.totalCount > 0) {
//PUT
} else {
//POST
}
//表示の更新
location.reload();
更新(PUT)する場合
※updateKeyには重複禁止のフィールドを指定する必要があります。
const respPut = await kintone.api( kintone.api.url("/k/v1/record", true),
"PUT",
{
app: kintone.app.getId(),
updateKey: { field: "ID", value: txtId.value },
record: {
名前: { value: txtName.value },
好きな食べ物: { value: txtFood.value },
},
}
);
追加する場合(POST)
const respPost = await kintone.api( kintone.api.url("/k/v1/record", true),
"POST",
{
app: kintone.app.getId(),
record: {
ID: { value: txtId.value },
名前: { value: txtName.value },
好きな食べ物: { value: txtFood.value },
},
}
);
GET、PUT、POSTを組み合わせてUPSERT、参考になれば嬉しいです!