レコードを操作する(データベースプラグイン)
ここでは、サイトアカウントに存在するデータベースインスタンスを、SDKから操作する方法について解説します。
レコードオブジェクトcom.echopf.contents.databases.ECHORecordObject
ECHORecordObjectは、個別レコードを操作するためのオブジェクトです。
オブジェクトを生成する
新しいレコードをオブジェクトとして生成するには、コンストラクタの第一引数にデータベースインスタンスのIDを指定します。
ECHORecordObject record = new ECHORecordObject("データベースインスタンスID");
既存のレコードをオブジェクトとして生成するには、コンストラクタの第二引数にレコードIDを指定します。
ECHORecordObject record = new ECHORecordObject("データベースインスタンスID", "レコードID");
オブジェクトフィールド
レコードオブジェクトは、以下のフィールドを持ちます。
フィールド名 | 型 | 説明 | 変更 |
---|---|---|---|
refid | java.lang.String | レコードID | ◯ |
url | java.lang.String | URL | × |
url_path | java.lang.String | URLパス | × |
title | java.lang.String | レコードタイトル | ◯ |
description | java.lang.String | 概要 | ◯ |
keywords | java.lang.String | キーワード | ◯ |
robots | java.lang.String | 検索エンジンロボット制御 | ◯ |
contents | org.json.JSONObject | レコードコンテンツ | ◯ |
link_status | int | リンク設定値 | ◯ |
owner | java.lang.String | 所有ユーザー名 | × |
modified | com.echopf.ECHODate | 最終更新日時 | × |
modified_user | java.lang.String | 最終更新ユーザー名 | × |
created | com.echopf.ECHODate | 作成日時 | × |
categories | org.json.JSONArray <com.echopf.contents. ECHOContentsCategoryObject> |
所属カテゴリ | ◯ |
変更不可フィールドは、サーバーから提供される静的な情報です。
フィールドからデータを取得する
String(文字列型)のフィールドからデータを取得する
String型のフィールドからデータを取得する場合は、getStringメソッドまたはoptStringメソッドを使用します。
String title = record.getString("title");
int(整数値型)のフィールドからデータを取得する
int型のフィールドからデータを取得する場合は、getIntメソッドまたはoptIntメソッドを使用します。
ECHODate(日時型)のフィールドからデータを取得する
ECHODate型のフィールドからデータを取得する場合は、getDateメソッドまたはoptDateメソッドを使用します。
ECHODate created = record.getDate("created");
JSONObject型のフィールドからデータを取得する
JSONObject型のフィールドからデータを取得するには、getJSONObjectメソッドまたはoptJSONObjectメソッドを使用します。
JSONObject contents = record.getJSONObject("contents");
また、ネストされたフィールドから中身を直接取り出すには、ドット(.)区切りでフィールド名を指定します。
String contents_main = record.getString("contents.main");
JSONArray型のフィールドからデータを取得する
JSONArray型のフィールドからデータを取得するには、getJSONArrayメソッドまたはoptJSONArrayメソッドを使用します。
JSONArray categories = record.getJSONArray("categories");
フィールドにデータをセットする
オブジェクトのフィールドにデータをセットするには、putメソッドまたはputOptメソッドを使用します。
record.put("title", "新しいレコード");
record.put("contents", new JSONObject("{name:\"レコードコンテンツです。\"}"));
アーカイブへレコードデータを保存する
サーバー上のアーカイブへレコードを保存するには、pushメソッド(同期通信による保存)もしくはpushInBackgroundメソッド(非同期通信による保存)を使用します。
ECHORecordObject record = new ECHORecordObject("データベースインスタンスID");
record.put("title", "新しいレコード"); // レコードのタイトルをセット
record.put("refid", "record_xyz"); // レコードIDをセット
....
// 非同期でレコードを保存
record.pushInBackground(new PushCallback<ECHORecordObject>() {@Override // 保存完了後に実行するコールバックメソッドを定義
public void done(ECHORecordObject obj, ECHOException e) {
if(e == null) { // 正常終了
Log.d("Complete", obj.toString());
}else{ // 異常発生
Log.e("Error", e.toString());
}
}});
アーカイブからレコードを取得する
サーバー上のアーカイブに存在する既存のレコードを取得するには、fetchメソッド(同期通信による取得)もしくはfetchInBackgroundメソッド(非同期通信による取得)を使用します。
ECHORecordObject record = new ECHORecordObject("データベースインスタンスID", "レコードID");
// 非同期でレコードデータを取得
record.fetchInBackground(new FetchCallback<ECHORecordObject>() {@Override // 取得完了後に実行するコールバックメソッドを定義
public void done(ECHORecordObject obj, ECHOException e) {
if(e == null) { // 正常終了
Log.d("Complete", obj.toString());
}else{ // 異常発生
Log.e("Error", e.toString());
}
}});
アーカイブからレコードを削除する
サーバー上のアーカイブに存在する既存のレコードを削除するには、deleteメソッド(同期通信による削除)もしくはdeleteInBackgroundメソッド(非同期通信による削除)を使用します。
ECHORecordObject record = new ECHORecordObject("データベースインスタンスID", "レコードID");
// 非同期でレコードデータを削除record.deleteInBackground(new DeleteCallback<ECHORecordObject>() {
@Override // 削除完了後に実行するコールバックメソッドを定義
public void done(ECHORecordObject obj, ECHOException e) {
if(e == null) { // 正常終了
Log.d("Complete", obj.toString());
}else{ // 異常発生
Log.e("Error", e.toString());
}
}});
アーカイブからレコードを検索する
サーバー上のアーカイブからレコードを検索するには、ECHODatabaseQuery.findメソッド(同期通信による検索)もしくはECHODatabaseQuery.findInBackgroundメソッド(非同期通信による検索)を使用します。
検索条件は、第二引数にリスト制御パラメータを指定します。
// 非同期でレコード一覧を取得
ECHODatabaseQuery.findInBackground("データベースインスタンスID", new JSONObject("{q:\"検索キーワード\"}"),
new FindCallback<ECHORecordObject>() {@Override // 取得完了後に実行するコールバックメソッドを定義
public void done(List<ECHORecordObject> objects, ECHOException e) {
if(e == null) { // 正常終了
Log.d("Complete", objects.toString());
}else{ // 異常発生
Log.e("Error", e.toString());
}
}}
);
現在のACLを取得する
オブジェクトに現在設定されているACLを取得するには、getACLメソッドを使用します。
ECHOACLObject current_acl = record.getACL();
ACLを変更する
オブジェクトに新しいACLを設定するには、setNewACLメソッドを使用します。
ECHOACLObject new_acl = new ECHOACLObject(); // ACLオブジェクトを生成
new_acl.putEntryForAll(new ECHOACLEntry(false, false, false, false)); // 例:非ログイン訪問者の操作権限を全て奪う
record.setNewACL(new_acl); // 新しいACLをセット
record.push(); // セットしたACLを反映させるには、最後に必ず保存を実行してください