レコードを操作する(データベースプラグイン)

ここでは、サイトアカウントに存在するデータベースインスタンスを、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を反映させるには、最後に必ず保存を実行してください