レコードを操作する(データベースプラグイン)
ここでは、サイトアカウントに存在するデータベースインスタンスを、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 | リンク設定値
|
◯ |
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を反映させるには、最後に必ず保存を実行してください