データ管理

BaaS@rakuzaではクーポンビーコンなどのデータ管理機能を標準で提供していますが、アプリケーションごとに独自のオブジェクトデータを作成することもできます。データ管理機能は、そのオブジェクトデータを管理する基本的な仕組みを提供します。

このページでは、データ管理機能を利⽤する実装例を紹介します。

ヒント

データ管理機能はマスタデータを取り扱います。ユーザーごとにデータを保持する必要がある場合はユーザー管理ユーザー詳細管理コンタクト管理を使用してください。

オブジェクトを作成する

BaaS@rakuzaにおいて、データは「オブジェクト」という単位で構成されています。オブジェクトはリレーショナルデータベースにおける、テーブルのような存在です。

オブジェクトはリレーショナルデータベースのテーブルと同様にスキーマ(オブジェクトの名称、各項目の名称や型などの情報)を事前定義する必要があります。

管理画面の「データ項目管理」→「各種オブジェクト項目設定」を開き、「新規登録」よりオブジェクトの新規登録を行うことができます。

オブジェクト種別で「マスタ」を選択して、「オブジェクトID」と「オブジェクト名称」を入力し、「登録」ボタンをクリックするとオブジェクトが作成されます。

注意

オブジェクトの登録操作完了後、結果がシステムに反映されるまで最大1分間かかります。ご注意ください。

オブジェクト項目を設定する

オブジェクト項目はリレーショナルデータベースにおける、カラムのような存在です。

管理画面の「各種オブジェクト項目設定」より編集したいオブジェクトの「項目設定」を開くと、オブジェクト項目の設定を行うことができます。

オブジェクトを新規した時点でいくつかのオブジェクト項目が設定されていますが、独自のオブジェクト項目を追加することができます。 オブジェクト項目を追加するには、右側のペインより表示タイプ(データ型)を選択します。

これでオブジェクトデータを利⽤する準備が完了しました。

注意

オブジェクト項目設定の変更操作完了後、結果がシステムに反映されるまで最大1分間かかります。ご注意ください。

オブジェクトデータを登録する

オブジェクトへのデータ登録はaddDataメソッドで行います。

object_idには事前に作成していたオブジェクトのオブジェクトIDを設定します。

let objectData = RKZObjectData()
objectData.object_id = "shop"
objectData.name = "People Cafe Kurashiki"
objectData.sort_no = 1
objectData.attributes = [
    "category_cd": "0001" // 独自に追加した項目
]

