前回はREST APIを使ったデータ登録方法を紹介しましたが、今回はデータ更新の方法です。
他システムとkintoneとのデータ連携は行いたいけど、開発ができないという方は、カスタマイズ開発を1週間20万円という定額料金で提供していますので、弊社までお気軽にお問い合わせください。
今回もSDKを利用します。
kintoneに登録されているデータを更新
- 前回と同じようにkintoneのSDKを利用するためにクラスをimport
- kintoneへ接続
- kintoneから更新対象のレコードを検索
- レコードを更新
以下のようにkintoneAPIのクラスをimportします。
import com.cybozu.kintone.database.Connection; import com.cybozu.kintone.database.Record; import com.cybozu.kintone.database.ResultSet; import com.cybozu.kintone.database.exception.DBException;
これも前回同様kintoneへ接続するためにサブドメイン、API実行ユーザーログイン名、API実行ユーザーパスワードを渡します。
//kintoneへの接続 Connection db = null; try { db = new Connection("サブドメイン名", "ログイン名", "パスワード"); System.out.println("kintoneへ接続しました"); } catch (Exception e) { System.err.println("kintoneへの接続に失敗しました。" ); e.printStackTrace(); System.exit(1); }
更新対象となるレコードを検索して、ResultSetにセットします。
検索はSQL文を書くのと同じ感じで記述することができます。
例えば「件名フィールド(コード:title)に「ジョイゾー」という文字列が含まれていて、更新日時がAPI実行日以前のレコードを検索したい場合は、
title like “ジョイゾー” and updated_time <= TODAY()
という書き方になります。
その他、order byやlimit、offsetなども使えるため、kintoneの画面上でできる検索はAPIでも実施可能だと思ってOKです。
検索時に使える演算子や関数などはデベロッパーサイトにありますので、確認してみてください。
String query = "title like \"ジョイゾー\" and updated_time <= TODAY()"; //検索文字列 // select records ResultSet rs = null; long record_id = 0; try { rs = db.select("アプリID", query, null); //データ検索を実行し、結果をResultSetにセット rs.next(); record_id = rs.getId(); //とりあえず先頭のレコード番号を取得 } catch (DBException e) { System.err.println("kintoneからのデータ取得に失敗しました。"); e.printStackTrace(); }
db.selectで検索を実行し、結果をResultSetで受け取ります。検索結果が複数の場合はwhile(rs.next())でループしてレコード番号を取得して下さい。今回はサンプルなので最初のレコードのレコード番号だけを取得します。
後は、レコード登録時とほぼ同じです。
Record record = new Record(); record.setString("フィールドコード", "値"); //文字列フィールドへ登録 record.setDate("フィールドコード", "値"); //日付、ラジオボタン、リストボックスなどのフィールドへ登録 record.setLong("フィールドコード", "値"); //数値フィールドへ登録 //kintoneにデータ登録 try { db.update("アプリID", record_id,record); } catch (DBException e) { System.err.println("kintoneへデータアップロードに失敗しました。"); e.printStackTrace(); }
違う点は実行するメソッドが insert から update に代わり、更新対象のレコードIDを指定する部分だけです。
コードをまとめるとこんな感じになります。
import com.cybozu.kintone.database.Connection; import com.cybozu.kintone.database.Record; import com.cybozu.kintone.database.ResultSet; import com.cybozu.kintone.database.exception.DBException; public static void main(String[] args) throws IOException { Connection db = null; try { db = new Connection("サブドメイン名", "ログイン名", "パスワード"); System.out.println("kintoneへ接続しました"); } catch (Exception e) { System.err.println("kintoneへの接続に失敗しました。" ); e.printStackTrace(); System.exit(1); } String query = "title like \"ジョイゾー\" and updated_time <= TODAY()"; //検索文字列 // select records ResultSet rs = null; long record_id = 0; try { rs = db.select("アプリID", query, null); //データ検索を実行し、結果をResultSetにセット rs.next(); record_id = rs.getId(); //とりあえず先頭のレコード番号を取得 } catch (DBException e) { System.err.println("kintoneからのデータ取得に失敗しました。"); e.printStackTrace(); } Record record = new Record(); //レコードオブジェクト record.setString("フィールドコード", "値"); //文字列ラジオボタン、リストボックスなどのフィールド record.setDate("フィールドコード", "値"); //日付フィールド record.setLong("フィールドコード", "値"); //数値フィールド //kintoneにデータ登録 try { db.update("アプリID",record_id, record); } catch (DBException e) { System.err.println("kintoneへデータアップロードに失敗しました。"); e.printStackTrace(); }finally{ db.close(); //kintone切断 } }
データ更新時の注意点としてはサブテーブルに関しては更新時にreordにセットした値で上書きをするため、すでに登録されているサブテーブルのデータも指定しておかないとデータが削除されてしまいます。
次回予定は、ファイルアップロード編です。