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

Rya*_*ins 2 salesforce soql apex-code 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];
Run Code Online (Sandbox Code Playgroud)

这完全符合以管理员身份登录的情况,但我发现非管理员收到错误:

实施限制: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];
Run Code Online (Sandbox Code Playgroud)

容易,对吗?错误.这给出了以下内容:

期待一个正确的括号,发现'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]; 
Run Code Online (Sandbox Code Playgroud)

我越过我的手指......

Invalid bind expression type of LIST<Id> for column of type Id
Run Code Online (Sandbox Code Playgroud)

嗯,我已经看到了这样的例子,比如在developerforce板上,所以我现在有点亏.

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

Mat*_*cey 7

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

WHERE Id IN (:ids) 
Run Code Online (Sandbox Code Playgroud)

至:

WHERE Id IN :ids
Run Code Online (Sandbox Code Playgroud)

并且还通过确保您的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);
}
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!