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

ここでは、サイトアカウントに存在するデータベースインスタンスを、SDKから操作する方法について解説します。

レコードオブジェクトECHORecordObject

ECHORecordObjectは、個別レコードを操作するためのオブジェクトです。

オブジェクトを生成する

新しいレコードとしてオブジェクトを初期化するには、初期化メソッドの第一引数にデータベースインスタンスのIDを指定します。

ECHORecordObject *record = [[ECHORecordObject alloc] initWithInstanceId:@"データベースインスタンスID"];

既存レコードとしてオブジェクトを初期化するには、コンストラクタの第二引数にレコードIDを指定します。

ECHORecordObject *record = [[ECHORecordObject alloc] initWithInstanceId:@"データベースインスタンスID" refid:"レコードID"];

オブジェクトフィールド

レコードオブジェクトは、以下のフィールドを持ちます。

フィールド名説明可変
refid NString レコードID
url NString URL ×
url_path NString URLパス ×
title NString レコードタイトル
description NString 概要
keywords NString キーワード
robots NString 検索エンジンロボット制御
contents NSDictionary レコードコンテンツ
link_status NSNumber リンク設定値
  • 1:通常リンク
  • 2:セキュアリンク
  • -1:リンクしない
modified NSDate 最終更新日時 ×
created NSDate 作成日時 ×
categories NSArray<ECHOContentsCategoryObject> 所属カテゴリ

フィールドからデータを取得する

オブジェクトのフィールドからデータを取得する場合は、objectForKeyメソッドを使用します。

id title = [record objectForKey:@"title"];

フィールドにデータをセットする

オブジェクトのフィールドにデータをセットするには、setObject:forKey:メソッドを使用します。

[record setObject:@"新しいレコード" forKey:@"title"];

[record setObject:@{@"name":@"レコードコンテンツです。"} forKey:@"contents"]; 

レコードを保存する

リモートサーバーへレコードを保存するには、push:メソッド(同期通信による保存)もしくはpushInBackgroundWithBlock:メソッド(非同期通信による保存)を使用します。

ECHORecordObject *record = [[ECHORecordObject alloc] initWithInstanceId:@"データベースインスタンスID"];

[record setObject:@"新しいレコード" forKey:@"title"]; // レコードのタイトルをセット
[record setObject:@"record_xyz" forKey:@"refid"]; // レコードIDをセット
....

// 非同期でレコードを保存
[record pushInBackgroundWithBlock:^(NSError *e) {
            if(e == null) { // 正常終了
                  NSLog(@"Complete: %@", record);
            }else{ // 異常発生
                  NSLog(@"Error: %@", e);
            }
}];

レコードを取得する

リモートサーバーに存在するレコードを取得するには、fetch:メソッド(同期通信による取得)もしくはfetchInBackgroundWithBlock:メソッド(非同期通信による取得)を使用します。

ECHORecordObject *record = [[ECHORecordObject alloc] initWithInstanceId:@"データベースインスタンスID" refid:@"レコードID"];

// 非同期でレコードを取得
[record fetchInBackgroundWithBlock:^(NSError *e) {
            if(e == null) { // 正常終了
                  NSLog(@"Complete: %@", record);
            }else{ // 異常発生
                  NSLog(@"Error: %@", e);
            }
}];

レコードを削除する

リモートサーバーに存在するレコードを削除するには、delete:メソッド(同期通信による削除)もしくはdeleteInBackgroundWithBlock:メソッド(非同期通信による削除)を使用します。

ECHORecordObject *record = [[ECHORecordObject alloc] initWithInstanceId:@"データベースインスタンスID" refid:@"レコードID"];

// 非同期でレコードを削除

[record deleteInBackgroundWithBlock:^(NSError *e) {
            if(e == null) { // 正常終了
                  NSLog(@"Complete");
            }else{ // 異常発生
                  NSLog(@"Error: %@", e);
            }
}];

レコードを検索する

リモートサーバーからレコードを検索するには、[ECHODatabaseQuery find:](同期通信による検索)もしくは[ECHODatabaseQuery findInBackgroundWithBlock:](非同期通信による検索)を使用します。
第二引数にリスト制御パラメータを与えることで、データの検索・抽出条件を指定することが可能です。

// 非同期でレコードを検索
[ECHODatabaseQuery findInBackgroundWithBlock:^(NSArray *objects, NSError *error) {

                  if(e == null) { // 正常終了
                        NSLog(@"Complete: %@", objects);
                  }else{ // 異常発生
                        NSLog(@"Error: %@", e);
                  }
} instanceId:@"データベースインンスタンスID" params:@{@"q":@"検索キーワード"}];

現在のACLを取得する

オブジェクトに現在設定されているACLを取得するには、currentACLプロパティを使用します。

ECHOACLObject *current_acl = record.currentACL;

ACLを変更する

オブジェクトに新しいACLを設定するには、setNewACL:メソッドを使用します。

ECHOACLObject *new_acl = [[ECHOACLObject alloc] init]; // ACLオブジェクトを生成
[new_acl putEntryForAll: [[ECHOACLEntry alloc] initWithGet:NO list:NO edit:NO delete:NO] ]; // 例:非ログイン訪問者の操作権限を全て奪う

[record setNewACL:new_acl]; // 新しいACLをセット

[record push:nil]; // セットしたACLを反映させるには、最後に必ず保存を実行してください