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

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


好...

然后,我尝试像这样将其分解:

尝试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上关注的用户名和图片的列表。如果有完全不同的解决方法,我会接受的。

最佳答案

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

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


希望有帮助!

10-07 15:25