2

在我的应用程序中,我显示了当前用户的列表。我这样要求:

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

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

4

1 回答 1

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);
}

希望有帮助!

于 2012-02-06T23:48:50.243 回答