RKZService.sharedInstance().add(objectData) { statusCode, responseStatus in
    if responseStatus.isSuccess {
        // 成功時
        print("登録完了")
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}
RKZObjectData *objectData = [[RKZObjectData alloc] init];
objectData.object_id = @"shop";
objectData.name = @"People Cafe Kurashiki";
objectData.sort_no = @1;
objectData.attributes = @{
    @"category_cd": @"0001" // 独自に追加した項目
};

[[RKZService sharedInstance] addData:objectData withBlock:^(RKZApiStatusCode statusCode, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        NSLog(@"登録完了");
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];
val objectData = RKZObjectData()
objectData.objectId = "shop"
objectData.name = "People Cafe Kurashiki"
objectData.sortNo = 1
objectData.attributes = mapOf(
    "category_cd" to "0001" // 独自に追加した項目
)

RKZClient.getInstance().addData(objectData) { statusCode, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        Log.d(TAG, "登録完了")
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}
RKZObjectData objectData = new RKZObjectData();
objectData.setObjectId("shop");
objectData.setName("People Cafe Kurashiki");
objectData.setSortNo(1);
objectData.setAttributesValue("category_cd", "0001"); // 独自に追加した項目

RKZClient.getInstance().addData(objectData, new OnAddRKZObjectDataListener() {
    @Override
    public void onAddRKZObjectData(String statusCode, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            Log.d(TAG, "登録完了");
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});
var data = {
  object_id: 'shop',
  name: 'People Cafe Kurashiki',
  sort_no: 1,
  attributes: {
    category_cd: '0001' // 独自に追加した項目
  }
}

RKZClient.addData(data, function (statusCode) {
  // 成功時
  console.debug('登録完了')
}, function (error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
await RKZ.Data.add({
  object_id: 'shop',
  name: 'People Cafe Kurashiki',
  sort_no: 1,
  attributes: {
    category_cd: '0001' // 独自に追加した項目
  }
})
final data = Data();
data.objectId = 'shop';
data.name = 'People Cafe Kurashiki';
data.sortNo = 1;
data.attributes = {
  'category_cd': '0001' // 独自に追加した項目
};
await RKZClient.instance.addData(data);

管理画面の「データ管理」→「<登録したオブジェクト名称>」を開くと、登録したオブジェクトデータを確認することができます。

ヒント

アプリケーションで独自に追加した項目はattributesというプロパティに設定する必要があります。

オブジェクトデータを1件取得する

オブジェクトデータの1件取得はgetDataメソッドで⾏います。

登録したオブジェクトデータのコードを条件に1件データを取得します。

// code=0001のデータ1件を取得
RKZService.sharedInstance().getData("shop", code: "0001") { objectData, responseStatus in
    if responseStatus.isSuccess, let objectData = objectData {
        // 成功時
        print("code:", objectData.code ?? "")
        print("name:", objectData.name ?? "")
        print("category_cd:", objectData.attributes?["category_cd"] ?? "")
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}
// code=0001のデータ1件を取得
[[RKZService sharedInstance] getData:@"shop" code:@"0001" withBlock:^(RKZObjectData * _Nullable objectData, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        NSLog(@"code: %@", objectData.code);
        NSLog(@"name: %@", objectData.name);
        NSLog(@"category_cd: %@", objectData.attributes[@"category_cd"]);
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];
// code=0001のデータ1件を取得
RKZClient.getInstance().getData("shop", "0001") { objectData, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        Log.d(TAG, "code: ${objectData.code}")
        Log.d(TAG, "name: ${objectData.name}")
        Log.d(TAG, "category_cd: ${objectData.attributes["category_cd"]}")
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}
// code=0001のデータ1件を取得
RKZClient.getInstance().getData("shop", "0001", new OnGetRKZObjectDataListener() {
    @Override
    public void onGetRKZObjectData(RKZObjectData objectData, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            Log.d(TAG, "code: " + objectData.getCode());
            Log.d(TAG, "name: " + objectData.getName());
            Log.d(TAG, "category_cd: " + objectData.getAttributesValueString("category_cd"));
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});
// code=0001のデータ1件を取得
RKZClient.getData('shop', '0001', function (data) {
  // 成功時
  console.debug('code:', data.code)
  console.debug('name:', data.name)
  console.debug('category_cd:', data.attributes.category_cd)
}, function (error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
// code=0001のデータ1件を取得
const data = await RKZ.Data.get('shop', '0001')

console.debug('code:', data.code)
console.debug('name:', data.name)
console.debug('category_cd:', data.attributes.category_cd)
// code=0001のデータ1件を取得
final data = await RKZClient.instance.getData('shop', '0001');

print('code: ${data.code}');
print('name: ${data.name}');
print('category_cd: ' + data.attributes?['category_cd']);

ヒント

アプリケーションで独自に追加した項目はattributesというプロパティに設定されて返ってきます。

オブジェクトデータを更新する

オブジェクトへのデータ更新はeditDataメソッドで行います。

更新したいオブジェクトデータのコードを条件に1件データを更新します。

let objectData = RKZObjectData()
objectData.object_id = "shop"
objectData.code = "0001" // 更新対象のコードを指定する
objectData.name = "People Cafe Okayama"
objectData.attributes = [
    "category_cd": "0002"
]

RKZService.sharedInstance().edit(objectData) { statusCode, responseStatus in
    if responseStatus.isSuccess {
        // 成功時
        print("更新完了")
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}
RKZObjectData *objectData = [[RKZObjectData alloc] init];
objectData.object_id = @"shop";
objectData.code = @"0001"; // 更新対象のコードを指定する
objectData.name = @"People Cafe Okayama";
objectData.attributes = @{
    @"category_cd": @"0002"
};

[[RKZService sharedInstance] editData:objectData withBlock:^(RKZApiStatusCode statusCode, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        NSLog(@"更新完了");
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];
val objectData = RKZObjectData()
objectData.objectId = "shop"
objectData.code = "0001" // 更新対象のコードを指定する
objectData.name = "People Cafe Okayama"
objectData.attributes = mapOf(
    "category_cd" to "0002" // 独自に追加した項目
)

RKZClient.getInstance().editData(objectData) { statusCode, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        Log.d(TAG, "更新完了")
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}
RKZObjectData objectData = new RKZObjectData();
objectData.setObjectId("shop");
objectData.setCode("0001"); // 更新対象のコードを指定する
objectData.setName("People Cafe Okayama");
objectData.setAttributesValue("category_cd", "0002");

RKZClient.getInstance().editData(objectData, new OnEditRKZObjectDataListener() {
    @Override
    public void onEditRKZObjectData(String statusCode, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            Log.d(TAG, "更新完了");
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});
var data = {
  object_id: 'shop',
  code: '0001', // 更新対象のコードを指定する
  name: 'People Cafe Okayama',
  attributes: {
    category_cd: '0002'
  }
}

RKZClient.editData(data, function (statusCode) {
  // 成功時
  console.debug('更新完了')
}, function (error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
await RKZ.Data.edit({
  object_id: 'shop',
  code: '0001', // 更新対象のコードを指定する
  name: 'People Cafe Okayama',
  attributes: {
    category_cd: '0002'
  }
})
final data = Data();
data.objectId = 'shop';
data.code = '0001'; // 更新対象のコードを指定する
data.name = 'People Cafe Okayama';
data.attributes = {
  'category_cd': '0002'
};
await RKZClient.instance.editData(data);

オブジェクトデータを削除する

オブジェクトデータの削除はdeleteDataメソッド(JavaScript・FlutterはDataQuery.deleteメソッド)で⾏います。

削除するデータの検索条件を指定することができます。指定可能な条件については検索条件を参照してください。

let objectId = "shop"

// 削除対象の検索条件
let searchConditions = [
    // code=0001のデータ1件を削除
    RKZSearchCondition(RKZSearchConditionEqual, searchColumn: "code", searchValueArray: ["0001"])
]

RKZService.sharedInstance().deleteData(objectId, searchConditions: searchConditions) { deleteCount, responseStatus in
    if responseStatus.isSuccess {
        // 成功時
        print("deleteCount:", deleteCount)
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}
NSString *objectId = @"shop";

// 削除対象の検索条件
NSArray<RKZSearchCondition *> *searchConditions = @[
    // code=0001のデータ1件を削除
    [[RKZSearchCondition alloc] initWithSearchConditionType:RKZSearchConditionEqual searchColumn:@"code" searchValueArray:@[@"0001"]]
];

[[RKZService sharedInstance] deleteData:objectId searchConditions:searchConditions withBlock:^(NSNumber * _Nonnull deleteCount, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        NSLog(@"deleteCount: %@", deleteCount);
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];
val objectId = "shop"

// 削除対象の検索条件
val searchConditions = listOf(
    // code=0001のデータ1件を削除
    RKZSearchCondition(RKZSearchCondition.EQUAL, "code", listOf("0001"))
)

RKZClient.getInstance().deleteData(objectId, searchConditions) { deleteCount, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        Log.d(TAG, "deleteCount: $deleteCount")
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}
String objectId = "shop";

// 削除対象の検索条件
List<RKZSearchCondition> searchConditions = Arrays.asList(
    // code=0001のデータ1件を削除
    new RKZSearchCondition(RKZSearchCondition.EQUAL, "code", Arrays.asList("0001"))
);

RKZClient.getInstance().deleteData(objectId, searchConditions, new OnDeleteDataListener() {
    @Override
    public void onDeleteData(Integer deleteCount, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            Log.d(TAG, "deleteCount: " + deleteCount);
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});
var objectId = 'shop'

// 削除対象の検索条件
var searchConditions = [
  // code=0001のデータ1件を削除
  RKZSearchCondition.equal('code', '0001')
]

RKZClient.deleteData(objectId, searchConditions, function(deleteCount) {
  // 成功時
  console.debug('deleteCount:', deleteCount)
}, function(error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
const count = await RKZ.Data.query('shop')
    .equalTo('code', '0001') // code=0001のデータ1件を削除
    .delete()
console.debug('count:', count)
final query = await RKZClient.instance.dataQuery('shop')
  ..equalTo('code', '0001'); // code=0001のデータ1件を削除
final count = await query.delete();
print('count: $count');

v3.1.0(v2.6.0)より、条件を指定しない場合はエラーになります。すべてのデータを削除するには、deleteAllDataメソッドを使用してください。

let objectId = "shop"

RKZService.sharedInstance().deleteAllData(objectId) { deleteCount, responseStatus in
    if responseStatus.isSuccess {
        // 成功時
        print("deleteCount:", deleteCount)
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}
NSString *objectId = @"shop";

[[RKZService sharedInstance] deleteAllData:objectId withBlock:^(NSNumber * _Nonnull deleteCount, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        NSLog(@"deleteCount: %@", deleteCount);
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];
val objectId = "shop"

RKZClient.getInstance().deleteAllData(objectId) { deleteCount, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        Log.d(TAG, "deleteCount: $deleteCount")
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}
String objectId = "shop";

RKZClient.getInstance().deleteAllData(objectId, new OnDeleteDataListener() {
    @Override
    public void onDeleteData(Integer deleteCount, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            Log.d(TAG, "deleteCount: " + deleteCount);
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});
var objectId = 'shop'

RKZClient.deleteAllData(objectId, function(deleteCount) {
  // 成功時
  console.debug('deleteCount:', deleteCount)
}, function(error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
const count = await RKZ.Data.deleteAll('shop')
console.debug('count:', count)
final query = await RKZClient.instance.deleteAllData('shop');
final count = await query.delete();
print('count: $count');

注意

v3.1.0(v2.6.0)未満までは、条件を指定しない場合、すべてのデータが削除されます。

オブジェクトデータを検索する

オブジェクトデータの検索はgetDataListメソッド(JavaScript・FlutterはDataQuery.findメソッド)で⾏います。

検索条件、ソート条件を指定することができます。指定可能な条件については検索条件ソート条件を参照してください。

let objectId = "shop"

// 検索条件
let searchConditions = [
    // categoryが"0001"のレコードに絞り込む
    RKZSearchCondition(RKZSearchConditionEqual, searchColumn: "category_cd", searchValueArray: ["0001"])
]
// ソート条件
let sortConditions = [
    // nameの昇順にソート
    RKZSortCondition(RKZSortTypeAsc, sortColumn: "name")
]

// 検索を実行
RKZService.sharedInstance().getDataList(objectId, searchConditionArray: searchConditions, sortConditionArray: sortConditions) { dataList, responseStatus in
    if responseStatus.isSuccess {
        // 成功時
        dataList.forEach { item in
            print("code:", item.code ?? "")
            print("name:", item.name ?? "")
            print("category_cd:", item.attributes?["category_cd"] ?? "")
        }
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}
NSString *objectId = @"shop";

// 検索条件
NSArray<RKZSearchCondition *> *searchConditions = @[
    // categoryが"0001"のレコードに絞り込む
    [[RKZSearchCondition alloc] initWithSearchConditionType:RKZSearchConditionEqual searchColumn:@"category_cd" searchValueArray:@[@"0001"]]
];
// ソート条件
NSArray<RKZSortCondition *> *sortConditions = @[
    // nameの昇順にソート
    [[RKZSortCondition alloc] initWithSortType:RKZSortTypeAsc sortColumn:@"name"]
];

// 検索を実行
[[RKZService sharedInstance] getDataList:objectId searchConditionArray:searchConditions sortConditionArray:sortConditions withBlock:^(NSArray<RKZObjectData *> * _Nonnull dataList, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        for (RKZObjectData *item in dataList) {
            NSLog(@"code: %@", item.code);
            NSLog(@"name: %@", item.name);
            NSLog(@"category_cd: %@", item.attributes[@"category_cd"]);
        }
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];
val objectId = "shop"

// 検索条件
val searchConditions = listOf(
    // categoryが"0001"のレコードに絞り込む
    RKZSearchCondition(RKZSearchCondition.EQUAL, "category_cd", listOf("0001"))
)
// ソート条件
val sortConditions = listOf(
    // nameの昇順にソート
    RKZSortCondition(RKZSortCondition.ASC, "name")
)

// 検索を実行
RKZClient.getInstance().getDataList(objectId, searchConditions, sortConditions) { dataList, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        dataList.forEach {
            Log.d(TAG, "code: ${it.code}")
            Log.d(TAG, "name: ${it.name}")
            Log.d(TAG, "category_cd: ${it.attributes["category_cd"]}")
        }
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}
String objectId = "shop";

// 検索条件
List<RKZSearchCondition> searchConditions = Arrays.asList(
    // categoryが"0001"のレコードに絞り込む
    new RKZSearchCondition(RKZSearchCondition.EQUAL, "category_cd", Arrays.asList("0001"))
);
// ソート条件
List<RKZSortCondition> sortConditions = Arrays.asList(
    // nameの昇順にソート
    new RKZSortCondition(RKZSortCondition.ASC, "name")
);

// 検索を実行
RKZClient.getInstance().getDataList(objectId, searchConditions, sortConditions, new OnGetRKZObjectDataListListener() {
    @Override
    public void onGetRKZObjectDataList(List<RKZObjectData> dataList, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            for (RKZObjectData item : dataList) {
                Log.d(TAG, "code: " + item.getCode());
                Log.d(TAG, "name: " + item.getName());
                Log.d(TAG, "category_cd: " + item.getAttributesValueString("category_cd"));
            }
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});
var objectId = 'shop'

// 検索条件
var searchConditions = [
  // categoryが"0001"のレコードに絞り込む
  RKZSearchCondition.equal('category_cd', '0001')
]
// ソート条件
var sortConditions = [
  // nameの昇順にソート
  RKZSortCondition.asc('name')
]

RKZClient.getDataList(objectId, searchConditions, sortConditions, function(dataList) {
  // 成功時
  dataList.forEach(function (item) {
    console.debug('code:', item.code)
    console.debug('name:', item.name)
    console.debug('category_cd:', item.attributes.category_cd)
  })
}, function(error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
const objectId = 'shop'
const dataResult = await RKZ.Data.query(objectId)
    .equalTo('category_cd', '0001') // categoryが"0001"のレコードに絞り込む
    .asc('name') // nameの昇順にソート
    .find() // 検索を実行

dataResult.data.forEach(item => {
  console.debug('code:', item.code)
  console.debug('name:', item.name)
  console.debug('category_cd:', item.attributes.category_cd)
})
final objectId = 'shop';
final query = RKZClient.instance.dataQuery(objectId)
  ..equalTo('category_cd', '0001') // categoryが"0001"のレコードに絞り込む
  ..asc('name'); // nameの昇順にソート
final dataResult = await query.find();

dataResult.data.forEach((item) {
  print('code: ${item.code}');
  print('name: ${item.name}');
  print('category_cd: ' + item.attributes?['category_cd']);
});

関連オブジェクトを取得する

オブジェクト項目の表示タイプ(データ型)が「セレクトボックス」、「ラジオボタン」、「チェックボックス」の場合、選択肢としてオブジェクトを設定することができます。これを「関連オブジェクト」といいます。

関連オブジェクトのオブジェクト項目は標準でcodenameのみ取得することができます。

例えば、category_cdというオブジェクト項目に関連オブジェクトが設定されている場合、関連オブジェクトのcodecategory_cdに、namecategory_cd_name<項目名称>_name)に設定されて返却されます。

{
  "code": "0001",
  "name": "People Cafe Kurashiki",
  "attributes": {
    "category_cd": "0001",
    "category_cd_name": "飲食店"
  }
}

codename以外の関連オブジェクトのオブジェクト項目を取得する場合は、getDataWithRelationObjectsgetDataListWithRelationObjectsメソッド(JavaScript・FlutterはDataQuery.findWithRelationメソッド)を使用します。

let objectId = "shop"
let treeCount: NSNumber = 2 // 2階層分取得します(階層を指定しない場合、標準で3階層取得します)

RKZService.sharedInstance().getDataList(withRelationObjects: objectId, treeCount: treeCount, searchConditionArray: nil, sortConditionArray: nil) { dataList, responseStatus in
    if responseStatus.isSuccess {
        // 成功時
        dataList.forEach { item in
            print("code:", item.code ?? "")
            print("name:", item.name ?? "")
            print("category_cd:", item.attributes?["category_cd"] ?? "")
            print("category_cd_name:", item.attributes?["category_cd_name"] ?? "")
            print("category_cd_objects:", item.attributes?["category_cd_objects"] ?? "")
        }
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}
NSString *objectId = @"shop";
NSNumber *treeCount = @2; // 2階層分取得します(階層を指定しない場合、標準で3階層取得します)

[[RKZService sharedInstance] getDataListWithRelationObjects:objectId treeCount:treeCount searchConditionArray:nil sortConditionArray:nil withBlock:^(NSArray<RKZObjectData *> * _Nonnull dataList, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        for (RKZObjectData *item in dataList) {
            NSLog(@"code: %@", item.code);
            NSLog(@"name: %@", item.name);
            NSLog(@"category_cd: %@", item.attributes[@"category_cd"]);
            NSLog(@"category_cd_name: %@", item.attributes[@"category_cd_name"]);
            NSLog(@"category_cd_objects: %@", item.attributes[@"category_cd_objects"]);
        }
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];
val objectId = "shop"
val treeCount = 2 // 2階層分取得します(階層を指定しない場合、標準で3階層取得します)

RKZClient.getInstance().getDataListWithRelationObjects(objectId, treeCount, null, null) { dataList, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        dataList.forEach {
            Log.d(TAG, "code: ${it.code}")
            Log.d(TAG, "name: ${it.name}")
            Log.d(TAG, "category_cd: ${it.attributes["category_cd"]}")
            Log.d(TAG, "category_cd_name: ${it.attributes["category_cd_name"]}")
            Log.d(TAG, "category_cd_objects: ${it.attributes["category_cd_objects"]}")
        }
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}
String objectId = "shop";
Integer treeCount = 2; // 2階層分取得します(階層を指定しない場合、標準で3階層取得します)

RKZClient.getInstance().getDataListWithRelationObjects(objectId, treeCount, null, null, new OnGetRKZObjectDataListListener() {
    @Override
    public void onGetRKZObjectDataList(List<RKZObjectData> dataList, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            for (RKZObjectData item : dataList) {
                Log.d(TAG, "code: " + item.getCode());
                Log.d(TAG, "name: " + item.getName());
                Log.d(TAG, "category_cd: " + item.getAttributesValueString("category_cd"));
                Log.d(TAG, "category_cd_name: " + item.getAttributesValueString("category_cd_name"));
                Log.d(TAG, "category_cd_objects: " + item.getAttributesValue("category_cd_objects"));
            }
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});
var objectId = 'shop'
var treeCount = 2 // 2階層分取得します(階層を指定しない場合、標準で3階層取得します)

RKZClient.getDataListWithRelationObjects(objectId, treeCount, null, null, function(dataList) {
  // 成功時
  dataList.forEach(function (item) {
    console.debug('code:', item.code)
    console.debug('name:', item.name)
    console.debug('category_cd:', item.attributes.category_cd)
    console.debug('category_cd_name:', item.attributes.category_cd_name)
    console.debug('category_cd_objects:', item.attributes.category_cd_objects)
  })
}, function(error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
const objectId = 'shop'
const treeCount = 2 // 2階層分取得します
const dataResult = await RKZ.Data.query(objectId)
    .findWithRelation(treeCount) // 階層を指定しない場合、標準で3階層取得します

dataResult.data.forEach(item => {
  console.debug('code:', item.code)
  console.debug('name:', item.name)
  console.debug('category_cd:', item.attributes.category_cd)
  console.debug('category_cd_name:', item.attributes.category_cd_name)
  console.debug('category_cd_objects:', item.attributes.category_cd_objects)
})
final objectId = 'shop';
final treeCount = 2; // 2階層分取得します
final dataResult = await RKZClient.instance.dataQuery(objectId)
    .findWithRelation(treeCount: treeCount);

dataResult.data.forEach((item) {
  print('code: ${item.code}');
  print('name: ${item.name}');
  print('category_cd: ' + item.attributes?['category_cd']);
  print('category_cd_name: ' + item.attributes?['category_cd_name']);
  print('category_cd_objects: ' + item.attributes?['category_cd_objects']);
});

関連オブジェクトのオブジェクト項目はcategory_cd_objects<項目名称>_objects)に設定されて返却されます。

category_cd_objectsが配列であることに注意してください。セレクトボックスとラジオボタンの場合は関連オブジェクトのデータは0または1件ですが、チェックボックスの場合は2件以上設定されることがあります。

注意

このメソッドは比較的負荷の高い処理です。そのため、関連オブジェクトのオブジェクト項目が不要な場合はgetDatagetDataListメソッドを使用してください。

位置情報でオブジェクトデータを検索する

位置情報を利⽤してレコードを取得する場合は、getDataWithLocationgetDataListWithLocationメソッド(JavaScript・FlutterはDataQuery.findByLocationメソッド)を使用します。

引数に渡すlocationlatitudelongitudeとスポットオブジェクトの緯度経度を比較して、距離が近い順番に並び替えて返却します。

また、locationrangeを指定すると、locationlatitudelongitudeを中心地とした半径range内に該当するスポットを抽出します。

位置情報を利⽤してデータを抽出する場合、取得対象となるデータオブジェクトにスポットオブジェクトが関連付けされている必要があります。スポットオブジェクトが関連付けされているオブジェクト項目に対して検索を実⾏します。

let objectId = "shop"
let location = RKZLocation(
    latitude: 34.601929, // 検索する中心点の緯度
    longitude: 133.765777, // 検索する中心点の経度
    range: 0.2 // 検索する中心点からの半径。単位はkm
)

RKZService.sharedInstance().getDataList(withLocation: objectId, location: location, searchConditionArray: nil, sortConditionArray: nil) { dataList, responseStatus in
    if responseStatus.isSuccess {
        // 成功時
        dataList.forEach { item in
            print("code:", item.code ?? "")
            print("name:", item.name ?? "")
            print("spot_cd:", item.attributes?["spot_cd"] ?? "")
            print("spot_cd_objects:", item.attributes?["spot_cd_objects"] ?? "")
        }
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}
NSString *objectId = @"shop";
RKZLocation *location = [[RKZLocation alloc] initWithLatitude:@34.601929 // 検索する中心点の緯度
                                                    longitude:@133.765777 // 検索する中心点の経度
                                                        range:@0.2]; // 検索する中心点からの半径。単位はkm

[[RKZService sharedInstance] getDataListWithLocation:objectId location:location searchConditionArray:nil sortConditionArray:nil withBlock:^(NSArray<RKZObjectData *> * _Nonnull dataList, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        for (RKZObjectData *item in dataList) {
            NSLog(@"code: %@", item.code);
            NSLog(@"name: %@", item.name);
            NSLog(@"spot_cd: %@", item.attributes[@"spot_cd"]);
            NSLog(@"spot_cd_objects: %@", item.attributes[@"spot_cd_objects"]);
        }
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];
val objectId = "shop"
val location = RKZLocation()
location.latitude = 34.601929 // 検索する中心点の緯度
location.longitude = 133.765777 // 検索する中心点の経度
location.range = 0.2 // 検索する中心点からの半径。単位はkm

RKZClient.getInstance().getDataListWithLocation(objectId, location, null, null) { dataList, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        dataList.forEach {
            Log.d(TAG, "code: ${it.code}")
            Log.d(TAG, "name: ${it.name}")
            Log.d(TAG, "spot_cd: ${it.attributes["spot_cd"]}")
            Log.d(TAG, "spot_cd_objects: ${it.attributes["spot_cd_objects"]}")
        }
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}
String objectId = "shop";
RKZLocation location = new RKZLocation();
location.setLatitude(34.601929); // 検索する中心点の緯度
location.setLongitude(133.765777); // 検索する中心点の経度
location.setRange(0.2); // 検索する中心点からの半径。単位はkm

RKZClient.getInstance().getDataListWithLocation(objectId, location, null, null, new OnGetRKZObjectDataListListener() {
    @Override
    public void onGetRKZObjectDataList(List<RKZObjectData> dataList, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            for (RKZObjectData item : dataList) {
                Log.d(TAG, "code: " + item.getCode());
                Log.d(TAG, "name: " + item.getName());
                Log.d(TAG, "spot_cd: " + item.getAttributesValueString("spot_cd"));
                Log.d(TAG, "spot_cd_objects: " + item.getAttributesValue("spot_cd_objects"));
            }
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});
var objectId = 'shop'
var location = {
  latitude: 34.601929, // 検索する中心点の緯度
  longitude: 133.765777, // 検索する中心点の経度
  range: 0.2 // 検索する中心点からの半径。単位はkm
}

RKZClient.getDataListWithLocation(objectId, location, null, null, function(dataList) {
  // 成功時
  dataList.forEach(function (item) {
    console.debug('code:', item.code)
    console.debug('name:', item.name)
    console.debug('spot_cd:', item.attributes.spot_cd)
    console.debug('spot_cd_objects:', item.attributes.spot_cd_objects)
  })
}, function(error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
const objectId = 'shop'
const location = {
  latitude: 34.601929, // 検索する中心点の緯度
  longitude: 133.765777, // 検索する中心点の経度
  range: 0.2 // 検索する中心点からの半径。単位はkm
}
const dataResult = await RKZ.Data.query(objectId).findByLocation(location)

dataResult.data.forEach(item => {
  console.debug('code:', item.code)
  console.debug('name:', item.name)
  console.debug('spot_cd:', item.attributes.spot_cd)
  console.debug('spot_cd_objects:', item.attributes.spot_cd_objects)
})
final objectId = 'shop';
final location = RKZLocation(
  latitude: 34.601929, // 検索する中心点の緯度
  longitude: 133.765777, // 検索する中心点の経度
  range: 0.2 // 検索する中心点からの半径。単位はkm
);
final dataResult = await RKZClient.instance.dataQuery(objectId)
    .findByLocation(location: location);

dataResult.data.forEach((item) {
  print('code: ${item.code}');
  print('name: ${item.name}');
  print('spot_cd: ' + item.attributes?['spot_cd']);
  print('spot_cd_objects: ' + item.attributes?['spot_cd_objects']);
});

スポットオブジェクトはspot_cd_objectsに設定されて返却されます。また、引数に渡すlocationlatitudelongitudeとスポットオブジェクトの緯度経度の距離がspot_cd_objects.distanceに設定されて返却されます。

データオブジェクトに複数のスポットオブジェクトを関連付けている場合、検索する対象のフィールドをspotFieldNameで指定することができます。

let spotFieldName = "spot_cd" // スポットオブジェクトが関連付けされた項目名称

RKZService.sharedInstance().getDataList(withLocation: objectId, location: location, spotFieldName: spotFieldName, searchConditionArray: nil, sortConditionArray: nil) { dataList, responseStatus in
    // ...
}
NSString *spotFieldName = @"spot_cd"; // スポットオブジェクトが関連付けされた項目名称

[[RKZService sharedInstance] getDataListWithLocation:objectId location:location spotFieldName:spotFieldName searchConditionArray:nil sortConditionArray:nil withBlock:^(NSArray<RKZObjectData *> * _Nonnull dataList, RKZResponseStatus * _Nonnull responseStatus) {
    // ...
}];
val spotFieldName = "spot_cd" // スポットオブジェクトが関連付けされた項目名称

RKZClient.getInstance().getDataListWithLocation(objectId, location, spotFieldName, null, null) { dataList, rkzResponseStatus ->
    // ...
}
String spotFieldName = "spot_cd"; // スポットオブジェクトが関連付けされた項目名称

RKZClient.getInstance().getDataListWithLocation(objectId, location, spotFieldName, null, null, new OnGetRKZObjectDataListListener() {
    @Override
    public void onGetRKZObjectDataList(List<RKZObjectData> dataList, RKZResponseStatus rkzResponseStatus) {
        // ...
    }
});
var spotFieldName = 'spot_cd' // スポットオブジェクトが関連付けされた項目名称

RKZClient.getDataListWithLocation(objectId, location, spotFieldName, null, null, function(dataList) {
  // ...
}, function(error) {
  // ...
})
const spotFieldName = 'spot_cd' // スポットオブジェクトが関連付けされた項目名称

const dataResult = await RKZ.Data.query(objectId)
    .findByLocation(location, spotFieldName)
final spotFieldName = 'spot_cd'; // スポットオブジェクトが関連付けされた項目名称

final dataResult = await RKZClient.instance.dataQuery(objectId)
    .findByLocation(location: location, spotFieldName: spotFieldName);

ヒント

スポットオブジェクトは位置に関する情報を扱う標準のオブジェクトです。ビーコンや地理的座標(緯度、経度)などを設定することができます。

ページング機能を利⽤してオブジェクトデータを検索する

データオブジェクトからレコードを取得するときに、ページング機能を利⽤すると「取得するレコードの開始位置」、「取得するレコードの件数」といったレコードを分割して取得するための条件を指定することができます。

取得結果には条件に該当したレコードのほかに、指定された条件に該当したデータの総件数も取得することができます。

ページングを利⽤してレコードを取得する場合は、getPaginateDataListgetPaginateDataListWithRelationObjectsgetPaginateDataListWithLocationメソッド(JavaScript・FlutterはDataQuery.findDataQuery.findWithRelationDataQuery.findByLocationメソッド)を使用します。目的に応じて、ページング用のメソッドを使用してください。

let objectId = "shop"
let limit: NSNumber = 10 // 取得するデータの件数を指定します
let offset: NSNumber = 0 // データの取得位置を指定します

RKZService.sharedInstance().getPaginateDataList(objectId, limit: limit, offset: offset, searchConditionArray: nil, sortConditionArray: nil) { pagingData, responseStatus in
    if responseStatus.isSuccess {
        // 成功時
        print("result_cnt:", pagingData.result_cnt)
        print("data:", pagingData.datas)
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}
NSString *objectId = @"shop";
NSNumber *limit = @10; // 取得するデータの件数を指定します
NSNumber *offset = @0; // データの取得位置を指定します

[[RKZService sharedInstance] getPaginateDataList:objectId limit:limit offset:offset searchConditionArray:nil sortConditionArray:nil withBlock:^(RKZPagingData<RKZObjectData *> * _Nonnull pagingData, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        NSLog(@"result_cnt: %@", pagingData.result_cnt);
        NSLog(@"data: %@", pagingData.datas);
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];
val objectId = "shop"
val limit = 10 // 取得するデータの件数を指定します
val offset = 0 // データの取得位置を指定します

RKZClient.getInstance().getPaginateDataList(objectId, limit, offset, null, null) { pagingData, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        Log.d(TAG, "resultCnt: ${pagingData.resultCnt}")
        Log.d(TAG, "data: ${pagingData.datas}")
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}
String objectId = "shop";
Integer limit = 10; // 取得するデータの件数を指定します
Integer offset = 0; // データの取得位置を指定します

RKZClient.getInstance().getPaginateDataList(objectId, limit, offset, null, null, new OnGetPagingDataListener<RKZObjectData>() {
    @Override
    public void onGetPagingData(PagingData<RKZObjectData> pagingData, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            Log.d(TAG, "resultCnt: " + pagingData.getResultCnt());
            Log.d(TAG, "data: " + pagingData.getDatas());
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});
var objectId = 'shop'
var limit = 10 // 取得するデータの件数を指定します
var offset = 0 // データの取得位置を指定します

RKZClient.getPaginateDataList(objectId, limit, offset, null, null, function(pagingData) {
  // 成功時
  console.debug('result_cnt:', pagingData.result_cnt)
  console.debug('data:', pagingData.datas)
}, function(error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
const objectId = 'shop'
const dataResult = await RKZ.Data.query(objectId)
    .offset(0) // データの取得位置を指定します
    .limit(10) // 取得するデータの件数を指定します
    .find() // 検索を実行

console.debug('result_cnt:', dataResult.result_cnt)
console.debug('data:', dataResult.data)
final objectId = 'shop';
final query = RKZClient.instance.dataQuery(objectId)
  ..offset = 0 // データの取得位置を指定します
  ..limit = 10; // 取得するデータの件数を指定します
final dataResult = await query.find(); // 検索を実行

print('resultCnt: ${dataResult.resultCnt}');
print('data: ${dataResult.data}');

オブジェクトデータをお気に入りに追加する

「お気に入り」とはユーザーごとに特定のオブジェクトデータをマーク付けする機能です。

この機能を使用することで、ユーザーが保存したオブジェクトデータをマイページに表示したり、オブジェクトデータごとにお気に入り追加したユーザー数を表示することができます。

お気に入りに追加するにはaddObjectDataToFavoriteメソッドを使用します。

let userAccessToken = "xxx"

let objectData = RKZObjectData()
objectData.object_id = "shop"
objectData.code = "0001" // お気に入りに追加するコードを指定する

RKZService.sharedInstance().addObjectDataToFavorite(objectData, userAccessToken: userAccessToken) { statusCode, responseStatus in
    if responseStatus.isSuccess {
        // 成功時
        print("追加完了")
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}
NSString *userAccessToken = @"xxx";

RKZObjectData *objectData = [[RKZObjectData alloc] init];
objectData.object_id = @"shop";
objectData.code = @"0001"; // お気に入りに追加するコードを指定する

[[RKZService sharedInstance] addObjectDataToFavorite:objectData userAccessToken:userAccessToken withBlock:^(RKZApiStatusCode statusCode, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        NSLog(@"追加完了");
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];
val userAccessToken = "xxx"

val objectData = RKZObjectData()
objectData.objectId = "shop"
objectData.code = "0001" // お気に入りに追加するコードを指定する

RKZClient.getInstance().addObjectDataToFavorite(objectData, userAccessToken) { rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        Log.d(TAG, "追加完了")
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}
String userAccessToken = "xxx";

RKZObjectData objectData = new RKZObjectData();
objectData.setObjectId("shop");
objectData.setCode("0001"); // お気に入りに追加するコードを指定する

RKZClient.getInstance().addObjectDataToFavorite(objectData, userAccessToken, new OnAddFavoriteListener() {
    @Override
    public void onAddFavorite(RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            Log.d(TAG, "追加完了");
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});
var userAccessToken = 'xxx'

var data = {
  object_id: 'shop',
  code: '0001' // お気に入りに追加するコードを指定する
}

RKZClient.addObjectDataToFavorite(data, userAccessToken, function (statusCode) {
  // 成功時
  console.debug('追加完了')
}, function (error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
});
const userAccessToken = 'xxx'
const objectId = 'shop'
const code = '0001' // お気に入りに追加するコードを指定する

await RKZ.Data.addToFavorite(userAccessToken, objectId, code)
final userAccessToken = 'xxx';
final objectId = 'shop';
final code = '0001'; // お気に入りに追加するコードを指定する

await RKZClient.instance.addDataToFavorite(userAccessToken, objectId, code);

オブジェクトデータをお気に入りから削除する

お気に入りから削除するにはaddObjectDataToFavoriteメソッドを使用します。

let userAccessToken = "xxx"

let objectData = RKZObjectData()
objectData.object_id = "shop"
objectData.code = "0001" // お気に入りから削除するコードを指定する

RKZService.sharedInstance().deleteObjectDataFromFavorite(objectData, userAccessToken: userAccessToken) { statusCode, responseStatus in
    if responseStatus.isSuccess {
        // 成功時
        print("削除完了")
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}
NSString *userAccessToken = @"xxx";

RKZObjectData *objectData = [[RKZObjectData alloc] init];
objectData.object_id = @"shop";
objectData.code = @"0001"; // お気に入りから削除するコードを指定する

[[RKZService sharedInstance] deleteObjectDataFromFavorite:objectData userAccessToken:userAccessToken withBlock:^(RKZApiStatusCode statusCode, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        NSLog(@"削除完了");
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];
val userAccessToken = "xxx"

val objectData = RKZObjectData()
objectData.objectId = "shop"
objectData.code = "0001" // お気に入りから削除するコードを指定する

RKZClient.getInstance().deleteObjectDataFromFavorite(objectData, userAccessToken) { rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        Log.d(TAG, "削除完了")
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}
String userAccessToken = "xxx";

RKZObjectData objectData = new RKZObjectData();
objectData.setObjectId("shop");
objectData.setCode("0001"); // お気に入りから削除するコードを指定する

RKZClient.getInstance().deleteObjectDataFromFavorite(objectData, userAccessToken, new OnDeleteFavoriteListener() {
    @Override
    public void onDeleteFavorite(RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            Log.d(TAG, "削除完了");
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});
var userAccessToken = 'xxx'

var data = {
  object_id: 'shop',
  code: '0001' // お気に入りから削除するコードを指定する
}

RKZClient.deleteObjectDataFromFavorite(data, userAccessToken, function (statusCode) {
  // 成功時
  console.debug('削除完了')
}, function (error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
});
const userAccessToken = 'xxx'
const objectId = 'shop'
const code = '0001' // お気に入りから削除するコードを指定する

await RKZ.Data.deleteFromFavorite(userAccessToken, objectId, code)
final userAccessToken = 'xxx';
final objectId = 'shop';
final code = '0001'; // お気に入りから削除するコードを指定する

await RKZClient.instance.deleteDataFromFavorite(userAccessToken, objectId, code);

お気に⼊り追加したオブジェクトデータを検索する

オブジェクトデータを検索する際にお気に⼊り情報を一緒に取得するには、ユーザーアクセストークンを指定して、show_favoritetrueにします。(JavaScript・FlutterはDataQuery.withFavoriteメソッドを呼び出してください)

返却された各レコードのsys_favorite.is_favorite(ユーザーがお気に入り追加しているか?)とsys_favorite.favorite_date(最後にお気に入り追加した日時)を参照してください。

let objectId = "shop"

let extensionAttribute = RKZObjectDataExtensionAttribute()
extensionAttribute.user_access_token = "xxx"
extensionAttribute.show_favorite = true

// 検索を実行
RKZService.sharedInstance().getDataList(objectId, searchConditionArray: nil, sortConditionArray: nil, extensionAttribute: extensionAttribute) { dataList, responseStatus in
    if responseStatus.isSuccess {
        // 成功時
        dataList.forEach { item in
            print("code:", item.code ?? "")
            print("name:", item.name ?? "")
            print("is_favorite:", item.sys_favorite?.is_favorite ?? false) // ユーザーがお気に入り追加している場合true
            print("favorite_date:", item.sys_favorite?.favorite_date ?? "") // 最後にお気に入り追加した日時
        }
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}



 
 








 
 







NSString *objectId = @"shop";

RKZObjectDataExtensionAttribute *extensionAttribute = [[RKZObjectDataExtensionAttribute alloc] init];
extensionAttribute.user_access_token = @"xxx";
extensionAttribute.show_favorite = true;

// 検索を実行
[[RKZService sharedInstance] getDataList:objectId searchConditionArray:nil sortConditionArray:nil extensionAttribute:extensionAttribute withBlock:^(NSArray<RKZObjectData *> * _Nonnull dataList, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        for (RKZObjectData *item in dataList) {
            NSLog(@"code: %@", item.code);
            NSLog(@"name: %@", item.name);
            NSLog(@"is_favorite: %d", item.sys_favorite.is_favorite); // ユーザーがお気に入り追加している場合true
            NSLog(@"favorite_date: %@", item.sys_favorite.favorite_date); // 最後にお気に入り追加した日時
        }
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];



 
 








 
 







val objectId = "shop"

val extensionAttribute = ObjectDataExtensionAttribute()
extensionAttribute.setUserAccessToken("xxx")
extensionAttribute.setShowFavorite(true)

// 検索を実行
RKZClient.getInstance().getDataList(objectId, null, null) { dataList, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        dataList.forEach {
            Log.d(TAG, "code: ${it.code}")
            Log.d(TAG, "name: ${it.name}")
            Log.d(TAG, "isFavorite: ${it.sysFavorite.isFavorite}") // ユーザーがお気に入り追加している場合true
            Log.d(TAG, "favoriteDate: ${it.sysFavorite.favoriteDate}") // 最後にお気に入り追加した日時
        }
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}



 
 








 
 







String objectId = "shop";

ObjectDataExtensionAttribute extensionAttribute = new ObjectDataExtensionAttribute();
extensionAttribute.setUserAccessToken("xxx");
extensionAttribute.setShowFavorite(true);

// 検索を実行
RKZClient.getInstance().getDataList(objectId, null, null, new OnGetRKZObjectDataListListener() {
    @Override
    public void onGetRKZObjectDataList(List<RKZObjectData> dataList, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            for (RKZObjectData item : dataList) {
                Log.d(TAG, "code: " + item.getCode());
                Log.d(TAG, "name: " + item.getName());
                Log.d(TAG, "isFavorite: " + item.getSysFavorite().getIsFavorite()); // ユーザーがお気に入り追加している場合true
                Log.d(TAG, "favoriteDate: " + item.getSysFavorite().getFavoriteDate()); // 最後にお気に入り追加した日時
            }
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});



 
 










 
 








var objectId = 'shop'

var extensionAttribute = {
  user_access_token: 'xxx',
  show_favorite: true,
}

// 検索を実行
RKZClient.getDataList(objectId, null, null, extensionAttribute, function(dataList) {
  // 成功時
  dataList.forEach(function (item) {
    console.debug('code:', item.code)
    console.debug('name:', item.name)
    console.debug('is_favorite:', item.sys_favorite.is_favorite) // ユーザーがお気に入り追加している場合true
    console.debug('favorite_date:', item.sys_favorite.favorite_date) // 最後にお気に入り追加した日時
  })
}, function(error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})



 
 








 
 






const objectId = 'shop'
const userAccessToken = 'xxx'

const dataResult = await RKZ.Data.query(objectId, userAccessToken)
    .withFavorite()
    .find()
dataResult.data.forEach(item => {
  console.debug('code:', item.code)
  console.debug('name:', item.name)
  console.debug('is_favorite:', item.sys_favorite.is_favorite) // ユーザーがお気に入り追加している場合true
  console.debug('favorite_date:', item.sys_favorite.favorite_date) // 最後にお気に入り追加した日時
})

 


 




 
 

final objectId = 'shop';
final userAccessToken = 'xxx';

final query = RKZClient.instance.dataQuery(objectId, userAccessToken: userAccessToken)
  ..withFavorite();
final dataResult = await query.find();

dataResult.data.forEach((item) {
  print('code: ${item.code}');
  print('name: ${item.name}');
  print('isFavorite: ${item.sysFavorite?.isFavorite}'); // ユーザーがお気に入り追加している場合true
  print('favoriteDate: ${item.sysFavorite?.favoriteDate}'); // 最後にお気に入り追加した日時
});

 


 





 
 


show_favorite_summarytrueにすることで、お気に入りに追加されている件数を取得することができます。(JavaScript・FlutterはDataQuery.withFavoriteSummaryメソッドを呼び出してください)

let objectId = "shop"

let extensionAttribute = RKZObjectDataExtensionAttribute()
extensionAttribute.user_access_token = "xxx"
extensionAttribute.show_favorite = true
extensionAttribute.show_favorite_summary = true

// 検索を実行
RKZService.sharedInstance().getDataList(objectId, searchConditionArray: nil, sortConditionArray: nil, extensionAttribute: extensionAttribute) { dataList, responseStatus in
    if responseStatus.isSuccess {
        // 成功時
        dataList.forEach { item in
            print("code:", item.code ?? "")
            print("name:", item.name ?? "")
            print("favorite_count:", item.sys_favorite_sum?.favorite_count ?? "") // お気に入りに追加されている件数
        }
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}





 








 







NSString *objectId = @"shop";

RKZObjectDataExtensionAttribute *extensionAttribute = [[RKZObjectDataExtensionAttribute alloc] init];
extensionAttribute.user_access_token = @"xxx";
extensionAttribute.show_favorite = true;
extensionAttribute.show_favorite_summary = true;

// 検索を実行
[[RKZService sharedInstance] getDataList:objectId searchConditionArray:nil sortConditionArray:nil extensionAttribute:extensionAttribute withBlock:^(NSArray<RKZObjectData *> * _Nonnull dataList, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        for (RKZObjectData *item in dataList) {
            NSLog(@"code: %@", item.code);
            NSLog(@"name: %@", item.name);
            NSLog(@"favorite_count: %d", item.sys_favorite_sum.favorite_count); // お気に入りに追加されている件数
        }
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];





 








 







val objectId = "shop"

val extensionAttribute = ObjectDataExtensionAttribute()
extensionAttribute.setUserAccessToken("xxx")
extensionAttribute.setShowFavorite(true)
extensionAttribute.setShowFavoriteSummary(true)

// 検索を実行
RKZClient.getInstance().getDataList(objectId, null, null) { dataList, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        dataList.forEach {
            Log.d(TAG, "code: ${it.code}")
            Log.d(TAG, "name: ${it.name}")
            Log.d(TAG, "favoriteCount: ${it.sysFavoriteSum.favoriteCount}") // お気に入りに追加されている件数
        }
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}





 








 







String objectId = "shop";

ObjectDataExtensionAttribute extensionAttribute = new ObjectDataExtensionAttribute();
extensionAttribute.setUserAccessToken("xxx");
extensionAttribute.setShowFavorite(true);
extensionAttribute.setShowFavoriteSummary(true);

// 検索を実行
RKZClient.getInstance().getDataList(objectId, null, null, new OnGetRKZObjectDataListListener() {
    @Override
    public void onGetRKZObjectDataList(List<RKZObjectData> dataList, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            for (RKZObjectData item : dataList) {
                Log.d(TAG, "code: " + item.getCode());
                Log.d(TAG, "name: " + item.getName());
                Log.d(TAG, "favoriteCount: " + item.getSysFavoriteSum().getFavoriteCount()); // お気に入りに追加されている件数
            }
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});





 










 








var objectId = 'shop'

var extensionAttribute = {
  user_access_token: 'xxx',
  show_favorite: true,
  show_favorite_summary: true
}

// 検索を実行
RKZClient.getDataList(objectId, null, null, extensionAttribute, function(dataList) {
  // 成功時
  dataList.forEach(function (item) {
    console.debug('code:', item.code)
    console.debug('name:', item.name)
    console.debug('favorite_count:', item.sys_favorite_sum.favorite_count) // お気に入りに追加されている件数
  })
}, function(error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})





 








 






const objectId = 'shop'
const userAccessToken = 'xxx'

const dataResult = await RKZ.Data.query(objectId, userAccessToken)
    .withFavorite()
    .withFavoriteSummary()
    .find()
dataResult.data.forEach(item => {
  console.debug('code:', item.code)
  console.debug('name:', item.name)
  console.debug('favorite_count:', item.sys_favorite_sum.favorite_count) // お気に入りに追加されている件数
})





 




 

final objectId = 'shop';
final userAccessToken = 'xxx';

final query = RKZClient.instance.dataQuery(objectId, userAccessToken: userAccessToken)
  ..withFavorite()
  ..withFavoriteSummary();
final dataResult = await query.find();

dataResult.data.forEach((item) {
  print('code: ${item.code}');
  print('name: ${item.name}');
  print('favoriteCount: ${item.sysFavoriteSum?.favoriteCount}'); // お気に入りに追加されている件数
});





 





 


ユーザーがお気に入り登録しているオブジェクトデータに検索結果を絞り込むことができます。

let objectId = "shop"

// 検索条件
let searchConditions = [
    RKZSearchCondition(favoriteType: MyFavoriteOnlyForFavorite)
]

let extensionAttribute = RKZObjectDataExtensionAttribute()
extensionAttribute.user_access_token = "xxx"
extensionAttribute.show_favorite = true

// 検索を実行
RKZService.sharedInstance().getDataList(objectId, searchConditionArray: searchConditions, sortConditionArray: nil, extensionAttribute: extensionAttribute) { dataList, responseStatus in
    // ...
}




 










NSString *objectId = @"shop";

// 検索条件
NSArray<RKZSearchCondition *> *searchConditions = @[
    [[RKZSearchCondition alloc] initWithFavoriteType:MyFavoriteOnlyForFavorite]
];

RKZObjectDataExtensionAttribute *extensionAttribute = [[RKZObjectDataExtensionAttribute alloc] init];
extensionAttribute.user_access_token = @"xxx";
extensionAttribute.show_favorite = true;

// 検索を実行
[[RKZService sharedInstance] getDataList:objectId searchConditionArray:searchConditions sortConditionArray:nil extensionAttribute:extensionAttribute withBlock:^(NSArray<RKZObjectData *> * _Nonnull dataList, RKZResponseStatus * _Nonnull responseStatus) {
    // ...
}];




 










val objectId = "shop"

// 検索条件
val searchConditions = listOf(
    RKZSearchCondition.initWithFavoriteType(RKZSearchCondition.WithFavoriteType.MyFavoriteOnly)
)

val extensionAttribute = ObjectDataExtensionAttribute()
extensionAttribute.setUserAccessToken("xxx")
extensionAttribute.setShowFavorite(true)

// 検索を実行
RKZClient.getInstance().getDataList(objectId, searchConditions, null) { dataList, rkzResponseStatus ->
    // ...
}




 










String objectId = "shop";

// 検索条件
List<RKZSearchCondition> searchConditions = Arrays.asList(
    RKZSearchCondition.initWithFavoriteType(RKZSearchCondition.WithFavoriteType.MyFavoriteOnly)
);

ObjectDataExtensionAttribute extensionAttribute = new ObjectDataExtensionAttribute();
extensionAttribute.setUserAccessToken("xxx");
extensionAttribute.setShowFavorite(true);

// 検索を実行
RKZClient.getInstance().getDataList(objectId, searchConditions, null, new OnGetRKZObjectDataListListener() {
    @Override
    public void onGetRKZObjectDataList(List<RKZObjectData> dataList, RKZResponseStatus rkzResponseStatus) {
        // ...
    }
});




 













var objectId = 'shop'

// 検索条件
var searchConditions = [
  RKZSearchCondition.withFavorite.myFavoriteOnly()
]

var extensionAttribute = {
  user_access_token: 'xxx',
  show_favorite: true
}

// 検索を実行
RKZClient.getDataList(objectId, searchConditions, null, extensionAttribute, function(dataList) {
  // ...
}, function(error) {
  // ...
})




 













const objectId = 'shop'
const userAccessToken = 'xxx'

const dataResult = await RKZ.Data.query(objectId, userAccessToken)
    .withFavorite(true)
    .find()




 

final objectId = 'shop';
final userAccessToken = 'xxx';

final query = RKZClient.instance.dataQuery(objectId, userAccessToken: userAccessToken)
  ..withFavorite(byMe: true);
final dataResult = await query.find();




 


逆に、ユーザーがお気に入り登録していないオブジェクトデータに検索結果を絞り込むこともできます。

let objectId = "shop"

// 検索条件
let searchConditions = [
    RKZSearchCondition(favoriteType: NotMyFavoriteForFavorite)
]

let extensionAttribute = RKZObjectDataExtensionAttribute()
extensionAttribute.user_access_token = "xxx"
extensionAttribute.show_favorite = true

// 検索を実行
RKZService.sharedInstance().getDataList(objectId, searchConditionArray: searchConditions, sortConditionArray: nil, extensionAttribute: extensionAttribute) { dataList, responseStatus in
    // ...
}




 










NSString *objectId = @"shop";

// 検索条件
NSArray<RKZSearchCondition *> *searchConditions = @[
    [[RKZSearchCondition alloc] initWithFavoriteType:NotMyFavoriteForFavorite]
];

RKZObjectDataExtensionAttribute *extensionAttribute = [[RKZObjectDataExtensionAttribute alloc] init];
extensionAttribute.user_access_token = @"xxx";
extensionAttribute.show_favorite = true;

// 検索を実行
[[RKZService sharedInstance] getDataList:objectId searchConditionArray:searchConditions sortConditionArray:nil extensionAttribute:extensionAttribute withBlock:^(NSArray<RKZObjectData *> * _Nonnull dataList, RKZResponseStatus * _Nonnull responseStatus) {
    // ...
}];




 










val objectId = "shop"

// 検索条件
val searchConditions = listOf(
    RKZSearchCondition.initWithFavoriteType(RKZSearchCondition.WithFavoriteType.NotMyFavorite)
)

val extensionAttribute = ObjectDataExtensionAttribute()
extensionAttribute.setUserAccessToken("xxx")
extensionAttribute.setShowFavorite(true)

// 検索を実行
RKZClient.getInstance().getDataList(objectId, searchConditions, null) { dataList, rkzResponseStatus ->
    // ...
}




 










String objectId = "shop";

// 検索条件
List<RKZSearchCondition> searchConditions = Arrays.asList(
    RKZSearchCondition.initWithFavoriteType(RKZSearchCondition.WithFavoriteType.NotMyFavorite)
);

ObjectDataExtensionAttribute extensionAttribute = new ObjectDataExtensionAttribute();
extensionAttribute.setUserAccessToken("xxx");
extensionAttribute.setShowFavorite(true);

// 検索を実行
RKZClient.getInstance().getDataList(objectId, searchConditions, null, new OnGetRKZObjectDataListListener() {
    @Override
    public void onGetRKZObjectDataList(List<RKZObjectData> dataList, RKZResponseStatus rkzResponseStatus) {
        // ...
    }
});




 













var objectId = 'shop'

// 検索条件
var searchConditions = [
  RKZSearchCondition.withFavorite.notMyFavorite()
]

var extensionAttribute = {
  user_access_token: 'xxx',
  show_favorite: true
}

// 検索を実行
RKZClient.getDataList(objectId, searchConditions, null, extensionAttribute, function(dataList) {
  // ...
}, function(error) {
  // ...
})




 













const objectId = 'shop'
const userAccessToken = 'xxx'

const dataResult = await RKZ.Data.query(objectId, userAccessToken)
    .withFavorite(false)
    .find()




 

final objectId = 'shop';
final userAccessToken = 'xxx';

final query = RKZClient.instance.dataQuery(objectId, userAccessToken: userAccessToken)
  ..withFavorite(byMe: false);
final dataResult = await query.find();




 


お気に入りに追加されている件数でソートすることができます。

let objectId = "shop"

// ソート条件
let sortConditions = [
    RKZSortCondition(favoriteCountSortType: RKZSortTypeDesc)
]

let extensionAttribute = RKZObjectDataExtensionAttribute()
extensionAttribute.user_access_token = "xxx"
extensionAttribute.show_favorite = true

// 検索を実行
RKZService.sharedInstance().getDataList(objectId, searchConditionArray: nil, sortConditionArray: sortConditions, extensionAttribute: extensionAttribute) { dataList, responseStatus in
    // ...
}




 










NSString *objectId = @"shop";

// ソート条件
NSArray<RKZSortCondition *> *sortConditions = @[
    [[RKZSortCondition alloc] initWithFavoriteCountSortType:RKZSortTypeDesc]
];

RKZObjectDataExtensionAttribute *extensionAttribute = [[RKZObjectDataExtensionAttribute alloc] init];
extensionAttribute.user_access_token = @"xxx";
extensionAttribute.show_favorite = true;

// 検索を実行
[[RKZService sharedInstance] getDataList:objectId searchConditionArray:nil sortConditionArray:sortConditions extensionAttribute:extensionAttribute withBlock:^(NSArray<RKZObjectData *> * _Nonnull dataList, RKZResponseStatus * _Nonnull responseStatus) {
    // ...
}];




 










val objectId = "shop"

// ソート条件
val sortConditions = listOf(
    RKZSortCondition.initWithSortTypeForFavoriteCount(RKZSortCondition.DESC)
)

val extensionAttribute = ObjectDataExtensionAttribute()
extensionAttribute.setUserAccessToken("xxx")
extensionAttribute.setShowFavorite(true)

// 検索を実行
RKZClient.getInstance().getDataList(objectId, null, sortConditions) { dataList, rkzResponseStatus ->
    // ...
}




 










String objectId = "shop";

// ソート条件
List<RKZSortCondition> sortConditions = Arrays.asList(
    RKZSortCondition.initWithSortTypeForFavoriteCount(RKZSortCondition.DESC)
);

ObjectDataExtensionAttribute extensionAttribute = new ObjectDataExtensionAttribute();
extensionAttribute.setUserAccessToken("xxx");
extensionAttribute.setShowFavorite(true);

// 検索を実行
RKZClient.getInstance().getDataList(objectId, null, sortConditions, new OnGetRKZObjectDataListListener() {
    @Override
    public void onGetRKZObjectDataList(List<RKZObjectData> dataList, RKZResponseStatus rkzResponseStatus) {
        // ...
    }
});




 













var objectId = 'shop'

// ソート条件
var sortConditions = [
  RKZSortCondition.withFavorite.favoriteCount.desc()
]

var extensionAttribute = {
  user_access_token: 'xxx',
  show_favorite: true
}

// 検索を実行
RKZClient.getDataList(objectId, null, sortConditions, extensionAttribute, function(dataList) {
  // ...
}, function(error) {
  // ...
})




 













const objectId = 'shop'
const userAccessToken = 'xxx'

const dataResult = await RKZ.Data.query(objectId, userAccessToken)
    .withFavorite()
    .orderByFavoriteCount(RKZ.Direction.Desc)
    .find()





 

final objectId = 'shop';
final userAccessToken = 'xxx';

final query = RKZClient.instance.dataQuery(objectId, userAccessToken: userAccessToken)
  ..withFavorite()
  ..orderByFavoriteCount(direction: Direction.desc);
final dataResult = await query.find();





 


また、最後にお気に入り追加した日時でソートすることもできます。

let objectId = "shop"

// ソート条件
let sortConditions = [
    RKZSortCondition(favoriteUpdateDateSortType: RKZSortTypeDesc)
]

let extensionAttribute = RKZObjectDataExtensionAttribute()
extensionAttribute.user_access_token = "xxx"
extensionAttribute.show_favorite = true

// 検索を実行
RKZService.sharedInstance().getDataList(objectId, searchConditionArray: nil, sortConditionArray: sortConditions, extensionAttribute: extensionAttribute) { dataList, responseStatus in
    // ...
}




 










NSString *objectId = @"shop";

// ソート条件
NSArray<RKZSortCondition *> *sortConditions = @[
    [[RKZSortCondition alloc] initWithFavoriteUpdateDateSortType:RKZSortTypeDesc]
];

RKZObjectDataExtensionAttribute *extensionAttribute = [[RKZObjectDataExtensionAttribute alloc] init];
extensionAttribute.user_access_token = @"xxx";
extensionAttribute.show_favorite = true;

// 検索を実行
[[RKZService sharedInstance] getDataList:objectId searchConditionArray:nil sortConditionArray:sortConditions extensionAttribute:extensionAttribute withBlock:^(NSArray<RKZObjectData *> * _Nonnull dataList, RKZResponseStatus * _Nonnull responseStatus) {
    // ...
}];




 










val objectId = "shop"

// ソート条件
val sortConditions = listOf(
    RKZSortCondition.initWithSortTypeForFavoriteUpdateDate(RKZSortCondition.DESC)
)

val extensionAttribute = ObjectDataExtensionAttribute()
extensionAttribute.setUserAccessToken("xxx")
extensionAttribute.setShowFavorite(true)

// 検索を実行
RKZClient.getInstance().getDataList(objectId, null, sortConditions) { dataList, rkzResponseStatus ->
    // ...
}




 










String objectId = "shop";

// ソート条件
List<RKZSortCondition> sortConditions = Arrays.asList(
    RKZSortCondition.initWithSortTypeForFavoriteUpdateDate(RKZSortCondition.DESC)
);

ObjectDataExtensionAttribute extensionAttribute = new ObjectDataExtensionAttribute();
extensionAttribute.setUserAccessToken("xxx");
extensionAttribute.setShowFavorite(true);

// 検索を実行
RKZClient.getInstance().getDataList(objectId, null, sortConditions, new OnGetRKZObjectDataListListener() {
    @Override
    public void onGetRKZObjectDataList(List<RKZObjectData> dataList, RKZResponseStatus rkzResponseStatus) {
        // ...
    }
});




 













var objectId = 'shop'

// ソート条件
var sortConditions = [
  RKZSortCondition.withFavorite.updateDate.desc()
]

var extensionAttribute = {
  user_access_token: 'xxx',
  show_favorite: true
}

// 検索を実行
RKZClient.getDataList(objectId, null, sortConditions, extensionAttribute, function(dataList) {
  // ...
}, function(error) {
  // ...
})




 













const objectId = 'shop'
const userAccessToken = 'xxx'

const dataResult = await RKZ.Data.query(objectId, userAccessToken)
    .withFavorite()
    .orderByFavoriteUpdatedAt(RKZ.Direction.Desc)
    .find()





 

final objectId = 'shop';
final userAccessToken = 'xxx';

final query = RKZClient.instance.dataQuery(objectId, userAccessToken: userAccessToken)
  ..withFavorite()
  ..orderByFavoriteUpdatedAt(direction: Direction.desc);
final dataResult = await query.find();





 

QRコードでオブジェクトデータを取得する

表示タイプ(データ型)が「QRコード」のオブジェクト項目を設定すると、管理画面の編集画面に各レコードのQRコードが表示されます。そのQRコードをカメラで読み取りデコードしたテキストからオブジェクトデータを取得することができます。

QRコードからレコードを取得する場合は、getDataFromQRCodeメソッドを使用します。

let qrCode = "xxx" // カメラで読み取ったQRコードのテキスト

RKZService.sharedInstance().getDataFromQRCode(qrCode) { objectData, responseStatus in
    if responseStatus.isSuccess, let objectData = objectData {
        // 成功時
        print("code:", objectData.code ?? "")
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}
NSString *qrCode = @"xxx"; // カメラで読み取ったQRコードのテキスト

[[RKZService sharedInstance] getDataFromQRCode:qrCode withBlock:^(RKZObjectData * _Nullable objectData, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        NSLog(@"code: %@", objectData.code);
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];
val qrCode = "xxx" // カメラで読み取ったQRコードのテキスト

RKZClient.getInstance().getDataFromQRCode(qrCode) { objectData, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        Log.d(TAG, "code: ${objectData.code}")
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}
String qrCode = "xxx"; // カメラで読み取ったQRコードのテキスト

RKZClient.getInstance().getDataFromQRCode(qrCode, new OnGetRKZObjectDataListener() {
    @Override
    public void onGetRKZObjectData(RKZObjectData objectData, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            Log.d(TAG, "code: " + objectData.getCode());
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});
var qrCode = 'xxx' // カメラで読み取ったQRコードのテキスト

RKZClient.getDataFromQRCode(qrCode, function (data) {
  // 成功時
  console.debug('code:', data.code)
}, function (error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
const qrCode = 'xxx' // カメラで読み取ったQRコードのテキスト

const data = await RKZ.Data.getByQRCode(qrCode)
console.debug('code:', data.code)
final qrCode = 'xxx'; // カメラで読み取ったQRコードのテキスト

final data = await RKZClient.instance.getDataByQRCode(qrCode);
print('code: ${data.code}');

オブジェクト項目の定義を取得する

管理画面で設定したオブジェクト項目の定義を取得することができます。

オブジェクト項目の定義を取得するには、getFieldDataListメソッドを使用します。

let objectId = "shop"
let visibleOnly = true // trueの場合、表示項目のみを取得します

RKZService.sharedInstance().getFieldDataList(objectId, visibleFieldOnly: visibleOnly) { fields, responseStatus in
    if responseStatus.isSuccess {
        // 成功時
        fields.forEach { item in
            print("field_name:", item.field_name ?? "")
            print("label_str:", item.label_str ?? "")
        }
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}
NSString *objectId = @"shop";
BOOL visibleOnly = YES; // trueの場合、表示項目のみを取得します

[[RKZService sharedInstance] getFieldDataList:objectId visibleFieldOnly:visibleOnly withBlock:^(NSArray<RKZFieldData *> * _Nonnull fields, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        for (RKZFieldData *item in fields) {
            NSLog(@"field_name: %@", item.field_name);
            NSLog(@"label_str: %@", item.label_str);
        }
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];
val objectId = "shop"
val visibleOnly = true // trueの場合、表示項目のみを取得します

RKZClient.getInstance().getFieldDataList(objectId, visibleOnly) { fields, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        fields.forEach {
            Log.d(TAG, "fieldName: ${it.fieldName}")
            Log.d(TAG, "labelStr: ${it.labelStr}")
        }
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}
String objectId = "shop";
Boolean visibleOnly = true; // trueの場合、表示項目のみを取得します

RKZClient.getInstance().getFieldDataList(objectId, visibleOnly, new OnGetRKZFieldDataListListener() {
    @Override
    public void onGetRKZFieldDataList(List<RKZFieldData> fields, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            for (RKZFieldData item : fields) {
                Log.d(TAG, "fieldName: " + item.getFieldName());
                Log.d(TAG, "labelStr: " + item.getLabelStr());
            }
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});
var objectId = 'shop'
var visibleOnly = true // trueの場合、表示項目のみを取得します

RKZClient.getFieldDataList(objectId, visibleOnly, function (fields) {
  // 成功時
  fields.forEach(function (item) {
    console.debug('field_name:', item.field_name)
    console.debug('label_str:', item.label_str)
  })
}, function (error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
const objectId = 'shop'
const visibleOnly = true // trueの場合、表示項目のみを取得します

const fields = await RKZ.Data.fields(objectId, visibleOnly)

fields.forEach(field => {
  console.debug('field_name:', field.field_name)
  console.debug('label_str:', field.label_str)
})
final objectId = 'shop';
final visibleOnly = true; // trueの場合、表示項目のみを取得します

final fields = await RKZClient.instance.getDataFields(objectId, visibleOnly: visibleOnly);

fields.forEach((field) {
  print('fieldName: ${field.fieldName}');
  print('labelStr: ${field.labelStr}');
});