ユーザー詳細管理

ユーザー詳細はユーザーごとにデータを保持する機能です。

データ管理機能と同様に、アプリケーションごとに独自のオブジェクトデータを作成することができます。また、ユーザー管理機能と異なり、他のユーザーにデータを公開することもできます。

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

オブジェクトを作成する

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

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

注意

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

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

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

注意

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

ユーザー詳細を登録する

ユーザー詳細へのデータ登録はaddUserDetailメソッドで行います。

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

let userDetail = RKZUserDetailData()
userDetail.object_id = "shop_review"
userDetail.attributes = [
    "shop_cd": "0001", // 独自に追加した項目
    "star": 5,
    "review_text": "Very good!"
]

let userAccessToken = "xxx"

RKZService.sharedInstance().addUserDetail(userDetail, userAccessToken: userAccessToken) { newUserDetail, responseStatus in
    if responseStatus.isSuccess, let newUserDetail = newUserDetail {
        // 成功時
        print("id:", newUserDetail.id ?? "") // すべてのユーザー詳細で一意なキー
        print("code:", newUserDetail.code ?? "") // 登録したユーザーの中で一意なキー
        print("shop_cd:", newUserDetail.attributes?["shop_cd"] ?? "")
        print("star:", newUserDetail.attributes?["star"] ?? "")
        print("review_text:", newUserDetail.attributes?["review_text"] ?? "")
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}
RKZUserDetailData *userDetail = [[RKZUserDetailData alloc] init];
userDetail.object_id = @"shop_review";
userDetail.attributes = @{
    @"shop_cd": @"0001", // 独自に追加した項目
    @"star": @5,
    @"review_text": @"Very good!"
};

NSString *userAccessToken = @"xxx";

[[RKZService sharedInstance] addUserDetail:userDetail userAccessToken:userAccessToken withBlock:^(RKZUserDetailData * _Nullable userDetail, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        NSLog(@"id: %@", userDetail.id); // すべてのユーザー詳細で一意なキー
        NSLog(@"code: %@", userDetail.code); // 登録したユーザーの中で一意なキー
        NSLog(@"shop_cd: %@", userDetail.attributes[@"shop_cd"]);
        NSLog(@"star: %@", userDetail.attributes[@"star"]);
        NSLog(@"review_text: %@", userDetail.attributes[@"review_text"]);
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];
val userDetail = UserDetail()
userDetail.objectId = "shop_review"
userDetail.attributes = mapOf(
    "shop_cd" to "0001", // 独自に追加した項目
    "star" to 5,
    "review_text" to "Very good!"
)

val userAccessToken = "xxx"

RKZClient.getInstance().addUserDetail(userDetail, userAccessToken) { newUserDetail, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        Log.d(TAG, "id: ${newUserDetail.id}") // すべてのユーザー詳細で一意なキー
        Log.d(TAG, "code: ${newUserDetail.code}") // 登録したユーザーの中で一意なキー
        Log.d(TAG, "shop_cd: ${newUserDetail.attributes["shop_cd"]}")
        Log.d(TAG, "star: ${newUserDetail.attributes["star"]}")
        Log.d(TAG, "review_text: ${newUserDetail.attributes["review_text"]}")
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}
UserDetail userDetail = new UserDetail();
userDetail.setObjectId("shop_review");
userDetail.setAttributesValue("shop_cd", "0001"); // 独自に追加した項目
userDetail.setAttributesValue("star", 5);
userDetail.setAttributesValue("review_text", "Very good!");

String userAccessToken = "xxx";

RKZClient.getInstance().addUserDetail(userDetail, userAccessToken, new OnAddUserDetailListener() {
    @Override
    public void onAddUserDetail(UserDetail userDetail, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            Log.d(TAG, "id: " + userDetail.getId()); // すべてのユーザー詳細で一意なキー
            Log.d(TAG, "code: " + userDetail.getCode()); // 登録したユーザーの中で一意なキー
            Log.d(TAG, "shop_cd: " + userDetail.getAttributesValueString("shop_cd"));
            Log.d(TAG, "star: " + userDetail.getAttributesValueString("star"));
            Log.d(TAG, "review_text: " + userDetail.getAttributesValueString("review_text"));
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});
var userAccessToken = 'xxx'

var userDetail = {
  object_id: 'shop_review',
  attributes: {
    shop_cd: '0001', // 独自に追加した項目
    star: 5,
    review_text: 'Very good!'
  }
}

RKZClient.addUserDetail(userDetail, userAccessToken, function (newUserDetail) {
  // 成功時
  console.debug('id:', newUserDetail.id) // すべてのユーザー詳細で一意なキー
  console.debug('code:', newUserDetail.code) // 登録したユーザーの中で一意なキー
  console.debug('shop_cd:', newUserDetail.attributes.shop_cd)
  console.debug('star:', newUserDetail.attributes.star)
  console.debug('review_text:', newUserDetail.attributes.review_text)
}, function (error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
const userAccessToken = 'xxx'

const userDetail = await RKZ.UserDetail.add(userAccessToken, {
  object_id: 'shop_review',
  attributes: {
    shop_cd: '0001', // 独自に追加した項目
    star: 5,
    review_text: 'Very good!'
  }
})

console.debug('id:', userDetail.id) // すべてのユーザー詳細で一意なキー
console.debug('code:', userDetail.code) // 登録したユーザーの中で一意なキー
console.debug('shop_cd:', userDetail.attributes.shop_cd)
console.debug('star:', userDetail.attributes.star)
console.debug('review_text:', userDetail.attributes.review_text)
final userAccessToken = 'xxx';

final userDetail = UserDetail();
userDetail.objectId = 'shop_review';
userDetail.attributes = {
  'shop_cd': '0001', // 独自に追加した項目
  'star': 5,
  'review_text': 'Very good!'
};

final newUserDetail = await RKZClient.instance.addUserDetail(userAccessToken, userDetail);

print('id: ${newUserDetail.id}'); // すべてのユーザー詳細で一意なキー
print('code: ${newUserDetail.code}'); // 登録したユーザーの中で一意なキー
print('shop_cd: ' + newUserDetail.attributes?['shop_cd']);
print('star: ' + newUserDetail.attributes?['star']);
print('review_text: ' + newUserDetail.attributes?['review_text']);
const userDetail = await RKZ.UserDetail.add({ user_no: 'APP00001' }, {
  object_id: 'shop_review',
  attributes: {
    shop_cd: '0001', // 独自に追加した項目
    star: 5,
    review_text: 'Very good!'
  }
})

console.debug('id:', userDetail.id) // すべてのユーザー詳細で一意なキー
console.debug('code:', userDetail.code) // 登録したユーザーの中で一意なキー
console.debug('shop_cd:', userDetail.attributes.shop_cd)
console.debug('star:', userDetail.attributes.star)
console.debug('review_text:', userDetail.attributes.review_text)
curl --location '<配布したベースURL>/api_zeus/user_detail/add/shop_review' \
--header 'Authorization: Bearer <配布したサーバー認証トークン>' \
--form 'tenant_id="<配布したテナントID>"' \
--form 'contents[user_no]="APP00001"' \
--form 'contents[free_columns][shop_cd]="0001"' \
--form 'contents[free_columns][star]=5' \
--form 'contents[free_columns][review_text]="Very good!"'

登録に成功すると、ユーザー詳細ID(id)とコード(code)が返却されます。ユーザー詳細IDは登録したユーザーのレコード以外も含めたオブジェクト全体で一意なキーです。対して、コードは登録したユーザーのレコードの中で一意なキーです。

ユーザー詳細IDはオブジェクト全体に対してレコードを特定したい場合(例えば、お気に⼊りの登録など)で使用します。

ヒント

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


先述のサンプルコードで登録したユーザー詳細は登録したユーザーのみデータを参照することができますが、公開範囲を指定することで他のユーザーもデータを参照することができます。

公開範囲はvisibilityで指定することができます。

let userDetail = RKZUserDetailData()
userDetail.object_id = "shop_review"
userDetail.visibility = RKZUserDetailVisibilityPublicToUsers // 公開範囲
userDetail.attributes = [
    "shop_cd": "0001",
    // ...
]

let userAccessToken = "xxx"

RKZService.sharedInstance().addUserDetail(userDetail, userAccessToken: userAccessToken) { newUserDetail, responseStatus in
    if responseStatus.isSuccess, let newUserDetail = newUserDetail {
        // 成功時
        print("visibility:", newUserDetail.visibility ?? "")
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}


 

















RKZUserDetailData *userDetail = [[RKZUserDetailData alloc] init];
userDetail.object_id = @"shop_review";
userDetail.visibility = RKZUserDetailVisibilityPublicToUsers; // 公開範囲
userDetail.attributes = @{
    @"shop_cd": @"0001",
    // ...
};

NSString *userAccessToken = @"xxx";

[[RKZService sharedInstance] addUserDetail:userDetail userAccessToken:userAccessToken withBlock:^(RKZUserDetailData * _Nullable userDetail, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        NSLog(@"visibility: %@", userDetail.visibility);
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];


 

















val userDetail = UserDetail()
userDetail.objectId = "shop_review"
userDetail.visibility = UserDetail.VisibilityType.PublicToUsers // 公開範囲
userDetail.attributes = mapOf(
    "shop_cd" to "0001",
    // ...
)

val userAccessToken = "xxx"

RKZClient.getInstance().addUserDetail(userDetail, userAccessToken) { newUserDetail, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        Log.d(TAG, "visibility: ${newUserDetail.visibility}")
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}


 

















UserDetail userDetail = new UserDetail();
userDetail.setObjectId("shop_review");
userDetail.setVisibility(UserDetail.VisibilityType.PublicToUsers); // 公開範囲
userDetail.setAttributesValue("shop_cd", "0001");
// ...

String userAccessToken = "xxx";

RKZClient.getInstance().addUserDetail(userDetail, userAccessToken, new OnAddUserDetailListener() {
    @Override
    public void onAddUserDetail(UserDetail userDetail, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            Log.d(TAG, "visibility: " + userDetail.getVisibility());
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});


 


















var userAccessToken = 'xxx'

var userDetail = {
  object_id: 'shop_review',
  visibility: '0002', // 公開範囲(PublicToUsers)
  attributes: {
    //...
  }
}

RKZClient.addUserDetail(userDetail, userAccessToken, function (newUserDetail) {
  // 成功時
  console.debug('visibility:', newUserDetail.visibility)
}, function (error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
const userAccessToken = 'xxx'

const userDetail = await RKZ.UserDetail.add(userAccessToken, {
  object_id: 'shop_review',
  visibility: RKZ.VisibilityType.PublicToUsers, // 公開範囲
  attributes: {
    //...
  }
})

console.debug('visibility:', userDetail.visibility)




 






final userAccessToken = 'xxx';

final userDetail = UserDetail();
userDetail.objectId = 'shop_review';
userDetail.visibility = VisibilityType.publicToUsers; // 公開範囲
userDetail.attributes = {
  // ...
};

final newUserDetail = await RKZClient.instance.addUserDetail(userAccessToken, userDetail);

print('visibility: ${newUserDetail.visibility}');




 







const userDetail = await RKZ.UserDetail.add({ user_no: 'APP00001' }, {
  object_id: 'shop_review',
  visibility: RKZ.VisibilityType.PublicToUsers, // 公開範囲
  attributes: {
    //...
  }
})

console.debug('visibility:', userDetail.visibility)


 






curl --location '<配布したベースURL>/api_zeus/user_detail/add/shop_review' \
--header 'Authorization: Bearer <配布したサーバー認証トークン>' \
--form 'tenant_id="<配布したテナントID>"' \
--form 'contents[user_no]="APP00001"' \
--form 'contents[free_columns][shop_cd]="0001"' \
--form 'contents[free_columns][star]=5' \
--form 'contents[free_columns][review_text]="Very good!"' \
--form 'contents[visibility]="0002"'







 

公開範囲は以下の種類があります。公開範囲を指定しない場合はPrivateになります。

公開範囲概要
Private(非公開)"0001"この公開範囲を指定したユーザー詳細は、登録したユーザーのみ参照することができます。
PublicToUsers(制限付き公開)"0002"この公開範囲を指定したユーザー詳細は、登録したユーザー以外も参照することができます。
ただし、参照するにはユーザーアクセストークンで認証を行う必要があります。
Public(公開)"0003"この公開範囲を指定したユーザー詳細は、登録したユーザー以外も参照することができます。
PublicToUsersと異なり、参照にユーザーアクセストークンは不要です。

ユーザー詳細を1件取得する

ユーザー詳細の1件取得はgetUserDetailメソッド(JavaScript・FlutterはUserDetailQuery.findByIdメソッド)で⾏います。

登録したユーザー詳細のIDを条件に1件データを取得します。

let objectId = "shop_review"
let userAccessToken = "xxx"
let userDetailId = "8bc...qg==" // 登録時に返却されたユーザー詳細ID

RKZService.sharedInstance().getUserDetail(objectId, userAccessToken: userAccessToken, userDetailId: userDetailId) { userDetail, responseStatus in
    if responseStatus.isSuccess, let userDetail = userDetail {
        // 成功時
        print("id:", userDetail.id ?? "")
        print("code:", userDetail.code ?? "")
        print("shop_cd:", userDetail.attributes?["shop_cd"] ?? "")
        print("star:", userDetail.attributes?["star"] ?? "")
        print("review_text:", userDetail.attributes?["review_text"] ?? "")
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}
NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";
NSString *userDetailId = @"8bc...qg=="; // 登録時に返却されたユーザー詳細ID

[[RKZService sharedInstance] getUserDetail:objectId userAccessToken:userAccessToken userDetailId:userDetailId withBlock:^(RKZUserDetailData * _Nullable userDetail, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        NSLog(@"id: %@", userDetail.id);
        NSLog(@"code: %@", userDetail.code);
        NSLog(@"shop_cd: %@", userDetail.attributes[@"shop_cd"]);
        NSLog(@"star: %@", userDetail.attributes[@"star"]);
        NSLog(@"review_text: %@", userDetail.attributes[@"review_text"]);
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];
val objectId = "shop_review"
val userAccessToken = "xxx"
val userDetailId = "8bc...qg==" // 登録時に返却されたユーザー詳細ID

RKZClient.getInstance().getUserDetail(objectId, userAccessToken, userDetailId) { userDetail, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        Log.d(TAG, "id: ${userDetail.id}")
        Log.d(TAG, "code: ${userDetail.code}")
        Log.d(TAG, "shop_cd: ${userDetail.attributes["shop_cd"]}")
        Log.d(TAG, "star: ${userDetail.attributes["star"]}")
        Log.d(TAG, "review_text: ${userDetail.attributes["review_text"]}")
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}
String objectId = "shop_review";
String userAccessToken = "xxx";
String userDetailId = "8bc...qg=="; // 登録時に返却されたユーザー詳細ID

RKZClient.getInstance().getUserDetail(objectId, userAccessToken, userDetailId, new OnGetUserDetailListener() {
    @Override
    public void onGetUserDetail(UserDetail userDetail, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            Log.d(TAG, "id: " + userDetail.getId());
            Log.d(TAG, "code: " + userDetail.getCode());
            Log.d(TAG, "shop_cd: " + userDetail.getAttributesValueString("shop_cd"));
            Log.d(TAG, "star: " + userDetail.getAttributesValueString("star"));
            Log.d(TAG, "review_text: " + userDetail.getAttributesValueString("review_text"));
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});
var objectId = 'shop_review'
var userAccessToken = 'xxx'
var userDetailId = '8bc...qg==' // 登録時に返却されたユーザー詳細ID

RKZClient.getUserDetail(objectId, userAccessToken, userDetailId, function (userDetail) {
  // 成功時
  console.debug('id:', userDetail.id)
  console.debug('code:', userDetail.code)
  console.debug('shop_cd:', userDetail.attributes.shop_cd)
  console.debug('star:', userDetail.attributes.star)
  console.debug('review_text:', userDetail.attributes.review_text)
}, function (error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
const objectId = 'shop_review'
const userAccessToken = 'xxx'
const userDetailId = '8bc...qg==' // 登録時に返却されたユーザー詳細ID

const userDetail = await RKZ.UserDetail.query(objectId, userAccessToken)
    .findById(userDetailId)

if (userDetail != null) {
  console.debug('id:', userDetail.id)
  console.debug('code:', userDetail.code)
  console.debug('shop_cd:', userDetail.attributes.shop_cd)
  console.debug('star:', userDetail.attributes.star)
  console.debug('review_text:', userDetail.attributes.review_text)
}
final objectId = 'shop_review';
final userAccessToken = 'xxx';
final userDetailId = '8bc...qg=='; // 登録時に返却されたユーザー詳細ID

final userDetail = await RKZClient.instance.userDetailQuery(objectId, userAccessToken: userAccessToken)
    .findById(userDetailId);

if (userDetail != null) {
  print('id: ${userDetail.id}');
  print('code: ${userDetail.code}');
  print('shop_cd: ' + userDetail.attributes?['shop_cd']);
  print('star: ' + userDetail.attributes?['star']);
  print('review_text: ' + userDetail.attributes?['review_text']);
}
const objectId = 'shop_review'
const userDetailId = '8bc...qg==' // 登録時に返却されたユーザー詳細ID

const userDetail = await RKZ.UserDetail.query(objectId, { user_no: 'APP00001' })
    .findById(userDetailId)

if (userDetail != null) {
  console.debug('id:', userDetail.id)
  console.debug('code:', userDetail.code)
  console.debug('shop_cd:', userDetail.attributes.shop_cd)
  console.debug('star:', userDetail.attributes.star)
  console.debug('review_text:', userDetail.attributes.review_text)
}
curl --location '<配布したベースURL>/api_zeus/user_detail/ex/get/shop_review' \
--header 'Authorization: Bearer <配布したサーバー認証トークン>' \
--form 'tenant_id="<配布したテナントID>"' \
--form 'contents[user_no]="APP00001"' \
--form 'contents[id]="8bc...qg=="' 

ヒント

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

ヒント

このメソッドは公開範囲がPrivate(非公開)のレコードのみ取得することができます。他の公開範囲のレコードを1件取得する場合は公開されているユーザー詳細を1件取得するを参照してください。

ユーザー詳細を更新する

ユーザー詳細へのデータ更新はeditUserDetailメソッドで行います。

更新したいユーザー詳細のコードを条件に1件データを更新します。

let userDetail = RKZUserDetailData()
userDetail.object_id = "shop_review"
userDetail.code = "0001" // 登録時に返却されたコード
userDetail.attributes = [
    "star": 4 // 独自に追加した項目
]

let userAccessToken = "xxx"

RKZService.sharedInstance().editUserDetail(userDetail, userAccessToken: userAccessToken) { userDetail, responseStatus in
    if responseStatus.isSuccess, let userDetail = userDetail {
        // 成功時
        print("id:", userDetail.id ?? "")
        print("code:", userDetail.code ?? "")
        print("star:", userDetail.attributes?["star"] ?? "")
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}
RKZUserDetailData *userDetail = [[RKZUserDetailData alloc] init];
userDetail.object_id = @"shop_review";
userDetail.code = @"0001"; // 登録時に返却されたコード
userDetail.attributes = @{
    @"star": @4 // 独自に追加した項目
};

NSString *userAccessToken = @"xxx";

[[RKZService sharedInstance] editUserDetail:userDetail userAccessToken:userAccessToken withBlock:^(RKZUserDetailData * _Nullable userDetail, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        NSLog(@"id: %@", userDetail.id);
        NSLog(@"code: %@", userDetail.code);
        NSLog(@"star: %@", userDetail.attributes[@"star"]);
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];
val userDetail = UserDetail()
userDetail.objectId = "shop_review"
userDetail.code = "0001" // 登録時に返却されたコード
userDetail.attributes = mapOf(
    "star" to 4 // 独自に追加した項目
)

val userAccessToken = "xxx"

RKZClient.getInstance().editUserDetail(userDetail, userAccessToken) { newUserDetail, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        Log.d(TAG, "id: ${newUserDetail.id}")
        Log.d(TAG, "code: ${newUserDetail.code}")
        Log.d(TAG, "star: ${newUserDetail.attributes["star"]}")
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}
UserDetail userDetail = new UserDetail();
userDetail.setObjectId("shop_review");
userDetail.setCode("0001"); // 登録時に返却されたコード
userDetail.setAttributesValue("star", 4); // 独自に追加した項目

String userAccessToken = "xxx";

RKZClient.getInstance().editUserDetail(userDetail, userAccessToken, new OnEditUserDetailListener() {
    @Override
    public void onEditUserDetail(UserDetail userDetail, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            Log.d(TAG, "id: " + userDetail.getId());
            Log.d(TAG, "code: " + userDetail.getCode());
            Log.d(TAG, "star: " + userDetail.getAttributesValueString("star"));
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});
var userAccessToken = 'xxx'

var userDetail = {
  object_id: 'shop_review',
  code: '0001', // 登録時に返却されたコード
  attributes: {
    star: 4 // 独自に追加した項目
  }
}

RKZClient.editUserDetail(userDetail, userAccessToken, function (newUserDetail) {
  // 成功時
  console.debug('id:', newUserDetail.id)
  console.debug('code:', newUserDetail.code)
  console.debug('star:', newUserDetail.attributes.star)
}, function (error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
const userAccessToken = 'xxx'

const userDetail = await RKZ.UserDetail.edit(userAccessToken, {
  object_id: 'shop_review',
  code: '0001', // 登録時に返却されたコード
  attributes: {
    star: 4 // 独自に追加した項目
  }
})

console.debug('id:', userDetail.id)
console.debug('code:', userDetail.code)
console.debug('star:', userDetail.attributes.star)
final userAccessToken = 'xxx';

final userDetail = UserDetail();
userDetail.objectId = 'shop_review';
userDetail.code = '0001'; // 登録時に返却されたコード
userDetail.attributes = {
  'star': 4 // 独自に追加した項目
};

final newUserDetail = await RKZClient.instance.editUserDetail(userAccessToken, userDetail);

print('id: ${newUserDetail.id}');
print('code: ${newUserDetail.code}');
print('star: ' + newUserDetail.attributes?['star']);
const userDetail = await RKZ.UserDetail.edit({ user_no: 'APP00001' }, {
  object_id: 'shop_review',
  code: '0001', // 登録時に返却されたコード
  attributes: {
    star: 4 // 独自に追加した項目
  }
})

console.debug('id:', userDetail.id)
console.debug('code:', userDetail.code)
console.debug('star:', userDetail.attributes.star)
curl --location '<配布したベースURL>/api_zeus/user_detail/edit/shop_review' \
--header 'Authorization: Bearer <配布したサーバー認証トークン>' \
--form 'tenant_id="<配布したテナントID>"' \
--form 'contents[user_no]="APP00001"' \
--form 'contents[code]="0001"' \
--form 'contents[free_columns][star]=4'

ユーザー詳細を削除する

ユーザー詳細の削除はdeleteUserDetailメソッド(JavaScript・FlutterはUserDetailQuery.deleteメソッド)で⾏います。

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

let objectId = "shop_review"
let userAccessToken = "xxx"

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

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

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

[[RKZService sharedInstance] deleteUserDetail:objectId userAccessToken:userAccessToken searchConditionArray: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_review"
val userAccessToken = "xxx"

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

RKZClient.getInstance().deleteUserDetail(objectId, userAccessToken, 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_review";
String userAccessToken = "xxx";

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

RKZClient.getInstance().deleteUserDetail(objectId, userAccessToken, searchConditions, new OnDeleteUserDetailListener() {
    @Override
    public void onDeleteUserDetail(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_review'
var userAccessToken = 'xxx'

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

RKZClient.deleteUserDetail(objectId, userAccessToken, searchConditions, function (deleteCount) {
  // 成功時
  console.debug('deleteCount:', deleteCount)
}, function (error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
const objectId = 'shop_review'
const userAccessToken = 'xxx'

const count = await RKZ.UserDetail.query(objectId, userAccessToken)
    .equalTo('code', '0001') // code=0001のデータ1件を削除
    .delete()
console.debug('count:', count)
final objectId = 'shop_review';
final userAccessToken = 'xxx';

final query = RKZClient.instance.userDetailQuery(objectId, userAccessToken: userAccessToken)
  ..equalTo('code', '0001'); // code=0001のデータ1件を削除
final count = await query.delete();

print('count: $count');
const objectId = 'shop_review'

const count = await RKZ.UserDetail.query(objectId, { user_no: 'APP00001' })
    .equalTo('code', '0001') // code=0001のデータ1件を削除
    .delete()
console.debug('count:', count)
curl --location '<配布したベースURL>/api_zeus/user_detail/delete/shop_review' \
--header 'Authorization: Bearer <配布したサーバー認証トークン>' \
--form 'tenant_id="<配布したテナントID>"' \
--form 'contents[user_no]="APP00001"' \
--form 'contents[search_condition][code]="0001"'

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

let objectId = "shop_review"
let userAccessToken = "xxx"

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

[[RKZService sharedInstance] deleteAllUserDetail:objectId userAccessToken:userAccessToken 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_review"
val userAccessToken = "xxx"

RKZClient.getInstance().deleteAllUserDetail(objectId, userAccessToken) { 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_review";
String userAccessToken = "xxx";

RKZClient.getInstance().deleteAllUserDetail(objectId, userAccessToken, new OnDeleteUserDetailListener() {
    @Override
    public void onDeleteUserDetail(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_review'
var userAccessToken = 'xxx'

RKZClient.deleteAllUserDetail(objectId, userAccessToken, function (deleteCount) {
  // 成功時
  console.debug('deleteCount:', deleteCount)
}, function (error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
const objectId = 'shop_review'
const userAccessToken = 'xxx'

const count = await RKZ.UserDetail.deleteAll(userAccessToken, objectId)
console.debug('count:', count)
final objectId = 'shop_review';
final userAccessToken = 'xxx';

final query = RKZClient.instance.deleteAllUserDetail(userAccessToken, objectId)
final count = await query.delete();

print('count: $count');
const objectId = 'shop_review'

const count = await RKZ.UserDetail.deleteAll({ user_no: 'APP00001' }, objectId)
console.debug('count:', count)
curl --location '<配布したベースURL>/api_zeus/user_detail/delete/shop_review' \
--header 'Authorization: Bearer <配布したサーバー認証トークン>' \
--form 'tenant_id="<配布したテナントID>"' \
--form 'contents[user_no]="APP00001"' \
--form 'contents[all_delete_flg]="1"'

注意

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

ユーザー詳細を検索する

ユーザー詳細の検索はgetUserDetailListメソッド(JavaScript・FlutterはUserDetailQuery.findメソッド)で⾏います。

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

let objectId = "shop_review"
let userAccessToken = "xxx"

// 検索条件
let searchConditions = [
    // starが3以上のレコードに絞り込む
    RKZSearchCondition(RKZSearchConditionGreaterThanInclude, searchColumn: "star", searchValueArray: ["3"])
]
// ソート条件
let sortConditions = [
    // starの降順にソート
    RKZSortCondition(RKZSortTypeDesc, sortColumn: "star")
]

// 検索を実行
RKZService.sharedInstance().getUserDetailList(objectId, userAccessToken: userAccessToken, searchConditionArray: searchConditions, sortConditionArray: sortConditions) { userDetails, responseStatus in
    if responseStatus.isSuccess {
        // 成功時
        userDetails.forEach { item in
            print("id:", item.id ?? "")
            print("code:", item.code ?? "")
            print("shop_cd:", item.attributes?["shop_cd"] ?? "")
            print("star:", item.attributes?["star"] ?? "")
            print("review_text:", item.attributes?["review_text"] ?? "")
        }
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}
NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";

// 検索条件
NSArray<RKZSearchCondition *> *searchConditions = @[
    // starが3以上のレコードに絞り込む
    [[RKZSearchCondition alloc] initWithSearchConditionType:RKZSearchConditionGreaterThanInclude searchColumn:@"star" searchValueArray:@[@"3"]]
];
// ソート条件
NSArray<RKZSortCondition *> *sortConditions = @[
    // starの降順にソート
    [[RKZSortCondition alloc] initWithSortType:RKZSortTypeDesc sortColumn:@"star"]
];

[[RKZService sharedInstance] getUserDetailList:objectId userAccessToken:userAccessToken searchConditionArray:searchConditions sortConditionArray:sortConditions withBlock:^(NSArray<RKZUserDetailData *> * _Nonnull userDetails, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        for (RKZUserDetailData *item in userDetails) {
            NSLog(@"id: %@", item.id);
            NSLog(@"code: %@", item.code);
            NSLog(@"shop_cd: %@", item.attributes[@"shop_cd"]);
            NSLog(@"star: %@", item.attributes[@"star"]);
            NSLog(@"review_text: %@", item.attributes[@"review_text"]);
        }
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];
val objectId = "shop_review"
val userAccessToken = "xxx"

// 検索条件
val searchConditions = listOf(
    // starが3以上のレコードに絞り込む
    RKZSearchCondition(RKZSearchCondition.GREATER_THAN_INCLUDE, "star", listOf("3"))
)
// ソート条件
val sortConditions = listOf(
    // starの降順にソート
    RKZSortCondition(RKZSortCondition.DESC, "star")
)

// 検索を実行
RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, searchConditions, sortConditions) { userDetails, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        userDetails.forEach {
            Log.d(TAG, "id: ${it.id}")
            Log.d(TAG, "code: ${it.code}")
            Log.d(TAG, "shop_cd: ${it.attributes["shop_cd"]}")
            Log.d(TAG, "star: ${it.attributes["star"]}")
            Log.d(TAG, "review_text: ${it.attributes["review_text"]}")
        }
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}
String objectId = "shop_review";
String userAccessToken = "xxx";

// 検索条件
List<RKZSearchCondition> searchConditions = Arrays.asList(
    // starが3以上のレコードに絞り込む
    new RKZSearchCondition(RKZSearchCondition.GREATER_THAN_INCLUDE, "star", Arrays.asList("3"))
);
// ソート条件
List<RKZSortCondition> sortConditions = Arrays.asList(
    // starの降順にソート
    new RKZSortCondition(RKZSortCondition.DESC, "star")
);

RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, searchConditions, sortConditions, new OnGetUserDetailListListener() {
    @Override
    public void onGetUserDetailList(List<UserDetail> userDetails, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            for (UserDetail item : userDetails) {
                Log.d(TAG, "id: " + item.getId());
                Log.d(TAG, "code: " + item.getCode());
                Log.d(TAG, "shop_cd: " + item.getAttributesValueString("shop_cd"));
                Log.d(TAG, "star: " + item.getAttributesValueString("star"));
                Log.d(TAG, "review_text: " + item.getAttributesValueString("review_text"));
            }
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});
var objectId = 'shop_review'
var userAccessToken = 'xxx'

// 検索条件
var searchConditions = [
  // starが3以上のレコードに絞り込む
  RKZSearchCondition.greaterThanInclude('star', '3')
]
// ソート条件
var sortConditions = [
  // starの降順にソート
  RKZSortCondition.desc('star')
]

RKZClient.getUserDetailList(objectId, userAccessToken, searchConditions, sortConditions, function (userDetails) {
  // 成功時
  userDetails.forEach(function (item) {
    console.debug('id:', item.id)
    console.debug('code:', item.code)
    console.debug('shop_cd:', item.attributes.shop_cd)
    console.debug('star:', item.attributes.star)
    console.debug('review_text:', item.attributes.review_text)
  })
}, function (error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
const objectId = 'shop_review'
const userAccessToken = 'xxx'

const result = await RKZ.UserDetail.query(objectId, userAccessToken)
    .greaterThanOrEqualTo('star', 3) // starが3以上のレコードに絞り込む
    .desc('star') // starの降順にソート
    .find()
result.data.forEach(item => {
  console.debug('id:', item.id)
  console.debug('code:', item.code)
  console.debug('shop_cd:', item.attributes.shop_cd)
  console.debug('star:', item.attributes.star)
  console.debug('review_text:', item.attributes.review_text)
})
final objectId = 'shop_review';
final userAccessToken = 'xxx';

final query = RKZClient.instance.userDetailQuery(objectId, userAccessToken: userAccessToken)
  ..greaterThanOrEqualTo('star', '3') // starが3以上のレコードに絞り込む
  ..desc('star'); // starの降順にソート
final result = await query.find();

result.data.forEach((item) {
  print('id: ${item.id}');
  print('code: ${item.code}');
  print('shop_cd: ' + item.attributes?['shop_cd']);
  print('star: ' + item.attributes?['star']);
  print('review_text: ' + item.attributes?['review_text']);
});
const objectId = 'shop_review'

const result = await RKZ.UserDetail.query(objectId, { user_no: 'APP00001' })
    .greaterThanOrEqualTo('star', 3) // starが3以上のレコードに絞り込む
    .desc('star') // starの降順にソート
    .find()
result.data.forEach(item => {
  console.debug('id:', item.id)
  console.debug('code:', item.code)
  console.debug('shop_cd:', item.attributes.shop_cd)
  console.debug('star:', item.attributes.star)
  console.debug('review_text:', item.attributes.review_text)
})
curl --location '<配布したベースURL>/api_zeus/user_detail/ex/get/shop_review' \
--header 'Authorization: Bearer <配布したサーバー認証トークン>' \
--form 'tenant_id="<配布したテナントID>"' \
--form 'contents[user_no]="APP00001"' \
--form 'contents[search_condition][star]="3∀greater_than_include"' \
--form 'contents[order_condition][star][sort_no]=1' \
--form 'contents[order_condition][star][sort_type]="0002"'

ヒント

このメソッドは公開範囲がPrivate(非公開)のレコードのみ検索することができます。他の公開範囲のレコードを検索する場合は公開されているユーザー詳細を検索するを参照してください。

公開されているユーザー詳細を1件取得する

公開範囲がPrivate(非公開)以外のレコードを1件取得するには、getSharedUserDetailメソッド(JavaScript・FlutterはUserDetailQuery.sharedByIdメソッド)を使用します。

let objectId = "shop_review"
let userAccessToken = "xxx"
let userDetailId = "8bc...qg==" // 登録時に返却されたユーザー詳細ID
let visibility = [RKZUserDetailVisibilityPublicToUsers] // 参照したいデータの公開範囲

RKZService.sharedInstance().getSharedUserDetail(objectId, userAccessToken: userAccessToken, userDetailId: userDetailId, visibility: visibility) { userDetail, responseStatus in
    if responseStatus.isSuccess, let userDetail = userDetail {
        // 成功時
        print("id:", userDetail.id ?? "")
        print("code:", userDetail.code ?? "")
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}
NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";
NSString *userDetailId = @"8bc...qg=="; // 登録時に返却されたユーザー詳細ID
NSArray<NSString *> *visibility = @[RKZUserDetailVisibilityPublicToUsers]; // 参照したいデータの公開範囲

[[RKZService sharedInstance] getSharedUserDetail:objectId userAccessToken:userAccessToken userDetailId:userDetailId visibility:visibility withBlock:^(RKZUserDetailData * _Nullable userDetail, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        NSLog(@"id: %@", userDetail.id);
        NSLog(@"code: %@", userDetail.code);
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];
val objectId = "shop_review"
val userAccessToken = "xxx"
val userDetailId = "8bc...qg==" // 登録時に返却されたユーザー詳細ID
val visibility = listOf(UserDetail.VisibilityType.PublicToUsers) // 参照したいデータの公開範囲

RKZClient.getInstance().getSharedUserDetail(objectId, userAccessToken, userDetailId, visibility) { userDetail, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        Log.d(TAG, "id: ${userDetail.id}")
        Log.d(TAG, "code: ${userDetail.code}")
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}
String objectId = "shop_review";
String userAccessToken = "xxx";
String userDetailId = "8bc...qg=="; // 登録時に返却されたユーザー詳細ID
List<UserDetail.VisibilityType> visibility = Arrays.asList(UserDetail.VisibilityType.PublicToUsers); // 参照したいデータの公開範囲

RKZClient.getInstance().getSharedUserDetail(objectId, userAccessToken, userDetailId, visibility, new OnGetUserDetailListener() {
    @Override
    public void onGetUserDetail(UserDetail userDetail, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            Log.d(TAG, "id: " + userDetail.getId());
            Log.d(TAG, "code: " + userDetail.getCode());
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});
var objectId = 'shop_review'
var userAccessToken = 'xxx'
var userDetailId = '8bc...qg==' // 登録時に返却されたユーザー詳細ID
var visibility = ['0002'] // 参照したいデータの公開範囲(PublicToUsers)

RKZClient.getSharedUserDetail(objectId, userAccessToken, userDetailId, visibility, function (userDetail) {
  // 成功時
  console.debug('id:', userDetail.id)
  console.debug('code:', userDetail.code)
}, function (error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
const objectId = 'shop_review'
const userAccessToken = 'xxx'
const userDetailId = '8bc...qg==' // 登録時に返却されたユーザー詳細ID
const visibility = [RKZ.VisibilityType.PublicToUsers] // 参照したいデータの公開範囲

const userDetail = await RKZ.UserDetail.query(objectId, userAccessToken)
    .sharedById(userDetailId, visibility)

console.debug('id:', userDetail.id)
console.debug('code:', userDetail.code)
final objectId = 'shop_review';
final userAccessToken = 'xxx';
final userDetailId = '8bc...qg=='; // 登録時に返却されたユーザー詳細ID
final visibility = [VisibilityType.publicToUsers]; // 参照したいデータの公開範囲

final userDetail = await RKZClient.instance.userDetailQuery(objectId, userAccessToken: userAccessToken)
    .sharedById(userDetailId, visibility: visibility);

if (userDetail != null) {
  print('id: ${userDetail.id}');
  print('code: ${userDetail.code}');
}

条件に指定した公開範囲と一致するデータのみ取得される点に気をつけてください。先述のサンプルコードではPublicToUsersのみ条件に指定しているため、取得対象の公開範囲がPrivateの場合は取得されません。

取得対象がPrivateでも取得したい場合は、条件の公開範囲を追加してください。

let objectId = "shop_review"
let userAccessToken = "xxx"
let userDetailId = "8bc...qg==" // 登録時に返却されたユーザー詳細ID
let visibility = [RKZUserDetailVisibilityPrivate, RKZUserDetailVisibilityPublicToUsers] // 公開範囲がPrivateまたはPublicToUsersの場合取得される

RKZService.sharedInstance().getSharedUserDetail(objectId, userAccessToken: userAccessToken, userDetailId: userDetailId, visibility: visibility) { userDetail, responseStatus in
    // ...
}



 




NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";
NSString *userDetailId = @"8bc...qg=="; // 登録時に返却されたユーザー詳細ID
NSArray<NSString *> *visibility = @[RKZUserDetailVisibilityPrivate, RKZUserDetailVisibilityPublicToUsers]; // 公開範囲がPrivateまたはPublicToUsersの場合取得される

[[RKZService sharedInstance] getSharedUserDetail:objectId userAccessToken:userAccessToken userDetailId:userDetailId visibility:visibility withBlock:^(RKZUserDetailData * _Nullable userDetail, RKZResponseStatus * _Nonnull responseStatus) {
    // ...
}];



 




val objectId = "shop_review"
val userAccessToken = "xxx"
val userDetailId = "8bc...qg==" // 登録時に返却されたユーザー詳細ID
val visibility = listOf(UserDetail.VisibilityType.Private, UserDetail.VisibilityType.PublicToUsers) // 公開範囲がPrivateまたはPublicToUsersの場合取得される

RKZClient.getInstance().getSharedUserDetail(objectId, userAccessToken, userDetailId, visibility) { userDetail, rkzResponseStatus ->
    // ...
}



 




String objectId = "shop_review";
String userAccessToken = "xxx";
String userDetailId = "8bc...qg=="; // 登録時に返却されたユーザー詳細ID
List<UserDetail.VisibilityType> visibility = Arrays.asList(UserDetail.VisibilityType.Private, UserDetail.VisibilityType.PublicToUsers); // 公開範囲がPrivateまたはPublicToUsersの場合取得される

RKZClient.getInstance().getSharedUserDetail(objectId, userAccessToken, userDetailId, visibility, new OnGetUserDetailListener() {
    @Override
    public void onGetUserDetail(UserDetail userDetail, RKZResponseStatus rkzResponseStatus) {
        // ...
    }
});



 







var objectId = 'shop_review'
var userAccessToken = 'xxx'
var userDetailId = '8bc...qg==' // 登録時に返却されたユーザー詳細ID
var visibility = ['0001', '0002'] // 公開範囲がPrivateまたはPublicToUsersの場合取得される

RKZClient.getSharedUserDetail(objectId, userAccessToken, userDetailId, visibility, function (userDetail) {
  // ...
}, function (error) {
  // ...
})



 






const objectId = 'shop_review'
const userAccessToken = 'xxx'
const userDetailId = '8bc...qg==' // 登録時に返却されたユーザー詳細ID
const visibility = [RKZ.VisibilityType.Private, RKZ.VisibilityType.PublicToUsers] // 公開範囲がPrivateまたはPublicToUsersの場合取得される

const userDetail = await RKZ.UserDetail.query(objectId, userAccessToken)
    .sharedById(userDetailId, visibility)



 



final objectId = 'shop_review';
final userAccessToken = 'xxx';
final userDetailId = '8bc...qg=='; // 登録時に返却されたユーザー詳細ID
final visibility = [VisibilityType.private, VisibilityType.publicToUsers]; // 公開範囲がPrivateまたはPublicToUsersの場合取得される

final userDetail = await RKZClient.instance.userDetailQuery(objectId, userAccessToken: userAccessToken)
    .sharedById(userDetailId, visibility: visibility);



 




取得対象がPublicの場合、ユーザーアクセストークンは不要です。

let objectId = "shop_review"
let userAccessToken: String? = nil // ユーザーアクセストークンは不要
let userDetailId = "8bc...qg==" // 登録時に返却されたユーザー詳細ID
let visibility = [RKZUserDetailVisibilityPublic] // 公開範囲がPublicの場合取得される

RKZService.sharedInstance().getSharedUserDetail(objectId, userAccessToken: userAccessToken, userDetailId: userDetailId, visibility: visibility) { userDetail, responseStatus in
    // ...
}

 

 




NSString *objectId = @"shop_review";
NSString *userAccessToken = nil; // ユーザーアクセストークンは不要
NSString *userDetailId = @"8bc...qg=="; // 登録時に返却されたユーザー詳細ID
NSArray<NSString *> *visibility = @[RKZUserDetailVisibilityPublic]; // 公開範囲がPublicの場合取得される

[[RKZService sharedInstance] getSharedUserDetail:objectId userAccessToken:userAccessToken userDetailId:userDetailId visibility:visibility withBlock:^(RKZUserDetailData * _Nullable userDetail, RKZResponseStatus * _Nonnull responseStatus) {
    // ...
}];

 

 




val objectId = "shop_review"
val userAccessToken: String? = null // ユーザーアクセストークンは不要
val userDetailId = "8bc...qg==" // 登録時に返却されたユーザー詳細ID
val visibility = listOf(UserDetail.VisibilityType.Public) // 公開範囲がPublicの場合取得される

RKZClient.getInstance().getSharedUserDetail(objectId, userAccessToken, userDetailId, visibility) { userDetail, rkzResponseStatus ->
    // ...
}

 

 




String objectId = "shop_review";
String userAccessToken = null; // ユーザーアクセストークンは不要
String userDetailId = "8bc...qg=="; // 登録時に返却されたユーザー詳細ID
List<UserDetail.VisibilityType> visibility = Arrays.asList(UserDetail.VisibilityType.Public); // 公開範囲がPublicの場合取得される

RKZClient.getInstance().getSharedUserDetail(objectId, userAccessToken, userDetailId, visibility, new OnGetUserDetailListener() {
    @Override
    public void onGetUserDetail(UserDetail userDetail, RKZResponseStatus rkzResponseStatus) {
        // ...
    }
});

 

 







var objectId = 'shop_review'
var userAccessToken = null
var userDetailId = '8bc...qg==' // 登録時に返却されたユーザー詳細ID
var visibility = ['0003'] // 公開範囲がPublicの場合取得される

RKZClient.getSharedUserDetail(objectId, userAccessToken, userDetailId, visibility, function (userDetail) {
  // ...
}, function (error) {
  // ...
})

 

 






const objectId = 'shop_review'
const userDetailId = '8bc...qg==' // 登録時に返却されたユーザー詳細ID
const visibility = [RKZ.VisibilityType.Public] // 公開範囲がPublicの場合取得される

const userDetail = await RKZ.UserDetail.query(objectId) // ユーザーアクセストークンは不要
    .sharedById(userDetailId, visibility)


 

 

final objectId = 'shop_review';
final userDetailId = '8bc...qg=='; // 登録時に返却されたユーザー詳細ID
final visibility = [VisibilityType.public]; // 公開範囲がPublicの場合取得される

final userDetail = await RKZClient.instance.userDetailQuery(objectId) // ユーザーアクセストークンは不要
    .sharedById(userDetailId, visibility: visibility);


 

 

公開されているユーザー詳細を検索する

公開範囲がPrivate(非公開)以外のレコードを検索するには、getSharedUserDetailListメソッド(JavaScript・FlutterはUserDetailQuery.sharedメソッド)を使用します。

let objectId = "shop_review"
let userAccessToken = "xxx"
let visibility = [RKZUserDetailVisibilityPublicToUsers] // 参照したいデータの公開範囲

RKZService.sharedInstance().getSharedUserDetailList(objectId, userAccessToken: userAccessToken, visibility: visibility, searchConditionArray: nil, sortConditionArray: nil) { userDetails, responseStatus in
    if responseStatus.isSuccess {
        // 成功時
        userDetails.forEach { item in
            print("id:", item.id ?? "")
            print("code:", item.code ?? "")
        }
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}
NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";
NSArray<NSString *> *visibility = @[RKZUserDetailVisibilityPublicToUsers]; // 参照したいデータの公開範囲

[[RKZService sharedInstance] getSharedUserDetailList:objectId userAccessToken:userAccessToken visibility:visibility searchConditionArray:nil sortConditionArray:nil withBlock:^(NSArray<RKZUserDetailData *> * _Nonnull userDetails, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        for (RKZUserDetailData *item in userDetails) {
            NSLog(@"id: %@", item.id);
            NSLog(@"code: %@", item.code);
        }
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];
val objectId = "shop_review"
val userAccessToken = "xxx"
val visibility = listOf(UserDetail.VisibilityType.PublicToUsers) // 参照したいデータの公開範囲

RKZClient.getInstance().getSharedUserDetailList(objectId, userAccessToken, visibility, null, null) { userDetails, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        userDetails.forEach {
            Log.d(TAG, "id: ${it.id}")
            Log.d(TAG, "code: ${it.code}")
        }
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}
String objectId = "shop_review";
String userAccessToken = "xxx";
List<UserDetail.VisibilityType> visibility = Arrays.asList(UserDetail.VisibilityType.PublicToUsers); // 参照したいデータの公開範囲

RKZClient.getInstance().getSharedUserDetailList(objectId, userAccessToken, visibility, null, null, new OnGetUserDetailListListener() {
    @Override
    public void onGetUserDetailList(List<UserDetail> userDetails, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            for (UserDetail item : userDetails) {
                Log.d(TAG, "id: " + item.getId());
                Log.d(TAG, "code: " + item.getCode());
            }
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});
var objectId = 'shop_review'
var userAccessToken = 'xxx'
var visibility = ['0002'] // 参照したいデータの公開範囲(PublicToUsers)

RKZClient.getSharedUserDetailList(objectId, userAccessToken, visibility, null, null, function (userDetails) {
  // 成功時
  userDetails.forEach(function (item) {
    console.debug('id:', item.id)
    console.debug('code:', item.code)
  })
}, function (error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
const objectId = 'shop_review'
const userAccessToken = 'xxx'
const visibility = [RKZ.VisibilityType.PublicToUsers] // 参照したいデータの公開範囲

const result = await RKZ.UserDetail.query(objectId, userAccessToken)
    .shared(visibility)

result.data.forEach(item => {
  console.debug('id:', item.id)
  console.debug('code:', item.code)
})
final objectId = 'shop_review';
final userAccessToken = 'xxx';
final visibility = [VisibilityType.publicToUsers]; // 参照したいデータの公開範囲

final query = RKZClient.instance.userDetailQuery(objectId, userAccessToken: userAccessToken);
final result = await query.shared(visibility: visibility);

result.data.forEach((item) {
  print('id: ${item.id}');
  print('code: ${item.code}');
});

ページング機能を利⽤してユーザー詳細を検索する

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

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

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

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

RKZService.sharedInstance().getPaginateUserDetailList(objectId, userAccessToken: userAccessToken, 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_review";
NSString *userAccessToken = @"xxx";
NSNumber *limit = @10; // 取得するデータの件数を指定します
NSNumber *offset = @0; // データの取得位置を指定します

[[RKZService sharedInstance] getPaginateUserDetailList:objectId userAccessToken:userAccessToken limit:limit offset:offset searchConditionArray:nil sortConditionArray:nil withBlock:^(RKZPagingData<RKZUserDetailData *> * _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_review"
val userAccessToken = "xxx"
val limit = 10 // 取得するデータの件数を指定します
val offset = 0 // データの取得位置を指定します

RKZClient.getInstance().getPaginateUserDetailList(objectId, userAccessToken, 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_review";
String userAccessToken = "xxx";
Integer limit = 10; // 取得するデータの件数を指定します
Integer offset = 0; // データの取得位置を指定します

RKZClient.getInstance().getPaginateUserDetailList(objectId, userAccessToken, limit, offset, null, null, new OnGetPagingDataListener<UserDetail>() {
    @Override
    public void onGetPagingData(PagingData<UserDetail> 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_review'
var userAccessToken = 'xxx'
var limit = 10 // 取得するデータの件数を指定します
var offset = 0 // データの取得位置を指定します

RKZClient.getPaginateUserDetailList(objectId, userAccessToken, 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_review'
const userAccessToken = 'xxx'

const result = await RKZ.UserDetail.query(objectId, userAccessToken)
    .offset(0) // データの取得位置を指定します
    .limit(10) // 取得するデータの件数を指定します
    .find() // 検索を実行

console.debug('result_cnt:', result.result_cnt)
console.debug('data:', result.data)
final objectId = 'shop_review';
final userAccessToken = 'xxx';

final query = RKZClient.instance.userDetailQuery(objectId, userAccessToken: userAccessToken)
  ..offset = 0 // データの取得位置を指定します
  ..limit = 10; // 取得するデータの件数を指定します
final result = await query.find(); // 検索を実行

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

ユーザー詳細をお気に入りに追加する

「お気に入り」とはユーザーごとに特定のユーザー詳細をマーク付けする機能です。

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

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

let userAccessToken = "xxx"

let userDetail = RKZUserDetailData()
userDetail.object_id = "shop_review"
userDetail.id = "8bc...qg==" // お気に入りに追加するユーザー詳細ID

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

RKZUserDetailData *userDetail = [[RKZUserDetailData alloc] init];
userDetail.object_id = @"shop_review";
userDetail.id = @"8bc...qg=="; // お気に入りに追加するユーザー詳細ID

[[RKZService sharedInstance] addUserDetailToFavorite:userDetail 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 userDetail = UserDetail()
userDetail.objectId = "shop_review"
userDetail.id = "8bc...qg==" // お気に入りに追加するユーザー詳細ID

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

UserDetail userDetail = new UserDetail();
userDetail.setObjectId("shop_review");
userDetail.setId("8bc...qg=="); // お気に入りに追加するユーザー詳細ID

RKZClient.getInstance().addUserDetailToFavorite(userDetail, 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 userDetail = {
  object_id: 'shop_review',
  id: '8bc...qg==' // お気に入りに追加するユーザー詳細ID
}

RKZClient.addUserDetailToFavorite(userDetail, 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_review'
const userDetailId = '8bc...qg==' // お気に入りに追加するユーザー詳細ID

await RKZ.UserDetail.addToFavorite(userAccessToken, objectId, userDetailId)
final userAccessToken = 'xxx';
final objectId = 'shop_review';
final userDetailId = '8bc...qg=='; // お気に入りに追加するユーザー詳細ID

await RKZClient.instance.addUserDetailToFavorite(userAccessToken, objectId, userDetailId);

ユーザー詳細をお気に入りから削除する

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

let userAccessToken = "xxx"

let userDetail = RKZUserDetailData()
userDetail.object_id = "shop_review"
userDetail.id = "8bc...qg==" // お気に入りから削除するユーザー詳細ID

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

RKZUserDetailData *userDetail = [[RKZUserDetailData alloc] init];
userDetail.object_id = @"shop_review";
userDetail.id = @"8bc...qg=="; // お気に入りから削除するユーザー詳細ID

[[RKZService sharedInstance] deleteUserDetailFromFavorite:userDetail 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 userDetail = UserDetail()
userDetail.objectId = "shop_review"
userDetail.id = "8bc...qg==" // お気に入りから削除するユーザー詳細ID

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

UserDetail userDetail = new UserDetail();
userDetail.setObjectId("shop_review");
userDetail.setId("8bc...qg=="); // お気に入りから削除するユーザー詳細ID

RKZClient.getInstance().deleteUserDetailFromFavorite(userDetail, 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 userDetail = {
  object_id: 'shop_review',
  id: '8bc...qg==' // お気に入りから削除するユーザー詳細ID
}

RKZClient.deleteUserDetailFromFavorite(userDetail, 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_review'
const userDetailId = '8bc...qg==' // お気に入りから削除するユーザー詳細ID

await RKZ.UserDetail.deleteFromFavorite(userAccessToken, objectId, userDetailId)
final userAccessToken = 'xxx';
final objectId = 'shop_review';
final userDetailId = '8bc...qg=='; // お気に入りから削除するユーザー詳細ID

await RKZClient.instance.deleteUserDetailFromFavorite(userAccessToken, objectId, userDetailId);

お気に⼊り追加したユーザー詳細を検索する

ユーザー詳細を検索する際にお気に⼊り情報を一緒に取得するには、show_favoritetrueにします。(JavaScript・FlutterはUserDetailQuery.withFavoriteメソッドを呼び出してください)

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

let objectId = "shop_review"
let userAccessToken = "xxx"

let extensionAttribute = RKZUserDetailExtensionAttribute()
extensionAttribute.show_favorite = true

// 検索を実行
RKZService.sharedInstance().getUserDetailList(objectId, userAccessToken: userAccessToken, searchConditionArray: nil, sortConditionArray: nil, extensionAttribute: extensionAttribute) { userDetails, responseStatus in
    if responseStatus.isSuccess {
        // 成功時
        userDetails.forEach { item in
            print("id:", item.id ?? "")
            print("code:", item.code ?? "")
            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_review";
NSString *userAccessToken = @"xxx";

RKZUserDetailExtensionAttribute *extensionAttribute = [[RKZUserDetailExtensionAttribute alloc] init];
extensionAttribute.show_favorite = YES;

// 検索を実行
[[RKZService sharedInstance] getUserDetailList:objectId userAccessToken:userAccessToken searchConditionArray:nil sortConditionArray:nil extensionAttribute:extensionAttribute withBlock:^(NSArray<RKZUserDetailData *> * _Nonnull userDetails, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        for (RKZUserDetailData *item in userDetails) {
            NSLog(@"id: %@", item.id);
            NSLog(@"code: %@", item.code);
            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_review"
val userAccessToken = "xxx"

val extensionAttribute = UserDetailExtensionAttribute()
extensionAttribute.setShowFavorite(true)

// 検索を実行
RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, null, null, extensionAttribute) { userDetails, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        userDetails.forEach {
            Log.d(TAG, "id: ${it.id}")
            Log.d(TAG, "code: ${it.code}")
            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_review";
String userAccessToken = "xxx";

UserDetailExtensionAttribute extensionAttribute = new UserDetailExtensionAttribute();
extensionAttribute.setShowFavorite(true);

RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, null, null, extensionAttribute, new OnGetUserDetailListListener() {
    @Override
    public void onGetUserDetailList(List<UserDetail> userDetails, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            for (UserDetail item : userDetails) {
                Log.d(TAG, "id: " + item.getId());
                Log.d(TAG, "code: " + item.getCode());
                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_review'
var userAccessToken = 'xxx'

var extensionAttribute = {
  show_favorite: true
}

RKZClient.getUserDetailList(objectId, userAccessToken, null, null, extensionAttribute, function (userDetails) {
  // 成功時
  userDetails.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_review'
const userAccessToken = 'xxx'

const result = await RKZ.UserDetail.query(objectId, userAccessToken)
    .withFavorite()
    .find()
result.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_review';
final userAccessToken = 'xxx';

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

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




 





 
 


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

let objectId = "shop_review"
let userAccessToken = "xxx"

let extensionAttribute = RKZUserDetailExtensionAttribute()
extensionAttribute.show_favorite = true
extensionAttribute.show_favorite_summary = true

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





 








 







NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";

RKZUserDetailExtensionAttribute *extensionAttribute = [[RKZUserDetailExtensionAttribute alloc] init];
extensionAttribute.show_favorite = YES;
extensionAttribute.show_favorite_summary = YES;

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





 








 







val objectId = "shop_review"
val userAccessToken = "xxx"

val extensionAttribute = UserDetailExtensionAttribute()
extensionAttribute.setShowFavorite(true)
extensionAttribute.setShowFavoriteSummary(true)

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





 








 







String objectId = "shop_review";
String userAccessToken = "xxx";

UserDetailExtensionAttribute extensionAttribute = new UserDetailExtensionAttribute();
extensionAttribute.setShowFavorite(true);
extensionAttribute.setShowFavoriteSummary(true);

RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, null, null, extensionAttribute, new OnGetUserDetailListListener() {
    @Override
    public void onGetUserDetailList(List<UserDetail> userDetails, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            for (UserDetail item : userDetails) {
                Log.d(TAG, "id: " + item.getId());
                Log.d(TAG, "code: " + item.getCode());
                Log.d(TAG, "favoriteCount: " + item.getSysFavoriteSum().getFavoriteCount()); // お気に入りに追加されている件数
            }
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});





 









 








var objectId = 'shop_review'
var userAccessToken = 'xxx'

var extensionAttribute = {
  show_favorite: true,
  show_favorite_summary: true
}

RKZClient.getUserDetailList(objectId, userAccessToken, null, null, extensionAttribute, function (userDetails) {
  // 成功時
  userDetails.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_review'
const userAccessToken = 'xxx'

const result = await RKZ.UserDetail.query(objectId, userAccessToken)
    .withFavorite()
    .withFavoriteSummary()
    .find()
result.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_review';
final userAccessToken = 'xxx';

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

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





 





 


ユーザーがお気に入り登録しているユーザー詳細に検索結果を絞り込むことができます。

let objectId = "shop_review"
let userAccessToken = "xxx"

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

let extensionAttribute = RKZUserDetailExtensionAttribute()
extensionAttribute.show_favorite = true

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





 









NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";

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

RKZUserDetailExtensionAttribute *extensionAttribute = [[RKZUserDetailExtensionAttribute alloc] init];
extensionAttribute.show_favorite = YES;

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





 









val objectId = "shop_review"
val userAccessToken = "xxx"

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

val extensionAttribute = UserDetailExtensionAttribute()
extensionAttribute.setShowFavorite(true)

// 検索を実行
RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, searchConditions, null, extensionAttribute) { userDetails, rkzResponseStatus ->
    // ...
}





 









String objectId = "shop_review";
String userAccessToken = "xxx";

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

UserDetailExtensionAttribute extensionAttribute = new UserDetailExtensionAttribute();
extensionAttribute.setShowFavorite(true);

RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, searchConditions, null, extensionAttribute, new OnGetUserDetailListListener() {
    @Override
    public void onGetUserDetailList(List<UserDetail> userDetails, RKZResponseStatus rkzResponseStatus) {
        // ...
    }
});





 











var objectId = 'shop_review'
var userAccessToken = 'xxx'

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

var extensionAttribute = {
  show_favorite: true
}

RKZClient.getUserDetailList(objectId, userAccessToken, searchConditions, null, extensionAttribute, function (userDetails) {
  // ...
}, function (error) {
  // ...
})





 











const objectId = 'shop_review'
const userAccessToken = 'xxx'

const result = await RKZ.UserDetail.query(objectId, userAccessToken)
    .withFavorite(true)
    .find()




 

final objectId = 'shop_review';
final userAccessToken = 'xxx';

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




 


逆に、ユーザーがお気に入り登録していないユーザー詳細に検索結果を絞り込むこともできます。

let objectId = "shop_review"
let userAccessToken = "xxx"

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

let extensionAttribute = RKZUserDetailExtensionAttribute()
extensionAttribute.show_favorite = true

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





 









NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";

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

RKZUserDetailExtensionAttribute *extensionAttribute = [[RKZUserDetailExtensionAttribute alloc] init];
extensionAttribute.show_favorite = YES;

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





 









val objectId = "shop_review"
val userAccessToken = "xxx"

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

val extensionAttribute = UserDetailExtensionAttribute()
extensionAttribute.setShowFavorite(true)

// 検索を実行
RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, searchConditions, null, extensionAttribute) { userDetails, rkzResponseStatus ->
    // ...
}





 









String objectId = "shop_review";
String userAccessToken = "xxx";

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

UserDetailExtensionAttribute extensionAttribute = new UserDetailExtensionAttribute();
extensionAttribute.setShowFavorite(true);

RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, searchConditions, null, extensionAttribute, new OnGetUserDetailListListener() {
    @Override
    public void onGetUserDetailList(List<UserDetail> userDetails, RKZResponseStatus rkzResponseStatus) {
        // ...
    }
});





 











var objectId = 'shop_review'
var userAccessToken = 'xxx'

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

var extensionAttribute = {
  show_favorite: true
}

RKZClient.getUserDetailList(objectId, userAccessToken, searchConditions, null, extensionAttribute, function (userDetails) {
  // ...
}, function (error) {
  // ...
})





 











const objectId = 'shop_review'
const userAccessToken = 'xxx'

const result = await RKZ.UserDetail.query(objectId, userAccessToken)
    .withFavorite(false)
    .find()




 

final objectId = 'shop_review';
final userAccessToken = 'xxx';

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




 


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

let objectId = "shop_review"
let userAccessToken = "xxx"

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

let extensionAttribute = RKZUserDetailExtensionAttribute()
extensionAttribute.show_favorite = true

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





 









NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";

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

RKZUserDetailExtensionAttribute *extensionAttribute = [[RKZUserDetailExtensionAttribute alloc] init];
extensionAttribute.show_favorite = YES;

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





 









val objectId = "shop_review"
val userAccessToken = "xxx"

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

val extensionAttribute = UserDetailExtensionAttribute()
extensionAttribute.setShowFavorite(true)

// 検索を実行
RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, null, sortConditions, extensionAttribute) { userDetails, rkzResponseStatus ->
    // ...
}





 









String objectId = "shop_review";
String userAccessToken = "xxx";

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

UserDetailExtensionAttribute extensionAttribute = new UserDetailExtensionAttribute();
extensionAttribute.setShowFavorite(true);

RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, null, sortConditions, extensionAttribute, new OnGetUserDetailListListener() {
    @Override
    public void onGetUserDetailList(List<UserDetail> userDetails, RKZResponseStatus rkzResponseStatus) {
        // ...
    }
});





 











var objectId = 'shop_review'
var userAccessToken = 'xxx'

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

var extensionAttribute = {
  show_favorite: true
}

RKZClient.getUserDetailList(objectId, userAccessToken, null, sortConditions, extensionAttribute, function (userDetails) {
  // ...
}, function (error) {
  // ...
})





 











const objectId = 'shop_review'
const userAccessToken = 'xxx'

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





 

final objectId = 'shop_review';
final userAccessToken = 'xxx';

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





 


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

let objectId = "shop_review"
let userAccessToken = "xxx"

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

let extensionAttribute = RKZUserDetailExtensionAttribute()
extensionAttribute.show_favorite = true

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





 









NSString *objectId = @"shop_review";
NSString *userAccessToken = @"xxx";

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

RKZUserDetailExtensionAttribute *extensionAttribute = [[RKZUserDetailExtensionAttribute alloc] init];
extensionAttribute.show_favorite = YES;

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





 









val objectId = "shop_review"
val userAccessToken = "xxx"

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

val extensionAttribute = UserDetailExtensionAttribute()
extensionAttribute.setShowFavorite(true)

// 検索を実行
RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, null, sortConditions, extensionAttribute) { userDetails, rkzResponseStatus ->
    // ...
}





 









String objectId = "shop_review";
String userAccessToken = "xxx";

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

UserDetailExtensionAttribute extensionAttribute = new UserDetailExtensionAttribute();
extensionAttribute.setShowFavorite(true);

RKZClient.getInstance().getUserDetailList(objectId, userAccessToken, null, sortConditions, extensionAttribute, new OnGetUserDetailListListener() {
    @Override
    public void onGetUserDetailList(List<UserDetail> userDetails, RKZResponseStatus rkzResponseStatus) {
        // ...
    }
});





 











var objectId = 'shop_review'
var userAccessToken = 'xxx'

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

var extensionAttribute = {
  show_favorite: true
}

RKZClient.getUserDetailList(objectId, userAccessToken, null, sortConditions, extensionAttribute, function (userDetails) {
  // ...
}, function (error) {
  // ...
})





 











const objectId = 'shop_review'
const userAccessToken = 'xxx'

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





 

final objectId = 'shop_review';
final userAccessToken = 'xxx';

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