API系の記事がややご無沙汰でしたので今回はREST APIを使ったデータ削除の方法を紹介します。これでREST APIを使ったデータ登録、更新、削除ができますので基本的なところはOKだと思います。
もちろん、今回もSDKを利用します。
kintoneに登録されているデータを削除
- 毎度おなじみkintoneのSDKを利用するためにクラスをimport
- kintoneへ接続
- kintoneから削除対象のレコードを検索
- レコードを削除
毎度毎度恐縮ですが、まずはkintoneAPIのクラスをimportです。ただし、今回はRecordクラスは使わないのでこれは指定しなくてもOKです。
import com.cybozu.kintone.database.Connection; 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()
という書き方になります。
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();
}
後は、アプリIDとレコード番号をキーにしてレコード削除のメソッドを実行します。
//kintoneにデータ登録
try {
db.delete(db.update("アプリID", record_id);
} catch (DBException e) {
System.err.println("データ削除に失敗しました。");
e.printStackTrace();
}
削除はレコードIDを指定するだけなので簡単です。
コードをまとめるとこんな感じになります。
import com.cybozu.kintone.database.Connection;
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();
}
//kintoneにデータ登録
try {
db.delete("アプリID",record_id);
} catch (DBException e) {
System.err.println("データ削除に失敗しました。");
e.printStackTrace();
}finally{
db.close(); //kintone切断
}
}
deleteメソッドにはレコード番号を List で渡しての一括削除やクエリを投げての削除もできそうです。(すみません、試してません。。)
他システムとkintoneとのデータ連携は行いたいけど、開発ができないという方は、カスタマイズ開発を1週間20万円という定額料金で提供していますので、弊社までお気軽にお問い合わせください。