В моем приложении я отображаю список текущих пользователей. Прошу так:
Попытка 1
List<User> Following = [SELECT Id, Name, SmallPhotoUrl
FROM User
WHERE Id IN (
SELECT ParentId
FROM EntitySubscription
WHERE SubscriberId = :UserInfo.getUserId())
AND Id != :UserInfo.getUserId()
LIMIT 96];
Это делает именно то, что предполагается при входе в систему в качестве администратора, но я обнаружил, что неадминистраторы получают сообщение об ошибке:
Ограничение реализации: EntitySubscription разрешает оценку безопасности для пользователей без прав администратора, только если указано LIMIT и не более 1000.
Хорошо, ничего страшного, я просто добавлю LIMIT вот так:
Попытка 2
List<User> Following = [SELECT Id, Name, SmallPhotoUrl
FROM User
WHERE Id IN (
SELECT ParentId
FROM EntitySubscription
WHERE SubscriberId = :UserInfo.getUserId()
LIMIT 1000)
AND Id != :UserInfo.getUserId()
LIMIT 96];
Легко, верно? НЕПРАВИЛЬНО. Это дает следующее:
ожидал правильных скобок, нашел 'LIMIT'
OK...
Затем я попытался разбить его так:
Попытка 3
List<EntitySubscription> sub = [SELECT ParentId
FROM EntitySubscription
WHERE SubscriberId = :UserInfo.getUserId()
LIMIT 1000];
List<Id> ids = new List<Id>();
for(EntitySubscription s : sub){
ids.add(s.ParentId);
}
List<User> Following = [SELECT Id, Name, SmallPhotoUrl
FROM User
WHERE Id IN (:ids)
AND Id != :UserInfo.getUserId()
LIMIT 96];
Я скрестил пальцы и...
Invalid bind expression type of LIST<Id> for column of type Id
Хм, я видел примеры, когда это казалось возможным, например, на доски разработчиков, так что сейчас я немного растерялся.
Итак, мы здесь. Мне нужно выбрать список имен пользователей и изображений, на которые подписан конкретный пользователь в Chatter. Если есть совершенно другой способ сделать это, я открыт для него.