レコードに値がなかったら登録、あったら更新するUPSERT
はじめに
基幹システムの商品、顧客マスターをkintoneで作った「受発注」や「顧客案件管理」アプリに定期的に、更新したいケースはありませんか?
たとえば、顧客マスターの場合にすでに登録済の顧客情報は更新して、新しいの顧客情報は登録したくなります。
kintone REST APIでは、レコード登録API、レコード更新APIがあるので、それらを組み合わせることで実現できます。
kintoneのレコードのキーになる値がない場合には登録して、値がある場合には更新するといったように組み合わせた方法を紹介します。
データベースでいうと「SELECT
→ UPDATE
or INSERT
」です。
組み合わせるAPI
データを作る
まず、次のようにkintoneアプリにレコードを用意しましょう。
フィールドコード | 企業コード | 企業名 | 従業員数 |
---|---|---|---|
値 | C1001 | ▲商事 | 1000 |
キー項目の値と一致するか調べる
HTTPのクエリ文字列でリクエストしてみます。
|
|
- リクエストするクエリ文字列(
&query=
以降)はURLエンコードしてください。 X-Cybozu-Authorization
のパラメーター値は、ログイン名+「:」+パスワードをBASE64でエンコードしたものになります。
レスポンスには次の文字列が返ってきました。(一部を表示しています)
|
|
値があったら更新してみる
値があるとid
を取得できます。
|
|
X-Cybozu-Authorization
のパラメーター値は、ログイン名+「:」+パスワードをBASE64でエンコードしたものになります。- リクエストボディには、JSON形式の文字列になるので、
Content-Type
を指定します。
リクエストボディの内容です。
|
|
値がなかったら登録してみる
企業コードに「1002」を指定してレコード取得してみましょう。
https://{sub-domain}.cybozu.com/k/v1/records.json?app=77&query=code="C1002"&fields=code
その結果、レスポンスには次のような文字列が返ってきました。
これは、値がなかったことを意味します。
|
|
値がないことを確認したので、レコードを登録してみます。
|
|
X-Cybozu-Authorization
のパラメーター値は、ログイン名+「:」+パスワードをBASE64でエンコードしたものになります。- リクエストボディには、JSON形式の文字列になるので、
Content-Type
を指定します。
リクエストボディの内容です。
|
|
POSTに成功しますと、revision
はレコード単位で保有しているリビジョン番号になります。
|
|
おわりに
このように、レコード取得、レコード更新・登録APIを利用して、UPDATE
or INSERT
を実現できます。
ぜひお試しください。
このTipsは、2014年4月版kintoneで動作を確認しています。