前回は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にセットした値で上書きをするため、すでに登録されているサブテーブルのデータも指定しておかないとデータが削除されてしまいます。
次回予定は、ファイルアップロード編です。