前回はREST APIを使ったデータ登録方法を紹介しましたが、今回はデータ更新の方法です。

他システムとkintoneとのデータ連携は行いたいけど、開発ができないという方は、カスタマイズ開発を1週間20万円という定額料金で提供していますので、弊社までお気軽にお問い合わせください。

今回もSDKを利用します。

kintoneに登録されているデータを更新

  1. 前回と同じようにkintoneのSDKを利用するためにクラスをimport
  2. 以下のように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;
    

     

  3. kintoneへ接続
  4. これも前回同様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);
    }
    

     

  5. kintoneから更新対象のレコードを検索
  6. 更新対象となるレコードを検索して、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())でループしてレコード番号を取得して下さい。今回はサンプルなので最初のレコードのレコード番号だけを取得します。

     

  7. レコードを更新
  8. 後は、レコード登録時とほぼ同じです。

    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にセットした値で上書きをするため、すでに登録されているサブテーブルのデータも指定しておかないとデータが削除されてしまいます。

 

次回予定は、ファイルアップロード編です。

 

 


株式会社ジョイゾー