В моем приложении я отображаю список текущих пользователей. Я прошу это так:
Попытка 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
Ладно, ничего страшного, я просто добавлю ПРЕДЕЛ там, вот так:
Попытка 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
Хм, я видел примеры, где это казалось возможным, например, на платах developerforce , так что сейчас я немного растерялся.
Итак, мы здесь. Мне нужно выбрать список имен пользователей и картинок, за которыми пользователь следит в Chatter. Если есть совершенно другой способ, я открыт для этого.