SOQL - 查询当前用户关注的用户列表

时间:2012-02-06 23:39:42

标签: salesforce apex-code soql salesforce-chatter

在我的应用中,我会显示当前用户的列表。我这样请求:

尝试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'

行...

然后我尝试将其分解出来:

尝试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 boards上,所以我现在有点不知所措。

所以我们在这里。我需要选择特定用户在Chatter上关注的用户名和图片列表。如果有一种完全不同的方式可以解决它,我会接受它。

1 个答案:

答案 0 :(得分:7)

尝试删除绑定周围的括号,即更改:

WHERE Id IN (:ids) 

为:

WHERE Id IN :ids

还可以通过确保您的ID列表不包含当前用户的ID来简化查询:

List<EntitySubscription> sub = [SELECT ParentId 
  FROM EntitySubscription 
  WHERE SubscriberId = :UserInfo.getUserId() AND ParentId != :UserInfo.getUserId()
  LIMIT 1000];

Set<Id> ids = new Set<Id>();

for(EntitySubscription s : sub){
    ids.add(s.ParentId);
}

希望有所帮助!